2013-03-28 16 views
6

Sto analizzando i dati relativi ai campi reed. Le variabili che ho misurato sono profondità dell'acqua, altezza canna, densità reed, ecc. Poiché alcune variabili dipendono, ho eseguito un PCA per ridurre queste variabili a 2 assi PCA (N = 104).Estrazione degli assi PCA per ulteriori analisi

Per l'esecuzione del PCA ho usato il pacchetto vegan in R. I miei dati simile a questa:

row.names Waterpeil hoogte_max Som Leeftijd_riet PFD oppervlakte onderlaag_num afst_rand 
1 1 5 2.5 51 0.15686274 1.616921 8.127192 2 24.154590 
2 3 9 2.5 44 0.13636364 1.564643 9.023642 2 8.349288 
3 4 0 2.5 84 0.30952381 1.352548 8.498775 2 26.226896 
4 5 0 3.5 58 0.43103448 1.384183 9.301617 1 57.320000 
5 6 40 2.5 52 0.42307692 1.361262 10.316058 1 45.470000 
6 7 5 3.0 19 0.00000000 1.429287 9.927788 1 36.720000 
7 9 0 2.5 64 0.28125000 1.355100 8.029911 2 19.560000 
8 11 120 3.5 29 0.03448276 1.336117 11.147484 1 252.630000 
9 14 0 2.0 27 0.07407407 1.847756 7.445060 2 1.864342 
10 16 20 2.5 57 0.24561404 1.582308 8.425177 2 9.490196 
11 17 5 3.0 54 0.01851852 1.348305 9.315008 2 15.960000 
12 18 0 1.5 5 1.00000000 1.643657 8.063648 2 6.526300 
13 21 0 2.0 18 0.05555556 1.394964 8.752185 2 37.576955 
14 22 20 2.0 48 0.16666667 1.617045 8.911028 1 11.592383 
15 25 0 2.5 71 0.42253521 1.749114 7.271499 2 6.572772 
16 26 0 2.0 50 0.30000000 1.464582 7.349908 2 9.849276 
17 27 5 2.5 61 0.34426229 1.511217 8.379012 2 14.082827 
18 28 5 2.0 123 0.06504065 1.538188 8.271017 2 11.658142 
19 29 100 3.0 75 0.44000000 1.896483 7.968603 1 9.071897 
20 30 100 3.0 95 0.55789474 1.768147 8.367626 1 2.300783 
21 32 0 3.0 74 0.45945946 1.458793 9.453464 2 57.210000 
22 33 15 3.0 66 0.24242424 1.572704 7.620507 1 8.700000 
23 34 5 3.0 83 0.38554217 1.436063 11.636262 1 50.613265 
24 35 5 2.5 58 0.31034483 1.313440 9.370347 2 52.605041 
25 36 20 2.5 91 0.28571429 1.544032 8.451961 1 9.713351 
26 37 10 2.5 34 0.23529412 1.524725 9.348687 2 6.920026 
27 38 20 2.5 48 0.41666667 1.584892 7.780915 1 11.302639 
28 39 40 2.5 51 0.15686274 1.535552 6.994035 1 18.999423 
29 40 35 2.5 48 0.45833333 1.460579 9.073331 1 12.869075 
30 41 5 3.0 58 0.43103448 1.747669 7.628542 2 3.860225 
31 42 25 2.5 36 0.52777778 

ho fatto questo, questo è l'uscita per i primi due assi:

y<-rda(nestendca2) 
summary(y) 
       PC1  PC2  
Waterpeil  13.816422 -2.312641 
hoogte_max  0.094747 -0.014497 
Som   2.955029 10.812549 
Leeftijd_riet 0.016476 0.019629 
PFD   0.007361 -0.003386 
oppervlakte 0.052943 0.039657 

Ora voglio implementare questi due assi in una regressione logistica, mettendola in relazione con il successo riproduttivo di un rapace che cresce in questi campi.

Come posso fare questo?

+1

Si prega di rendere riproducibile la situazione, cioè di fornirci i dati e il codice necessari per imitare la situazione. Vedi http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example per ulteriori suggerimenti su come farlo. –

risposta

5

Se si utilizza il pacchetto princomp è possibile estrarre i carichi in questo modo:

PCA <- princomp(data,cor=T) 
PCA 
PCA$loadings 
Loadings <- as.data.frame(PCA$loadings[,1:2]) 

Se si utilizza prcomp si può fare:

PCA2 <- prcomp(data) 
Loadings <- as.data.frame(PCA2$rotation[,1:2]) 

Se si utilizza vegan:

PCA3 <- rda(data) 
Loadings <- as.data.frame(PCA3$CA$v.eig[,1:2]) 
+0

Ho modificato la mia domanda e aggiunto una parte dei miei dati. Sto usando il pacchetto vegan, ho dimenticato di dirlo. – Koentjes

+0

L'ho aggiunto alla risposta. – JT85

4

Supponendo che si usi prcomp in R. Ecco un modo per farlo

pca <- prcomp(~ Murder + Rape + Assault, data = USArrests, scale = TRUE) 

(loadings <- pca$rotation) 

##    PC1  PC2  PC3 
## Murder -0.58260 0.53395 -0.61276 
## Rape -0.53938 -0.81798 -0.19994 
## Assault -0.60798 0.21402 0.76456 

axes <- predict(pca, newdata = USArrests) 
head(axes, 4) 

##    PC1  PC2  PC3 
## Alabama -1.19803 0.83381 -0.162178 
## Alaska -2.30875 -1.52396 0.038336 
## Arizona -1.50333 -0.49830 0.878223 
## Arkansas -0.17599 0.32473 0.071112 

Se si desidera, è possibile utilizzare queste nuove colonne (assi) nella regressione logistica. Ti mostrerò solo un esempio usando un modello lineare semplice.

dat <- cbind(USArrests, axes) 
lm(UrbanPop ~ PC1 + PC2, data = dat) 

## Call: 
## lm(formula = UrbanPop ~ PC1 + PC2, data = dat) 

## Coefficients: 
## (Intercept)   PC1   PC2 
##  65.54  -2.58  -7.71 
+0

Ciao. La ringrazio per la risposta. Sto usando il pacchetto 'vegan', ma dopo aver creato un frame di dati con i miei PC-loading – Koentjes

+0

@dickoa perché usi predire? non estrarre i carichi con Carichi <- as.data.frame (PCA2 $ rotation [, 1: 2]) come sopra abbastanza per la regressione? – user3495945

Problemi correlati