...

Regressione con componenti principali (PCR) Strumenti quantitativi

by user

on
Category: Documents
12

views

Report

Comments

Transcript

Regressione con componenti principali (PCR) Strumenti quantitativi
5/12/2015
Regressione con componenti principali (PCR)
Regressione con componenti principali
(PCR)
Strumenti quantitativi per la gestione
Emanuele Taufer
Dati Hitters
Eliminare le righe con dati mancanti
PCR
Variabili nell’oggetto creato da pcr()
Coefficienti delle variabili nella PCR
Pesi dei primi due fattori
Punteggi fattoriali CP1 e CP2
Plot dei punteggi fattoriali
Summary
Individuare il numero di componenti da usare
PCR con 6 CP
Previsione
Individuare solo alcuni sottoinsiemi delle previsioni
Plot previsto­osservato
Regressione con PLS
Individuare il numero di PLS da usare
Variabili nell’oggetto creato da plsr()
Riferimenti bibliografici
Dati Hitters
Un data frame con 322 osservazioni su giocatori della major league di baseball con 20 variabili
Obbiettivo: per il campionato di baseball USA, prevedere il salario per un giocatore nel 1987 sulla
base delle statistiche per giocatore nella stagione precedente
1. AtBat: Number of times at bat in 1986
2. Hits: Number of hits in 1986
3. HmRun: Number of home runs in 1986
4. Runs: Number of runs in 1986
5. RBI: Number of runs batted in 1986
6. Walks: Number of walks in 1986
7. Years: Number of years in the major leagues
8. CAtBat: Number of times at bat during his career
9. CHits: Number of hits during his career
10. CHmRun: Number of home runs during his career
11. CRuns: Number of runs during his career
12. CRBI: Number of runs batted in during his career
13. CWalks: Number of walks during his career
file:///C:/Users/emanuele.taufer/Dropbox/3%20SQG/Labs/L6_­_PCR.html
1/13
5/12/2015
Regressione con componenti principali (PCR)
14. League: A factor with levels A and N indicating player’s league at the end of 1986
15. Division: A factor with levels E and W indicating player’s division at the end of 1986
16. PutOuts: Number of put outs in 1986
17. Assists: Number of assists in 1986
18. Errors: Number of errors in 1986
19. Salary: 1987 annual salary on opening day in thousands of dollars
20. NewLeague: A factor with levels A and N indicating player’s league at the beginning of 1987
library(ISLR)
data(Hitters)
head(Hitters)
AtBat Hits HmRun Runs RBI Walks Years CAtBat CHits
‐Andy Allanson 293 66 1 30 29 14 1 293 66
‐Alan Ashby 315 81 7 24 38 39 14 3449 835
‐Alvin Davis 479 130 18 66 72 76 3 1624 457
‐Andre Dawson 496 141 20 65 78 37 11 5628 1575
‐Andres Galarraga 321 87 10 39 42 30 2 396 101
‐Alfredo Griffin 594 169 4 74 51 35 11 4408 1133
CHmRun CRuns CRBI CWalks League Division PutOuts Assists
‐Andy Allanson 1 30 29 14 A E 446 33
‐Alan Ashby 69 321 414 375 N W 632 43
‐Alvin Davis 63 224 266 263 A W 880 82
‐Andre Dawson 225 828 838 354 N E 200 11
‐Andres Galarraga 12 48 46 33 N E 805 40
‐Alfredo Griffin 19 501 336 194 A W 282 421
Errors Salary NewLeague
‐Andy Allanson 20 NA A
‐Alan Ashby 10 475.0 N
‐Alvin Davis 14 480.0 A
‐Andre Dawson 3 500.0 N
‐Andres Galarraga 4 91.5 N
‐Alfredo Griffin 25 750.0 A
Eliminare le righe con dati mancanti
missing<‐is.na(Hitters)
apply(missing, 2, sum)
AtBat Hits HmRun Runs RBI Walks Years 0 0 0 0 0 0 0 CAtBat CHits CHmRun CRuns CRBI CWalks League 0 0 0 0 0 0 0 Division PutOuts Assists Errors Salary NewLeague 0 0 0 0 59 0 Hitters<‐Hitters[complete.cases(Hitters),] ## elimino le righe con "NA"
head(Hitters)
file:///C:/Users/emanuele.taufer/Dropbox/3%20SQG/Labs/L6_­_PCR.html
2/13
5/12/2015
Regressione con componenti principali (PCR)
AtBat Hits HmRun Runs RBI Walks Years CAtBat CHits
‐Alan Ashby 315 81 7 24 38 39 14 3449 835
‐Alvin Davis 479 130 18 66 72 76 3 1624 457
‐Andre Dawson 496 141 20 65 78 37 11 5628 1575
‐Andres Galarraga 321 87 10 39 42 30 2 396 101
‐Alfredo Griffin 594 169 4 74 51 35 11 4408 1133
‐Al Newman 185 37 1 23 8 21 2 214 42
CHmRun CRuns CRBI CWalks League Division PutOuts Assists
‐Alan Ashby 69 321 414 375 N W 632 43
‐Alvin Davis 63 224 266 263 A W 880 82
‐Andre Dawson 225 828 838 354 N E 200 11
‐Andres Galarraga 12 48 46 33 N E 805 40
‐Alfredo Griffin 19 501 336 194 A W 282 421
‐Al Newman 1 30 9 24 N E 76 127
Errors Salary NewLeague
‐Alan Ashby 10 475.0 N
‐Alvin Davis 14 480.0 A
‐Andre Dawson 3 500.0 N
‐Andres Galarraga 4 91.5 N
‐Alfredo Griffin 25 750.0 A
‐Al Newman 7 70.0 A
dim(Hitters)
[1] 263 20
PCR
La regressione con le CP può esser fatta utilizzando la funzione pcr() della libreria pls
library(pls)
set.seed(2)
pcr.fit=pcr(Salary~., data=Hitters, scale=TRUE, validation ="CV")
La sintassi di pcr() è simile a quella di lm()
L’opzione scale=TRUE standardizza i predittori prima di calcolare le CP
L’opzione validation=CV produce una cross­validazione 10­fold sui risultati per determinare il
numero ottimale di CP da usare
Variabili nell’oggetto creato da pcr()
names(pcr.fit)
file:///C:/Users/emanuele.taufer/Dropbox/3%20SQG/Labs/L6_­_PCR.html
3/13
5/12/2015
Regressione con componenti principali (PCR)
[1] "coefficients" "scores" "loadings" "Yloadings" [5] "projection" "Xmeans" "Ymeans" "fitted.values"
[9] "residuals" "Xvar" "Xtotvar" "fit.time" [13] "ncomp" "method" "scale" "validation" [17] "call" "terms" "model" Coefficienti delle variabili nella PCR
coeff<‐as.data.frame(pcr.fit$coefficients)
coeff[,1:2]
Salary.1 comps Salary.2 comps
AtBat 21.13207878 29.438966
Hits 20.87321071 29.039128
HmRun 21.77988064 26.912608
Runs 21.13705999 29.312723
RBI 25.06279956 31.870731
Walks 22.26529508 27.235049
Years 30.11445915 24.434849
CAtBat 35.21789413 31.042550
CHits 35.24760132 31.288812
CHmRun 33.99408860 31.260422
CRuns 36.04328244 32.314419
CRBI 36.27081015 32.632509
CWalks 33.76212997 29.599532
LeagueN ‐5.80503669 ‐7.865898
DivisionW ‐2.74157997 ‐3.535498
PutOuts 8.28029613 11.651168
Assists ‐0.08969488 3.560723
Errors ‐0.83758395 3.507803
NewLeagueN ‐4.46643991 ‐6.145712
Pesi dei primi due fattori
pcr.fit$loadings[,1:2]
file:///C:/Users/emanuele.taufer/Dropbox/3%20SQG/Labs/L6_­_PCR.html
4/13
5/12/2015
Regressione con componenti principali (PCR)
Comp 1 Comp 2
AtBat 0.1982903511 0.38378403
Hits 0.1958612933 0.37727112
HmRun 0.2043689229 0.23713561
Runs 0.1983370917 0.37772134
RBI 0.2351738026 0.31453120
Walks 0.2089237517 0.22960610
Years 0.2825754503 ‐0.26240195
CAtBat 0.3304629263 ‐0.19290382
CHits 0.3307416802 ‐0.18289883
CHmRun 0.3189794925 ‐0.12629732
CRuns 0.3382078595 ‐0.17227611
CRBI 0.3403428387 ‐0.16809208
CWalks 0.3168029362 ‐0.19231496
LeagueN ‐0.0544708722 ‐0.09521324
DivisionW ‐0.0257252900 ‐0.03667957
PutOuts 0.0776971752 0.15573663
Assists ‐0.0008416413 0.16865189
Errors ‐0.0078593695 0.20075992
NewLeagueN ‐0.0419103083 ‐0.07758356
Punteggi fattoriali CP1 e CP2
pcr.fit$scores[1:20,1:2]
Comp 1 Comp 2
‐Alan Ashby ‐0.009630358 ‐1.8669625
‐Alvin Davis 0.410650757 2.4247988
‐Andre Dawson 3.460224766 ‐0.8243753
‐Andres Galarraga ‐2.553449083 0.2305443
‐Alfredo Griffin 1.025746581 1.5705427
‐Al Newman ‐3.973081710 ‐1.5044104
‐Argenis Salazar ‐3.445150319 ‐0.5988471
‐Andres Thomas ‐3.425848614 ‐0.1133262
‐Andre Thornton 3.892286472 ‐1.9441629
‐Alan Trammell 3.168770232 2.3878127
‐Alex Trevino ‐2.163480993 ‐1.8609377
‐Andy VanSlyke ‐0.931437541 0.4346793
‐Alan Wiggins ‐2.270994270 ‐1.6636201
‐Bill Almon ‐1.044258482 ‐2.6796008
‐Buddy Bell 5.645236211 ‐0.4013665
‐Buddy Biancalana ‐3.570381157 ‐1.2205422
‐Bruce Bochy ‐3.257195508 ‐2.4740747
‐Barry Bonds ‐1.747681059 1.3206506
‐Bobby Bonilla ‐2.148683034 0.9145803
‐Bob Brenly 0.084118835 0.9017370
Plot dei punteggi fattoriali
Plotta solo alcuni dati, es. righe a:b
file:///C:/Users/emanuele.taufer/Dropbox/3%20SQG/Labs/L6_­_PCR.html
5/13
5/12/2015
Regressione con componenti principali (PCR)
a<‐10
b<‐30
plot(pcr.fit$scores[a:b,1],pcr.fit$scores[a:b,2], xlab="Prima CP",ylab="Seconda CP")
text(pcr.fit$scores[a:b,1],pcr.fit$scores[a:b,2], row.names(Hitters[a:b,]), pos=4, ce
x=1)
Summary
summary(pcr.fit)
file:///C:/Users/emanuele.taufer/Dropbox/3%20SQG/Labs/L6_­_PCR.html
6/13
5/12/2015
Regressione con componenti principali (PCR)
Data: X dimension: 263 19 Y dimension: 263 1
Fit method: svdpc
Number of components considered: 19
VALIDATION: RMSEP
Cross‐validated using 10 random segments.
(Intercept) 1 comps 2 comps 3 comps 4 comps 5 comps 6 comps
CV 452 348.9 352.2 353.5 352.8 350.1 349.1
adjCV 452 348.7 351.8 352.9 352.1 349.3 348.0
7 comps 8 comps 9 comps 10 comps 11 comps 12 comps 13 comps
CV 349.6 350.9 352.9 353.8 355.0 356.2 363.5
adjCV 348.5 349.8 351.6 352.3 353.4 354.5 361.6
14 comps 15 comps 16 comps 17 comps 18 comps 19 comps
CV 355.2 357.4 347.6 350.1 349.2 352.6
adjCV 352.8 355.2 345.5 347.6 346.7 349.8
TRAINING: % variance explained
1 comps 2 comps 3 comps 4 comps 5 comps 6 comps 7 comps
X 38.31 60.16 70.84 79.03 84.29 88.63 92.26
Salary 40.63 41.58 42.17 43.22 44.90 46.48 46.69
8 comps 9 comps 10 comps 11 comps 12 comps 13 comps 14 comps
X 94.96 96.28 97.26 97.98 98.65 99.15 99.47
Salary 46.75 46.86 47.76 47.82 47.85 48.10 50.40
15 comps 16 comps 17 comps 18 comps 19 comps
X 99.75 99.89 99.97 99.99 100.00
Salary 50.55 53.01 53.85 54.61 54.61
I risultati della cross­validazione sono espressi come la radice dello MSE (RMSEP).
Ci sono due stime cross­validazione:
cV è la stima ordinaria della cross­validazione
adjCV è una stima “corretta” per ridurre il bias nella stima di CV
Individuare il numero di componenti da usare
validationplot(pcr.fit, val.type="MSEP")
file:///C:/Users/emanuele.taufer/Dropbox/3%20SQG/Labs/L6_­_PCR.html
7/13
5/12/2015
Regressione con componenti principali (PCR)
PCR con 6 CP
pcr.fit=pcr(Salary~., data=Hitters, scale=TRUE, ncomp=6)
summary(pcr.fit)
Data: X dimension: 263 19 Y dimension: 263 1
Fit method: svdpc
Number of components considered: 6
TRAINING: % variance explained
1 comps 2 comps 3 comps 4 comps 5 comps 6 comps
X 38.31 60.16 70.84 79.03 84.29 88.63
Salary 40.63 41.58 42.17 43.22 44.90 46.48
Previsione
Se si preferisce, è possibile usare la funzione predict() per ottenere le previsoni del modello
file:///C:/Users/emanuele.taufer/Dropbox/3%20SQG/Labs/L6_­_PCR.html
8/13
5/12/2015
Regressione con componenti principali (PCR)
pcr.pred<‐predict(pcr.fit)
pcr.pred<‐as.data.frame(pcr.pred) # è preferibile costruire un data.frame con le previs
ioni
pcr.pred<‐cbind(Hitters$Salary,pcr.pred)
head(pcr.pred)
Hitters$Salary Salary.1 comps Salary.2 comps
‐Alan Ashby 475.0 534.8996 494.48973
‐Alvin Davis 480.0 579.6895 632.17353
‐Andre Dawson 500.0 904.6869 886.84350
‐Andres Galarraga 91.5 263.8013 268.79132
‐Alfredo Griffin 750.0 645.2411 679.23504
‐Al Newman 70.0 112.5090 79.94653
Salary.3 comps Salary.4 comps Salary.5 comps
‐Alan Ashby 525.22549 559.82506 495.0068
‐Alvin Davis 610.08536 619.85749 547.8896
‐Andre Dawson 900.33822 960.13423 1010.2236
‐Andres Galarraga 281.41564 361.90615 409.8232
‐Alfredo Griffin 711.57997 582.35125 524.9053
‐Al Newman 76.16928 62.49043 133.1325
Salary.6 comps
‐Alan Ashby 570.3991
‐Alvin Davis 661.5167
‐Andre Dawson 946.2311
‐Andres Galarraga 502.6162
‐Alfredo Griffin 556.8592
‐Al Newman 135.2173
Individuare solo alcuni sottoinsiemi delle
previsioni
pcr.pred[50:70, c(1,7)]
file:///C:/Users/emanuele.taufer/Dropbox/3%20SQG/Labs/L6_­_PCR.html
9/13
5/12/2015
Regressione con componenti principali (PCR)
Hitters$Salary Salary.6 comps
‐Don Baylor 950.000 1180.36204
‐Daryl Boston 75.000 60.10307
‐Darnell Coles 105.000 493.75614
‐Dave Concepcion 320.000 725.20944
‐Doug DeCinces 850.000 807.75624
‐Darrell Evans 535.000 1491.23121
‐Dwight Evans 933.333 1253.97927
‐Damaso Garcia 850.000 551.44525
‐Dan Gladden 210.000 268.40416
‐Dave Henderson 325.000 375.30528
‐Donnie Hill 275.000 144.75481
‐Davey Lopes 450.000 818.32602
‐Don Mattingly 1975.000 1156.96201
‐Dale Murphy 1900.000 1001.01781
‐Dwayne Murphy 600.000 565.71861
‐Dave Parker 1041.667 1104.19587
‐Dan Pasqua 110.000 329.77139
‐Darrell Porter 260.000 559.96402
‐Dick Schofield 475.000 350.17570
‐Don Slaught 431.500 307.92495
‐Darryl Strawberry 1220.000 743.02402
Plot previsto­osservato
plot(Hitters$Salary,pcr.pred[,7],main="PCR con 6 componenti",xlab="Osservato",ylab="Pre
visto",col="red")
file:///C:/Users/emanuele.taufer/Dropbox/3%20SQG/Labs/L6_­_PCR.html
10/13
5/12/2015
Regressione con componenti principali (PCR)
Regressione con PLS
La regressione con i PLS può esser fatta utilizzando la funzione plsr() della libreria pls
set.seed(1)
pls.fit=pcr(Salary~., data=Hitters, scale=TRUE, validation ="CV")
summary(pls.fit)
file:///C:/Users/emanuele.taufer/Dropbox/3%20SQG/Labs/L6_­_PCR.html
11/13
5/12/2015
Regressione con componenti principali (PCR)
Data: X dimension: 263 19 Y dimension: 263 1
Fit method: svdpc
Number of components considered: 19
VALIDATION: RMSEP
Cross‐validated using 10 random segments.
(Intercept) 1 comps 2 comps 3 comps 4 comps 5 comps 6 comps
CV 452 352.4 349.7 349.2 346.6 341.6 341.0
adjCV 452 352.0 349.4 348.9 346.3 341.3 340.4
7 comps 8 comps 9 comps 10 comps 11 comps 12 comps 13 comps
CV 342.0 342.6 343.4 345.1 345.7 348.9 348.6
adjCV 341.3 341.8 342.6 344.0 344.6 347.7 347.3
14 comps 15 comps 16 comps 17 comps 18 comps 19 comps
CV 343.0 345.4 336.6 338.5 334.8 337.6
adjCV 341.5 343.9 335.1 336.8 333.1 335.7
TRAINING: % variance explained
1 comps 2 comps 3 comps 4 comps 5 comps 6 comps 7 comps
X 38.31 60.16 70.84 79.03 84.29 88.63 92.26
Salary 40.63 41.58 42.17 43.22 44.90 46.48 46.69
8 comps 9 comps 10 comps 11 comps 12 comps 13 comps 14 comps
X 94.96 96.28 97.26 97.98 98.65 99.15 99.47
Salary 46.75 46.86 47.76 47.82 47.85 48.10 50.40
15 comps 16 comps 17 comps 18 comps 19 comps
X 99.75 99.89 99.97 99.99 100.00
Salary 50.55 53.01 53.85 54.61 54.61
La sintassi di plsr() è simile a quella di lm()
L’opzione scale=TRUE standardizza i predittori prima di calcolare i PLS
L’opzione validation=CV produce una cross­validazione 10­fold sui risultati per determinare il
numero ottimale di PLS da usare
Individuare il numero di PLS da usare
validationplot(pls.fit, val.type="MSEP")
file:///C:/Users/emanuele.taufer/Dropbox/3%20SQG/Labs/L6_­_PCR.html
12/13
5/12/2015
Regressione con componenti principali (PCR)
Variabili nell’oggetto creato da plsr()
names(pls.fit)
[1] "coefficients" "scores" "loadings" "Yloadings" [5] "projection" "Xmeans" "Ymeans" "fitted.values"
[9] "residuals" "Xvar" "Xtotvar" "fit.time" [13] "ncomp" "method" "scale" "validation" [17] "call" "terms" "model" Riferimenti bibliografici
An Introduction to Statistical Learning, with applications in R. (Springer, 2013)
file:///C:/Users/emanuele.taufer/Dropbox/3%20SQG/Labs/L6_­_PCR.html
13/13
Fly UP