Upload
vudan
View
227
Download
0
Embed Size (px)
Citation preview
17/11/2013
1
Analisi della regressione
2
Nella tavola è riportata la % di purezza di ossigeno,
rilasciata in un processo di distillazione chimica, e il
livello di idrocarbonio, presente nel condensa-
tore principale di unità di distillazione.
Osservazioni Liv.Idrocarbonio Purezza
1 0,99 90,01
2 1,02 89,05
3 1,15 91,43
4 1,29 93,74
5 1,46 96,73
6 1,36 94,45
7 0,87 87,59
8 1,23 91,77
9 1,55 99,42
10 1,4 93,65
11 1,19 93,54
12 1,15 92,52
13 0,98 90,56
14 1,01 89,54
15 1,11 89,85
16 1,2 90,39
17 1,26 93,25
18 1,32 93,41
19 1,43 94,98
20 0,95 87,33
L’analisi della regressione è una tecnica statistica per modellare e
investigare le relazioni tra due (o più) variabili.
Dati
salvati
in
un file
17/11/2013
2
3
> dati<-matrix(scan("C:/Programmi/R/R-3.0.2/regressionedati.R",
+ n=20*2),20,2,byrow=TRUE)
Read 40 items
Un primo modo di studiare che tipo
di relazione sussiste tra le popola-
zioni che hanno generato i dati è
il diagramma di dispersione (scatter
plot).
> datix<-dati[,1]
> datiy<-dati[,2]
> plot(datix,datiy,xlab='purezza
+ ossigeno',ylab='% di idrocarbonio')
Con questa concatenazione di functions è possibile far leggere i dati in
un file memorizzati sotto forma di tabella e assegnarli ad una variabile.
CONSIDERAZIONI SULLO SCATTER DIAGRAM
Le correlazioni, possibilmente positiva o possibilmente negativa, sono
In forse quando i punti rappresentativi delle coppie di dati, pur dispo-
nendosi attorno ad una delle due diagonali del diagramma, presentano
una dispersione piuttosto accentuata tale da far presumere l’esistenza
di altre cause che intervengono a determinare l'effetto studiato.
17/11/2013
3
5
C’è un modo per misurare il grado di correlazione
tra due variabili aleatorie?
[ ] [ ]
S e e , si defin isce d i
e , la quantità
C ov
(X ,Y ) [(
)( )].
X Y
X Y
E X E Y covarianza
X Y
E X Y
µ µ
µ µ
= =
= − −
D efin iz ion e
YXXYEYX µµ−= ][),cov(
Se e sono indipendenti, Cov( , ) 0.
Il viceversa non vale.
X Y X Y =Teorema :
2
31
31
31)(
101XY
xp
X=⇒
−Controesempio
( , ) 0Cov X Y⇒ =
6
: ( ) ( ) ( ) 2cov( , )Teore Var X Y Var X Var Y X Yma ± = + ±
La tra le variabili aleatorie e è la quantità:
cov( , )
( ) ( )
XY
X Y
correlazione X Y
X Y
Var X Var Y
σρ
σ σ= =
Definizi one
Se la covarianza tra due variabili aleatorie è positiva, negativa o nulla,
anche la correlazione sarà positiva, negativa o nulla.
La tra le variabili aleatorie e gode
della seguente proprietà: -1 1
correlazione X Y
ρ≤ ≤
Teorema :
Se 1 ( ): 1Teore P aX ba Ym ρ = ± ⇒ = ± =
17/11/2013
4
Il coefficiente di correlazione non è una misura generale della relazione
tra due variabili, ma esprime solo il grado di linearità della correlazione
in un grafico a dispersione.
Gli outliers possono modificare significativamente il valore
del coefficiente di correlazione.
17/11/2013
5
In R la function per
calcolare il coefficiente
di correlazione è
cor()
Bisogna specificare in
input il tipo di coefficiente
da calcolare: in questo
caso quello di Pearson.
> cor(datix, datiy, method="pearson")
[1] 0.9367154
17/11/2013
6
11
Y mX b ε= + +
Se si immagina che la relazione tra X e Y sia lineare, allora bisogna
ricercare i coefficienti della trasformazione
2
, coefficienti di regressione
(livello di idrocarbonio) var. aleat. indipendente
(purezza dell'ossigeno) var. aleat. dipendente
(errore casuale), E[ ] 0, Var[ ] .
m b
X
Y
ε ε ε σ
•
•
•
• = =
Come si calcolano i coefficienti?
IL METODO DEI MINIMI QUADRATI
Minimizzare la distanza tra i punti delle osservazioni e la retta stessa.
residui
( ) ( )2
1
,n
i i
i
Si cerca il minimo della funzione
rispetto m e b L a b y mx b
=
= − −
∑
17/11/2013
7
13
La funzione di R per stimare un modello di regressione lineare è lm
(linear models). L’output di tale funzione è molto complesso: in gene-
rale è opportuno salvarlo in una variabile di classe per poi estrarne le
quantità necessarie all’analisi dei dati
>result<-lm( datiy ~ datix)
>summary(result)
Residuals:
Min 1Q Median 3Q Max
-1.83029 -0.73334 0.04497 0.69969 1.96809
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 74.283 1.593 46.62 < 2e-16 ***
datix 14.947 1.317 11.35 1. 23e-09 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
14
Pertanto il modello lineare stimato è
y =
74.2 14.9y x= +
Possiamo sovrapporre la retta al grafico
con il comando:
> abline(lm(datiy ~ datix))
17/11/2013
8
15
>summary(result)
Residuals:
Min 1Q Median 3Q Max
-1.83029 -0.73334 0.04497 0.69969 1.96809
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 74.283 1.593 46.62 < 2e-16 ***
datix 14.947 1.317 11.35 1. 23e-09 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
L’errore standard misura il grado di precisione della stima dei parametri.
16
>summary(result)
Residuals:
Min 1Q Median 3Q Max
-1.83029 -0.73334 0.04497 0.69969 1.96809
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 74.283 1.593 46.62 < 2e-16 ***
datix 14.947 1.317 11.35 1.23e-09 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
E’ l’output di un test per verificare se i valori dei coefficienti sono nulli.
La legenda associa alle stelle un valore numerico: quando questi valo-
ri numerici sono inferiori a 0.05, allora si può ritenere non vera l’ipo-
tesi che i coefficienti sono nulli.
17/11/2013
9
17
>summary(result)
…Multiple R-squared: 0.8774, Adjusted R-squared: 0.8706
R^2 è noto nella letteratura come coefficiente di determinazione.
> rho<-cor(datix, datiy, method="pearson")
> rho^2
[1] 0.8774357
Spiega quanta parte della variabilità della Y è imputabile alla variabilità
della X, in questo caso l’87%.
Il valore numerico 0.8706 è ottenuto usando una formula corretta e
più robusta.
I valori vengono riportati entrambi perché grosse discrepanze segnalano
la presenza di valori anomali.
18
> summary(result)
F-statistic: 128.9 on 1 and 18 DF, p-value: 1.227e-09
Questo è un test per stabilire se è valido il modello con predittore
oppure quello senza predittore Y mX b Y bε ε= + + = +
L’esito del test si legge analogamente a prima.
Si osservi che questo test equivale al test per riconoscere se 0.m =
17/11/2013
10
19
ANALISI DEI RESIDUI
> summary(result)
Residuals:
Min 1Q Median 3Q Max
-1.83029 -0.73334 0.04497 0.69969 1.96809
Residual standard error: 1.087 on 18 degrees of freedom
Si definiscono residui le distanze tra i valori della variabile dipendente
ottenuti mediante la retta di regressione e quelli osservati.
ˆi i i
e y y= −
Anche in questo caso l’errore standard misura la variabilità dell’errore
stocastico ε inserito nel modello
2Perchè il modello sia valido è necessario provare che N(0, )ε σ∼
Per ora usiamo due strumenti grafici. Il grafico dei residui e il qqnorm.
> str(result)List of 12
$ coefficients : Named num [1:2] 74.3 14.9
..- attr(*, "names")= chr [1:2] "(Intercept)" "datix"
$ residuals : Named num [1:20] 0.9287 -0.4797 -0.0429 0.1744 0.6234 ...
..- attr(*, "names")= chr [1:20] "1" "2" "3" "4" ...
$ effects : Named num [1:20] -412.154 12.334 -0.207 -0.084 0.25 ...
..- attr(*, "names")= chr [1:20] "(Intercept)" "datix" "" "" ...
$ rank : int 2
$ fitted.values: Named num [1:20] 89.1 89.5 91.5 93.6 96.1 ...
..- attr(*, "names")= chr [1:20] "1" "2" "3" "4" ...
$ assign : int [1:2] 0 1
$ qr :List of 5
..$ qr : num [1:20, 1:2] -4.472 0.224 0.224 0.224 0.224 ...
.. ..- attr(*, "dimnames")=List of 2
.. .. ..$ : chr [1:20] "1" "2" "3" "4" ...
.. .. ..$ : chr [1:2] "(Intercept)" "datix"
.. ..- attr(*, "assign")= int [1:2] 0 1
..$ qraux: num [1:2] 1.22 1.17…
17/11/2013
11
> qqnorm(result$residuals)
>
> plot(1:20,result$residuals,type='p',
+ main='Grafico dei residui',
+ xlab='residui')
> abline(h=0, lwd=2)I punti si distribuiscono lungo
una retta. La dispersione non presenta
particolari patterns.
ESEMPI DI GRAFICI DI RESIDUI
Omoscheda-
sticità=
varianza
costante per
l’errore
Eteroscheda-
sticità=
varianza
diversa per
l’errore
17/11/2013
12
La relazione tra due campioni casuali non è sempre lineare. A volte è
possibile trasformare opportunamente le scale di misurazione perché
il modello di regressione lineare sia sufficiente.
Il seguente dataset rappresenta il peso corporeo espresso in kg e il
peso del cervello espresso in gr. per 62 diverse specie di mammiferi.
> cervello<-matrix(scan("C:/Programmi/R/R-3.0.2/cervello.txt",
+ skip=1,n=62*2),62,2,byrow=TRUE)
Read 124 items
Effettuando un diagramma
di dispersione dei dati, si
osserva un andamento molto
lontano da quello lineare.
Provando a rappresentare i dati in scala logaritmica, si ottiene…
> plot(log(cervello[,1]),log(cervello[,2]),type='p',main='Scatter-plot
+ Scala Log',xlab='Peso corporeo',ylab='Peso cervello')
> abline(lm(log(cervello[,2]) ~ log(cervello[,1])) )
>
17/11/2013
13
Torniamo all’esercizio sul fitting dei dati:
Esempio: si misura il tempo di vita di 20 lampadine, che è stato riportato
di seguito. Stimare la funzione guasto, la funzione di affidabilità, la densi-
tà di guasto, il tempo medio di vita. Determinare quale modello teorico
potrebbe descrivere il tempo di vita.
10,45 2,30 19,71 49,81 46,89 69,08 0,32 11,36 43,20 3,24
6,10 1,01 0,71 3,89 5,38 0,37 7,29 9,12 17,52 9,60
Usando i probability plotting papers, avevamo stabilito che il modello
di Weibull si adattava bene ai dati. Usando la function fitdistr()
> stima<-fitdistr(dati,"weibull")
> str(stima)List of 5
$ estimate: Named num [1:2] 0.764 13.497
..- attr(*, "names")= chr [1:2] "shape" "scale"
$ sd : Named num [1:2] 0.133 4.176
..- attr(*, "names")= chr [1:2] "shape" "scale"
…
Usando la regressione
sui dati del probability
plotting paper?
E’ necessario costruire il modello di regressione tra
> source('datiprimoesercizio.r')
> x<-log(sort(dati))
> index<-seq(1,20,1)
> cdf<-(index-0.3)/20.4
> z<-log(log(1/(1-cdf)))
> result<-lm(z ~ x)
> result
Coefficients:
(Intercept) x
-1.8988 0.7276
Per ottenere i coefficienti è sufficiente che:
Ovviamente questi non sono i parametri
di scala e di forma, perché nella retta di
regressione associata al probability plot-
ting paper è log
e = log
z x
m b
β β α
β β α
= − ⇒
= −
ossia 0.7276 e =13.59464β α=
Con fitdistr()
$ estimate: 0.764 13.497
"shape" "scale”
17/11/2013
14
Un caso in cui l’uso Del Modello di regressione
è necessario
L’esercizio che segue si riferisce a un campione casuale di 90 tempi di
guasto.
I tempi sono ripartiti in modalità e viene fornita la tabella seguente.
Rank Tempo guasto # guasti Guasti cum. Median rank %
1 600 23 23 25.1
2 1200 9 32 35.1
3 1800 2 34 37.3
4 2400 3 37 40.6
5 3000 11 48 52.8
6 3600 6 54 59.4
7 4200 3 57 62.7
8 4800 6 63 69.4
9 5400 4 67 73.8
10 6600 3 70 77.1
11 6900 4 74 81.5
12 7200 8 82 90.4
13 7800 3 85 93.7
14 8400 0 85 93.7
15 9000 1 86 94.8
16 9600 2 88 97.0
17 10200 2 90 99.2
17/11/2013
15
In R, aprire un file dove
riportare i dati e salvar-
lo con estensione .csv.
> guasti<-read.csv("C:/Programmi/R/guasti.csv",header=F,sep=",")
Un altro modo per
leggere le tabelle di
dati…
Questi file, una volta
letti con il comando
read.csv() producono
delle matrici con
la stessa struttura di
quella usata nel file
> guasti
V1 V2
1 600 23
2 1200 9
3 1800 2
4 2400 3
5 3000 11
6 3600 6
7 4200 3
8 4800 6
9 5400 4
10 6600 3
11 6900 4
12 7200 8
13 7800 3
14 8400 0
15 9000 1
16 9600 2
17 10200 2
Per costruire il probability plotting paper relativo al modello di Weibull
> x=log(guasti[,1])
> cdf=(cumsum(guasti[,2])-0.3)/(90+0.4)
> y=log(log(1/(1-cdf)))
Grafico
Non
Corretto
17/11/2013
16
Anche ricostruendo il campione casuale a partire dalla tabella…
> dati<-c(rep(guasti[1,1],guasti[1,2]))
> dati
[1] 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
[20] 600 600 600 600
> for (i in 2:17) {
+ dati<-c(dati, rep(guasti[i,1],guasti[i,2]))
+ }
> dati
[1] 600 600 600 600 600 600 600 600 600 600 600 600
[13] 600 600 600 600 600 600 600 600 600 600 600 1200
[25] 1200 1200 1200 1200 1200 1200 1200 1200 1800 1800 2400 2400
[37] 2400 3000 3000 3000 3000 3000 3000 3000 3000 3000 3000 3000
[49] 3600 3600 3600 3600 3600 3600 4200 4200 4200 4800 4800 4800
[61] 4800 4800 4800 5400 5400 5400 5400 6600 6600 6600 6900 6900
[73] 6900 6900 7200 7200 7200 7200 7200 7200 7200 7200 7800 7800
[85] 7800 9000 9600 9600 10200 10200
>
Il grafico che ne risulta non consente di ritenere adeguato il modello
di Weibull…
…perché vi sono molti dati che si ripetono
17/11/2013
17
Nel grafico originale invece riconosciamo tre andamenti:
Rank Tempo guasto # guasti Guasti cum. Median rank %
1 600 23 23 25.1
2 1200 9 32 35.1
3 1800 2 34 37.3
4 2400 3 37 40.6
5 3000 11 48 52.8
6 3600 6 54 59.4
7 4200 3 57 62.7
8 4800 6 63 69.4
9 5400 4 67 73.8
10 6600 3 70 77.1
11 6900 4 74 81.5
12 7200 8 82 90.4
13 7800 3 85 93.7
14 8400 0 85 93.7
15 9000 1 86 94.8
16 9600 2 88 97.0
17 10200 2 90 99.2
17/11/2013
18
Num.prova Tempo guasto # guasti Guasti cum. Median rank %
1 600 23 23 60.7
2 1200 9 32 84.8
3 1800 2 34 90.1
4 2400 3 37 98.1
5 3000 11 48 28.6
6 3600 6 54 44.7
7 4200 3 57 52.7
8 4800 6 63 68.7
9 5400 4 67 79.4
10 6600 3 70 87.4
11 6900 4 74 98.1
12 7200 8 82 47.0
13 7800 3 85 65.3
14 8400 0 85 65.3
15 9000 1 86 71.3
16 9600 2 88 83.6
17 10200 2 90 95.8
Num.prova Tempo guasto # guasti Guasti cum. Median rank %
1 600 23 23 60.7
2 1200 9 32 84.8
3 1800 2 34 90.1
4 2400 3 37 98.1
5 3000 11 11 28.6
6 3600 6 17 44.7
7 4200 3 20 52.7
8 4800 6 26 68.7
9 5400 4 30 79.4
10 6600 3 33 87.4
11 6900 4 37 98.1
12 7200 8 8 47.0
13 7800 3 11 65.3
14 8400 0 11 65.3
15 9000 1 12 71.3
16 9600 2 14 83.6
17 10200 2 16 95.8
17/11/2013
19
> dati1<-dati[1:37]
> dati2<-dati[38:74]
> dati3<-dati[74:90]
> library(MASS)
> stima1<-fitdistr(dati1,'weibull')
Error in fitdistr(dati1, "weibull") : optimization failed
In addition: Warning messages:
1: In densfun(x, parm[1], parm[2], ...) : NaNs produced
2: In densfun(x, parm[1], parm[2], ...) : NaNs produced
Il motivo dell’errore è che nella formula che stima uno dei due para-
metri della Weibull, compaiono le distanze tra i dati al denominatore.
Si può ovviare all’inconveniente usando la regressione lineare.
Una procedura più corretta consiste nell’uso dei cosiddetti modelli li-
neari generalizzati. Tuttavia ci “accontentiamo” di costruire un model-
lo di regressione per ciascuno dei 3 sottogruppi trovati.
Per il primo gruppo:
> guasti1<-guasti[1:4,1]
> x<-log(sort(guasti1))
> fas<-guasti[1:4,2]
> cdf<-(cumsum(fas)-0.3)/37.4
> z<-log(log(1/(1-cdf)))
> result<-lm(z ~ x)
> result
Coefficients:
(Intercept) x
-6.352 0.980 Con la trasformazione vista prima:
=0.980 e 653.0363β α =
17/11/2013
20
Per il secondo gruppo:
> guasti2<-guasti[5:11,1]
> x<-log(sort(guasti2))
> fas<-guasti[5:11,2]
> cdf<-(cumsum(fas)-0.3)/37.4
> z<-log(log(1/(1-cdf)))
> result<-lm(z ~ x)
> result
Coefficients:
(Intercept) x
-22.249 2.643
>
Con la trasformazione vista prima:
=2.643 e 4528.226β α =
Per il terzo gruppo:
> guasti3<-guasti[12:17,1]
> x<-log(sort(guasti3))
> fas<-guasti[12:17,2]
> cdf<-(cumsum(fas)-0.3)/37.4
> z<-log(log(1/(1-cdf)))
> result<-lm(z ~ x)
> result
Coefficients:
(Intercept) x
-20.791 2.183
>
Con la trasformazione vista prima:
=2.183 e 13436.44β α =
17/11/2013
21
L’esempio mostra come per questo componente le informazioni circa il
tasso di guasto siano ripartite lungo l’arco temporale. La affidabilità to-
tale è una somma di affidabilità, ciascuna si riferisce a un periodo della
vita, secondo dei pesi che restituiscono il peso di quel tasso di guasto
lungo l’arco temporale
1 1 2 2 3 3
1 2 3
( ) ( ) ( ) ( )
con 1
R t a R t a R t a R t
a a a
= + +
+ + =
1 1 2 2 3 3( ) ( ) ( ) ( )f t a f t a f t a f t= + +
1 1 2 2 3 3( ) ( ) ( ) ( )F t a F t a F t a F t= + +MISTURE
Iperesponenziale
31 2
1 2 3
37 37 16( ) exp exp exp
90 90 90
t t tR t
ββ β
α α α
= − + − + −
Nell’esempio è: