Discussione:
regressione polinomiale
(troppo vecchio per rispondere)
Eureka
2005-03-18 19:25:02 UTC
Permalink
allora dopo innumerevoli prove ho notato che le equazioni che excel fornisce
per la linea di tendenza con regressioni polinomiali superiori al 3 grado
sono tutte sbagliate e non di poco...
come fare??
qlc update?
putroppo avevo già fatto un algoritmo che mi estraeva dal grafico
l'equazione e ne separava i coefficenti il tutto era molto bello ma dopo ho
notato che i valori della regressione si discostavano di parecchio da quelli
reali!!
ho risolto utilizzando il risolutore ma preferivo l'altro metodo....

ciauz
fernando cinquegrani
2005-03-18 19:39:06 UTC
Permalink
[Eureka] scrive in
Post by Eureka
allora dopo innumerevoli prove ho notato che le equazioni che excel
fornisce per la linea di tendenza con regressioni polinomiali
superiori al 3 grado sono tutte sbagliate e non di poco...
come fare??
qlc update?
putroppo avevo già fatto un algoritmo che mi estraeva dal grafico
l'equazione e ne separava i coefficenti il tutto era molto bello ma
dopo ho notato che i valori della regressione si discostavano di
parecchio da quelli reali!!
ho risolto utilizzando il risolutore ma preferivo l'altro metodo....
a me sembrano perfetti. controlla le equazioni
http://www.prodomosua.it/zips/coefficienti.xls
.f
fernando cinquegrani
Microsoft MVP
http://www.prodomosua.it
Eureka
2005-03-18 22:39:03 UTC
Permalink
hmmm a me non funzionano te lo posso assicurare posso passarti un file di
esempio?
senza macro
Eureka
2005-03-19 00:37:04 UTC
Permalink
ops scusa non avevo notato il file allegato......
molto interessante ed elegante....
in + funziona... avrei una domanda come hai fatto a far apparire "bianchi"
#N/D quando l'equazione è di grado minore al 7°?

per quanto riguarda il mio prob iniziale mi riferivo alle equazioni
visualizzate sul grafico relative alle line di tendenza quelle non
funzionano (l'algoritmo a cui mi riferivo era in visual basic estraeva le
equazioni dal grafico poi dopo un pò di passaggi con elaborazione del testo
mi restituiva i coeff.)

cmq grazie dell' aiuto
massimiliano ares
2008-10-30 11:05:01 UTC
Permalink
Post by fernando cinquegrani
[Eureka] scrive in
Post by Eureka
allora dopo innumerevoli prove ho notato che le equazioni che excel
fornisce per la linea di tendenza con regressioni polinomiali
superiori al 3 grado sono tutte sbagliate e non di poco...
come fare??
qlc update?
putroppo avevo già fatto un algoritmo che mi estraeva dal grafico
l'equazione e ne separava i coefficenti il tutto era molto bello ma
dopo ho notato che i valori della regressione si discostavano di
parecchio da quelli reali!!
ho risolto utilizzando il risolutore ma preferivo l'altro metodo....
a me sembrano perfetti. controlla le equazioni
http://www.prodomosua.it/zips/coefficienti.xls
.f
fernando cinquegrani
Microsoft MVP
http://www.prodomosua.it
ciao a tutti,
mi trovo nella necessità di effettuare una regressione di 3 grado su una
serie definita di dati e successivamente utilizzare per altre elaborazioni i
coeffiienti di regressione ed il valore di Rquadro. La partenza è stato il
tool di "Data Anaysis" che tuttavia non contempla la regressione polinomiale
a gradi superiori al primo...
Ho scovato poi i vostri post (complimenti per il lavoro) e ho fatto un
respiro di sollievo: posso recuperare in qualche maniera i coefficienti di
regressione...
ma avete idea di come fare con Rquadro?

Grazie tante.
massimiliano
Eureka
2005-03-19 01:03:03 UTC
Permalink
ops mi son dimenticato...ma la casella di testo con selezione multipla per il
grado del polinomio come la hai fatta?
grazie ancora
Eureka
2005-03-19 02:05:01 UTC
Permalink
con la casella di testo ho risolto ora mi rimane quel problemino con i "#N/D"
che mi piacerebbe non si vedeesser :-P
fernando cinquegrani
2005-03-19 05:19:57 UTC
Permalink
Post by Eureka
con la casella di testo ho risolto ora mi rimane quel problemino con i "#N/D"
che mi piacerebbe non si vedeesser :-P
per la casella a discesa controlla
dati :: convalida ...
per gli #N/D controlla
formato :: formattazione condizionale...

se vai in google groups e cerchi
convalida e formattazione condizionale
troverai, come direbbe eliano, una
*trentina* di thread di questo newsgroup
dedicati a questi argomenti:
http://groups.google.it/groups?q=convalida+group:*it.office.excel&num=30&hl=it&lr=&scoring=d
e
http://groups.google.it/groups?as_q=formattazione%20condizionale&as_ugroup=*it.office.excel&as_scoring=d&lr=&num=30&hl=it
(ordina per data)
.f
fernando cinquegrani
http://www.prodomosua.it
Eureka
2005-03-19 13:45:03 UTC
Permalink
grazie 1000
ma avrei ancora una domanda allora in verifica della polinomiale (per
capirsi la colonna più di destra del tuo foglio) nel mio caso ho molte righe
quindi vorrei optare
per scrivere direttamente l'equazione ed incollarla per tutte le righe di
cui ho bisogno
ma a questo punto sorge un problemino nel caso l'equazione sia di grado
inferiore al 7° (coefficenti mancanti) allora per risolvere il problema
basterebbe ordinare i coefficenti partendo dalla destra anziche dalla sinistra
es:
7° 6° 5° 4° 3° 2° 1° cost
#N/D a3 a2 a1 a0

in questo modo l'equazione sarebbe sempre "ordinata"

ho risolto il problemino con una valanga di SE() la mia domanda era si può
fare qlc di meglio di una valanga di SE()...
si tratta di spostare i coefficenti in base al numero di caselle vuote


grazie ancora e complimenti per il tuo sito molto carino
fernando cinquegrani
2005-03-19 18:37:40 UTC
Permalink
[Eureka] scrive in
Post by Eureka
grazie 1000
ma avrei ancora una domanda allora in verifica della polinomiale (per
capirsi la colonna più di destra del tuo foglio) nel mio caso ho
molte righe quindi vorrei optare
per scrivere direttamente l'equazione ed incollarla per tutte le righe di
cui ho bisogno
ma a questo punto sorge un problemino nel caso l'equazione sia di
grado inferiore al 7° (coefficenti mancanti) allora per risolvere il
problema basterebbe ordinare i coefficenti partendo dalla destra
7° 6° 5° 4° 3° 2° 1° cost
#N/D a3 a2 a1 a0
vediamo se ho capito...
1. leggi il precedente thread [niubbo] conta.se del 19/3/2005:
un po' di conoscenze matriciali per queste formule è
assolutamente necessario
2. considera i dati nelle celle A2:B18
la tua regressione di 4° ordine puoi definirla così:
seleziona le celle da C2 a G2 (5 celle)
premi F2 e inserisci
=REGR.LIN(B2:B18;A2:A18^{1;2;3;4}) Cntl+Maiusc+Invio
3. come si diceva nel thread a cui facevo riferimento
una formula matriciale non deve necessariamente stare
dentro le celle, può stare in una formula.
quindi posso scrivere,
nella cella C2
=INDICE(REGR.LIN($B$2:$B$18;$A$2:$A$18^{1;2;3;4});1)
Cntl+Maiusc+Invio
nella cella D2
=INDICE(REGR.LIN($B$2:$B$18;$A$2:$A$18^{1;2;3;4});2)
Cntl+Maiusc+Invio
ecc.
per ottenere lo stesso risultato
4. ora tu vorresti che questa non fosse nelle celle da C2
a G2 ma da F2 a J2 riservando la colonna C per il
settimo grado di una regressione del settimo ordine
allora dovresti avere in F2 (colonna 6)
=INDICE(REGR.LIN($B$2:$B$18;$A$2:$A$18^{1;2;3;4});1)
Cntl+Maiusc+Invio
in G2 (colonna 7)
=INDICE(REGR.LIN($B$2:$B$18;$A$2:$A$18^{1;2;3;4});2)
Cntl+Maiusc+Invio
ecc.
oppure meglio, in F2
=INDICE(REGR.LIN($B$2:$B$18;$A$2:$A$18^{1;2;3;4});rif.colonna()-5)
Cntl+Maiusc+Invio
da copiare da G2 a J2
5. quindi il problema si riduce a dover avere un indice 1
in colonna C (3) quando l'equazione è del settimo ordine
o in colonna F (6) quando l'equazione è del quarto ordine.
se in C1 hai l'ordine della regressione,
l'indice potrebbe allora essere
rif.colonna()+$C$1-9
in C2 infatti avrò 3+7-9=1 se in C1 ho 7
in F2 avrò 6+4-9=1 se in C1 ho 4
purtroppo però lo 0 ha un significato speciale
nella funzione indice, quindi bisogna rimuoverlo
allora
se(rif.colonna()+$C$1-9>0;rif.colonna()+$C$1-9;-1)
6. quindi inserisci in C2
=INDICE(REGR.LIN($B$2:$B$18;$A$2:$A$18^{1;2;3;4});se(rif.colonna()+$C$1-9>0;rif.colonna()+$C$1-9;-1))
Cntl+Maiusc+Invio
e copialo da G2 a J2
7. a questo punto facciamo in modo che la formula si parametrizzi
per un ordine dal 2 al 7 come indicato in C1
avremo quindi
=INDICE(REGR.LIN($B$2:$B$18;$A$2:$A$18^RIF.COLONNA(SCARTO($A$1;0;0;1;$C$1)));SE(RIF.COLONNA()+$C$1-9>0;RIF.COLONNA()+$C$1-9;-1))
Cntl+Maiusc+Invio
da inserire in C2 e copiare da D2 a J2
inserendo in C1 4 o 7 o qualsiasi valore tra 2 e 7
vedrai il risultato che volevi.
perchè io abbia sostituito {1;2;3;4} con
RIF.COLONNA(SCARTO($A$1;0;0;1;$C$1))
puoi capirlo selezionando questa parte della formula
e premendo F9
8. perchè tutta questa tiritera?
perchè non so se sei in colonna C, se il massimo ordine
che intendi impostare è 7 e qual'è la struttura dei tuoi dati.
se hai seguito il ragionamento non ti sarà difficile trovare
la formula adatta alla struttura dei tuoi dati.
.f
fernando cinquegrani
Microsoft MVP
http://www.prodomosua.it
Eureka
2005-03-19 20:11:02 UTC
Permalink
io avevo risolto tipo così:
"=SE(VAL.ERRORE(U15);SE(VAL.ERRORE(T15);SE(VAL.ERRORE(S15);
SE(VAL.ERRORE(R15);SE(VAL.ERRORE(Q15);SE(VAL.ERRORE(P15);
SE(VAL.ERRORE(N15);O15;O15);P15);Q15);R15);S15);T15);U15)"
nel caso in cui i coeff siano nele celle u15 t15 ecc....

bhe ora che avevo finito tutto è venuto fuori il problemone :-(( qst
funzioni mi rendono il file molto pesante e visto che i dati su cui dovevo
fare la regressione sono in un file txt esterno ricorro a delle macro per
estrarre ed elaborare i dati:
(ho diciamo in genere sulle 2000 righe)

Do While i < numerorighe
tempo = Split(Worksheets("Data").Cells(i+1 , 1), ":", -1)
tempo2 = Split(tempo(1), ".", -1)
secondi = tempo(0) * 60 + tempo2(0) + tempo2(1) / 10
Worksheets("foglio1").Cells(10 + i, 1) =secondi
i=i+1
loop

dove nella cella Worksheets("Data").Cells(i+1 , 1) ci sono dei dati :
min:sec.decimisec
16:04.2

il foglio data lo ho importato sempre con delle macro utilizando Dati
importa dati esterni questa operazione risulta essere veloce però non riesco
a ottenere i secondi ma appunto delle cose del genere 16:04.2

bhe mi domandavo oltre a chiederti cosa ne pensi del codice riportato sopra,
se sia possibile interrompere l'aggiornamento del foglio durante
l'esecuzione della macro...
oppure se hai altre idee..

plz help me
fernando cinquegrani
2005-03-20 07:50:35 UTC
Permalink
[Eureka] scrive in
http://www.google.it/groups?selm=B2008EA7-1389-4BC2-983C-***@microsoft.com
[cut] non ho capito nulla
Post by Eureka
min:sec.decimisec
16:04.2
è corretta secondo il formato americano.
hai provato a impostare in windows le opzioni internazionali
americane *prima* di eseguire la query?
altrimenti, per tradurlo secondo il nostro standard,
non mi viene in mente niente di meglio di questa
=VALORE("0:"
&SINISTRA(A1;RICERCA(".";A1)-1))+VALORE(DESTRA(A1;1))/900000)

impostare il calcolo manuale
application.calculation=xlcalculationmanual
e reimpostarlo ad automatico a fine query
application.calculation=xlcalculationautomatic
non può che far del bene (se si devono utilizzare
nella macro dei valori ricalcolati, si userà upportunamente
il .calculate).
.f
Eureka
2005-03-20 12:11:02 UTC
Permalink
non so come ringraziarti ora è velocissimo ci mette 3 secondi contro i 45 di
prima
10000000000000000000 grazie

quelle due funzioni sono una favola..........io pensavo fossero solo una
soluzione della mia mente malata invece esistono!!! EUREKA!!!!
application.calculation=xlcalculationmanual
application.calculation=xlcalculationautomatic

non ci posso ancora credere :-P

GRAZIEEEEEEEEE


p.s. nel mio 1° post affermavo che le equazioni visualizzate sul grafico
(per la linea di tendenza) sono sbagliate in realtà sono sbagliate a meno che
non modificate la precisione numerica della visualizzazione,,,
m***@gmail.com
2017-11-27 22:32:48 UTC
Permalink
Post by fernando cinquegrani
[Eureka] scrive in
Post by Eureka
grazie 1000
ma avrei ancora una domanda allora in verifica della polinomiale (per
capirsi la colonna più di destra del tuo foglio) nel mio caso ho
molte righe quindi vorrei optare
per scrivere direttamente l'equazione ed incollarla per tutte le righe di
cui ho bisogno
ma a questo punto sorge un problemino nel caso l'equazione sia di
grado inferiore al 7° (coefficenti mancanti) allora per risolvere il
problema basterebbe ordinare i coefficenti partendo dalla destra
7° 6° 5° 4° 3° 2° 1° cost
#N/D a3 a2 a1 a0
vediamo se ho capito...
un po' di conoscenze matriciali per queste formule è
assolutamente necessario
2. considera i dati nelle celle A2:B18
seleziona le celle da C2 a G2 (5 celle)
premi F2 e inserisci
=REGR.LIN(B2:B18;A2:A18^{1;2;3;4}) Cntl+Maiusc+Invio
3. come si diceva nel thread a cui facevo riferimento
una formula matriciale non deve necessariamente stare
dentro le celle, può stare in una formula.
quindi posso scrivere,
nella cella C2
=INDICE(REGR.LIN($B$2:$B$18;$A$2:$A$18^{1;2;3;4});1)
Cntl+Maiusc+Invio
nella cella D2
=INDICE(REGR.LIN($B$2:$B$18;$A$2:$A$18^{1;2;3;4});2)
Cntl+Maiusc+Invio
ecc.
per ottenere lo stesso risultato
4. ora tu vorresti che questa non fosse nelle celle da C2
a G2 ma da F2 a J2 riservando la colonna C per il
settimo grado di una regressione del settimo ordine
allora dovresti avere in F2 (colonna 6)
=INDICE(REGR.LIN($B$2:$B$18;$A$2:$A$18^{1;2;3;4});1)
Cntl+Maiusc+Invio
in G2 (colonna 7)
=INDICE(REGR.LIN($B$2:$B$18;$A$2:$A$18^{1;2;3;4});2)
Cntl+Maiusc+Invio
ecc.
oppure meglio, in F2
=INDICE(REGR.LIN($B$2:$B$18;$A$2:$A$18^{1;2;3;4});rif.colonna()-5)
Cntl+Maiusc+Invio
da copiare da G2 a J2
5. quindi il problema si riduce a dover avere un indice 1
in colonna C (3) quando l'equazione è del settimo ordine
o in colonna F (6) quando l'equazione è del quarto ordine.
se in C1 hai l'ordine della regressione,
l'indice potrebbe allora essere
rif.colonna()+$C$1-9
in C2 infatti avrò 3+7-9=1 se in C1 ho 7
in F2 avrò 6+4-9=1 se in C1 ho 4
purtroppo però lo 0 ha un significato speciale
nella funzione indice, quindi bisogna rimuoverlo
allora
se(rif.colonna()+$C$1-9>0;rif.colonna()+$C$1-9;-1)
6. quindi inserisci in C2
=INDICE(REGR.LIN($B$2:$B$18;$A$2:$A$18^{1;2;3;4});se(rif.colonna()+$C$1-9>0;rif.colonna()+$C$1-9;-1))
Cntl+Maiusc+Invio
e copialo da G2 a J2
7. a questo punto facciamo in modo che la formula si parametrizzi
per un ordine dal 2 al 7 come indicato in C1
avremo quindi
=INDICE(REGR.LIN($B$2:$B$18;$A$2:$A$18^RIF.COLONNA(SCARTO($A$1;0;0;1;$C$1)));SE(RIF.COLONNA()+$C$1-9>0;RIF.COLONNA()+$C$1-9;-1))
Cntl+Maiusc+Invio
da inserire in C2 e copiare da D2 a J2
inserendo in C1 4 o 7 o qualsiasi valore tra 2 e 7
vedrai il risultato che volevi.
perchè io abbia sostituito {1;2;3;4} con
RIF.COLONNA(SCARTO($A$1;0;0;1;$C$1))
puoi capirlo selezionando questa parte della formula
e premendo F9
8. perchè tutta questa tiritera?
perchè non so se sei in colonna C, se il massimo ordine
che intendi impostare è 7 e qual'è la struttura dei tuoi dati.
se hai seguito il ragionamento non ti sarà difficile trovare
la formula adatta alla struttura dei tuoi dati.
.f
fernando cinquegrani
Microsoft MVP
http://www.prodomosua.it
Io seguo la procedura ma exel mi segna errore sull'1 dentro la parentesi graffa
Continua a leggere su narkive:
Loading...