Regressione con componenti principali (PCR) Strumenti …taufer/Labs/L6 - PCR.pdf · 5 / 1 2 0 R e...

13
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 previstoosservato 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

Transcript of Regressione con componenti principali (PCR) Strumenti …taufer/Labs/L6 - PCR.pdf · 5 / 1 2 0 R e...

5/12/2015 Regressione con componenti principali (PCR)

file:///C:/Users/emanuele.taufer/Dropbox/3%20SQG/Labs/L6_­_PCR.html 1/13

Regressione con componenti principali(PCR)Strumenti quantitativi per la gestioneEmanuele Taufer

Dati Hitters

Eliminare le righe con dati mancantiPCRVariabili nell’oggetto creato da  pcr()Coefficienti delle variabili nella PCRPesi dei primi due fattoriPunteggi fattoriali CP1 e CP2Plot dei punteggi fattorialiSummaryIndividuare il numero di componenti da usarePCR con 6 CPPrevisioneIndividuare solo alcuni sottoinsiemi delle previsioniPlot previsto­osservatoRegressione con PLSIndividuare il numero di PLS da usareVariabili nell’oggetto creato da  plsr()Riferimenti bibliografici

Dati HittersUn 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 sullabase delle statistiche per giocatore nella stagione precedente

1.  AtBat: Number of times at bat in 19862.  Hits: Number of hits in 19863.  HmRun: Number of home runs in 19864.  Runs: Number of runs in 19865.  RBI: Number of runs batted in 19866.  Walks: Number of walks in 19867.  Years: Number of years in the major leagues8.  CAtBat: Number of times at bat during his career9.  CHits: Number of hits during his career10.  CHmRun: Number of home runs during his career11.  CRuns: Number of runs during his career12.  CRBI: Number of runs batted in during his career13.  CWalks: Number of walks during his career

5/12/2015 Regressione con componenti principali (PCR)

file:///C:/Users/emanuele.taufer/Dropbox/3%20SQG/Labs/L6_­_PCR.html 2/13

14.  League: A factor with levels A and N indicating player’s league at the end of 198615.  Division: A factor with levels E and W indicating player’s division at the end of 198616.  PutOuts: Number of put outs in 198617.  Assists: Number of assists in 198618.  Errors: Number of errors in 198619.  Salary: 1987 annual salary on opening day in thousands of dollars20.  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 mancantimissing<‐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)

5/12/2015 Regressione con componenti principali (PCR)

file:///C:/Users/emanuele.taufer/Dropbox/3%20SQG/Labs/L6_­_PCR.html 3/13

                  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

PCRLa 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 ilnumero ottimale di CP da usare

Variabili nell’oggetto creato da pcr()names(pcr.fit)

5/12/2015 Regressione con componenti principali (PCR)

file:///C:/Users/emanuele.taufer/Dropbox/3%20SQG/Labs/L6_­_PCR.html 4/13

 [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 PCRcoeff<‐as.data.frame(pcr.fit$coefficients)coeff[,1:2]

           Salary.1 comps Salary.2 compsAtBat         21.13207878      29.438966Hits          20.87321071      29.039128HmRun         21.77988064      26.912608Runs          21.13705999      29.312723RBI           25.06279956      31.870731Walks         22.26529508      27.235049Years         30.11445915      24.434849CAtBat        35.21789413      31.042550CHits         35.24760132      31.288812CHmRun        33.99408860      31.260422CRuns         36.04328244      32.314419CRBI          36.27081015      32.632509CWalks        33.76212997      29.599532LeagueN       ‐5.80503669      ‐7.865898DivisionW     ‐2.74157997      ‐3.535498PutOuts        8.28029613      11.651168Assists       ‐0.08969488       3.560723Errors        ‐0.83758395       3.507803NewLeagueN    ‐4.46643991      ‐6.145712

Pesi dei primi due fattoripcr.fit$loadings[,1:2]

5/12/2015 Regressione con componenti principali (PCR)

file:///C:/Users/emanuele.taufer/Dropbox/3%20SQG/Labs/L6_­_PCR.html 5/13

                  Comp 1      Comp 2AtBat       0.1982903511  0.38378403Hits        0.1958612933  0.37727112HmRun       0.2043689229  0.23713561Runs        0.1983370917  0.37772134RBI         0.2351738026  0.31453120Walks       0.2089237517  0.22960610Years       0.2825754503 ‐0.26240195CAtBat      0.3304629263 ‐0.19290382CHits       0.3307416802 ‐0.18289883CHmRun      0.3189794925 ‐0.12629732CRuns       0.3382078595 ‐0.17227611CRBI        0.3403428387 ‐0.16809208CWalks      0.3168029362 ‐0.19231496LeagueN    ‐0.0544708722 ‐0.09521324DivisionW  ‐0.0257252900 ‐0.03667957PutOuts     0.0776971752  0.15573663Assists    ‐0.0008416413  0.16865189Errors     ‐0.0078593695  0.20075992NewLeagueN ‐0.0419103083 ‐0.07758356

Punteggi fattoriali CP1 e CP2pcr.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 fattorialiPlotta solo alcuni dati, es. righe a:b

5/12/2015 Regressione con componenti principali (PCR)

file:///C:/Users/emanuele.taufer/Dropbox/3%20SQG/Labs/L6_­_PCR.html 6/13

a<‐10b<‐30plot(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, cex=1)

Summarysummary(pcr.fit)

5/12/2015 Regressione con componenti principali (PCR)

file:///C:/Users/emanuele.taufer/Dropbox/3%20SQG/Labs/L6_­_PCR.html 7/13

Data:   X dimension: 263 19     Y dimension: 263 1Fit method: svdpcNumber of components considered: 19

VALIDATION: RMSEPCross‐validated using 10 random segments.       (Intercept)  1 comps  2 comps  3 comps  4 comps  5 comps  6 compsCV             452    348.9    352.2    353.5    352.8    350.1    349.1adjCV          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 compsCV       349.6    350.9    352.9     353.8     355.0     356.2     363.5adjCV    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 compsCV        355.2     357.4     347.6     350.1     349.2     352.6adjCV     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 compsX         38.31    60.16    70.84    79.03    84.29    88.63    92.26Salary    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 compsX         94.96    96.28     97.26     97.98     98.65     99.15     99.47Salary    46.75    46.86     47.76     47.82     47.85     48.10     50.40        15 comps  16 comps  17 comps  18 comps  19 compsX          99.75     99.89     99.97     99.99    100.00Salary     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­validazioneadjCV è una stima “corretta” per ridurre il bias nella stima di CV

Individuare il numero di componenti da usarevalidationplot(pcr.fit, val.type="MSEP")

5/12/2015 Regressione con componenti principali (PCR)

file:///C:/Users/emanuele.taufer/Dropbox/3%20SQG/Labs/L6_­_PCR.html 8/13

PCR con 6 CPpcr.fit=pcr(Salary~., data=Hitters, scale=TRUE, ncomp=6)summary(pcr.fit)

Data:   X dimension: 263 19     Y dimension: 263 1Fit method: svdpcNumber of components considered: 6TRAINING: % variance explained        1 comps  2 comps  3 comps  4 comps  5 comps  6 compsX         38.31    60.16    70.84    79.03    84.29    88.63Salary    40.63    41.58    42.17    43.22    44.90    46.48

PrevisioneSe si preferisce, è possibile usare la funzione  predict()  per ottenere le previsoni del modello

5/12/2015 Regressione con componenti principali (PCR)

file:///C:/Users/emanuele.taufer/Dropbox/3%20SQG/Labs/L6_­_PCR.html 9/13

pcr.pred<‐predict(pcr.fit)pcr.pred<‐as.data.frame(pcr.pred) # è preferibile costruire un data.frame con le previsionipcr.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 delleprevisionipcr.pred[50:70, c(1,7)]

5/12/2015 Regressione con componenti principali (PCR)

file:///C:/Users/emanuele.taufer/Dropbox/3%20SQG/Labs/L6_­_PCR.html 10/13

                   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­osservatoplot(Hitters$Salary,pcr.pred[,7],main="PCR con 6 componenti",xlab="Osservato",ylab="Previsto",col="red")

5/12/2015 Regressione con componenti principali (PCR)

file:///C:/Users/emanuele.taufer/Dropbox/3%20SQG/Labs/L6_­_PCR.html 11/13

Regressione con PLSLa 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)

5/12/2015 Regressione con componenti principali (PCR)

file:///C:/Users/emanuele.taufer/Dropbox/3%20SQG/Labs/L6_­_PCR.html 12/13

Data:   X dimension: 263 19     Y dimension: 263 1Fit method: svdpcNumber of components considered: 19

VALIDATION: RMSEPCross‐validated using 10 random segments.       (Intercept)  1 comps  2 comps  3 comps  4 comps  5 comps  6 compsCV             452    352.4    349.7    349.2    346.6    341.6    341.0adjCV          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 compsCV       342.0    342.6    343.4     345.1     345.7     348.9     348.6adjCV    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 compsCV        343.0     345.4     336.6     338.5     334.8     337.6adjCV     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 compsX         38.31    60.16    70.84    79.03    84.29    88.63    92.26Salary    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 compsX         94.96    96.28     97.26     97.98     98.65     99.15     99.47Salary    46.75    46.86     47.76     47.82     47.85     48.10     50.40        15 comps  16 comps  17 comps  18 comps  19 compsX          99.75     99.89     99.97     99.99    100.00Salary     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 ilnumero ottimale di PLS da usare

Individuare il numero di PLS da usarevalidationplot(pls.fit, val.type="MSEP")

5/12/2015 Regressione con componenti principali (PCR)

file:///C:/Users/emanuele.taufer/Dropbox/3%20SQG/Labs/L6_­_PCR.html 13/13

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 bibliograficiAn Introduction to Statistical Learning, with applications in R. (Springer, 2013)