A Análise de Componentes Principais é indicada quando possuímos um conjunto de variáveis contínuas muito amplo. Após a análise, cada componente principal representa uma combinação linear das variáveis originais inseridas na matriz dados.
Os componentes principais agrupam elementos que variam num mesmo sentido, o que facilita a compreensão de como as variáveis interagem entre si. Eles têm a vantagem de serem independentes, podendo ser utilizados em testes de regressão linear, por exemplo.
Nós usaremos os dados de variáveis químicas de sedimento amostradas em 24 locais para exemplificar a construção de uma PCA. O conjunto de dados se encontra no arquivo varechem.csv.
# setwd("C:/Users/Fábio Barros/Desktop/CursoR")
# Para construir a PCA devemos definir que a primeira coluna
# do conjunto de dados referem-se aos nomes.
# Portanto, pedimos para abrir o arquivo com o comando row.names=1
solo <- read.csv("http://renatabrandt.github.io/EBC2015/data/varechem.csv", row.names=1)
is.data.frame(solo)
## [1] TRUE
Neste tópico, nós usaremos o pacote vegan - function prcomp - para construir a PCA. Existem dois tipos de PCA: a PCA de covariância e a PCA de correlação. Quando as variáveis foram medidas em unidades diferentes ou quando a variância de cada variável é muito diferente umas das outras devemos usar a PCA de correlação, que é construida usando os dados que foram padronizados para ter média 0 e desvio padrão 1.
Geralmente é exatamente esta situação que encontramos lidando com problemas biológicos!!!
Vamos observar as variâncias dos dados químicos do arquivo varechem?
round(apply(solo,2,var),2)
## N P K Ca Mg S Al Fe
## 30.56 223.39 4204.53 59332.17 1681.93 136.14 14962.28 3654.07
## Mn Zn Mo Baresoil Humdepth pH
## 1149.98 8.90 0.06 270.26 0.44 0.05
Veja que a variância de cada variável é muito diferente. Portanto, temos que usar uma PCA de correlação para que a variável com maior variância não “domine” a análise.
Para construir a PCA de correlação usando prcomp devemos usar o argumento scale=T. Vamos agora rodar a análise no conjunto de dados solo?
install.packages(“vegan”)
require(vegan)
## Loading required package: vegan
## Warning: package 'vegan' was built under R version 3.1.3
## Loading required package: permute
## Warning: package 'permute' was built under R version 3.1.3
## Loading required package: lattice
## Warning: package 'lattice' was built under R version 3.1.3
## This is vegan 2.3-0
# para "rodar" a análise e visualizar a contribuição de
# cada variável no componente
prc.solo <- prcomp(solo, scale=TRUE); prc.solo
## Standard deviations:
## [1] 2.2784976 1.7868529 1.2982707 1.0339221 0.9033240 0.8401250 0.6606103
## [8] 0.6073232 0.4132034 0.3866882 0.2919936 0.2643011 0.1872348 0.1536722
##
## Rotation:
## PC1 PC2 PC3 PC4 PC5
## N 0.09462709 0.12435859 -0.16204826 -0.79318367 0.351576656
## P -0.35589258 -0.20731069 0.09086948 -0.08242977 -0.219919629
## K -0.36318854 -0.16172669 -0.04259682 -0.21401371 -0.176886144
## Ca -0.35975485 -0.08457237 0.32644437 0.01826328 0.236121676
## Mg -0.35228219 -0.09776116 0.08467641 0.03784222 0.486392688
## S -0.33246862 -0.29668916 -0.21512714 0.01410909 -0.070039686
## Al 0.11552207 -0.48048232 -0.26540100 -0.07767669 -0.005266422
## Fe 0.20299687 -0.38301396 -0.15691339 -0.31769008 0.022858769
## Mn -0.28756460 0.19318776 0.08921960 -0.37885343 -0.489948050
## Zn -0.34603172 -0.16198093 0.04178581 0.05229606 0.150267479
## Mo -0.04154531 -0.22863241 -0.58319905 0.23286801 0.029395588
## Baresoil -0.16349721 0.31570370 -0.27274616 0.06312303 0.407367062
## Humdepth -0.23531857 0.33736134 -0.28352933 -0.02541797 0.046678588
## pH 0.16613845 -0.32216601 0.45164891 -0.06492250 0.259486172
## PC6 PC7 PC8 PC9 PC10
## N 0.31876043 -0.020445294 0.106079920 -0.029711941 0.25325314
## P 0.08346185 -0.202993610 -0.291937970 0.529497898 0.48691417
## K -0.30156737 -0.083967201 0.345810459 -0.347935071 0.19105757
## Ca -0.10026235 -0.056467690 -0.241640431 -0.132902952 0.15581868
## Mg -0.11335320 0.422483826 0.002896128 0.185900569 -0.18858761
## S -0.09229889 -0.001743922 0.271322793 -0.041707742 -0.01394397
## Al -0.20467312 -0.090888045 -0.037652261 -0.325530088 -0.02736515
## Fe -0.33950608 0.197580497 -0.192886023 0.424437201 -0.32652805
## Mn 0.07123733 -0.136543653 -0.274959999 -0.080205160 -0.54341919
## Zn 0.54306692 0.032492006 0.238361969 -0.005992104 -0.36679941
## Mo 0.41761742 -0.120157357 -0.352212047 -0.082184113 0.02092970
## Baresoil -0.32655495 -0.662017409 -0.006567573 0.150678212 -0.20591182
## Humdepth -0.16741045 0.425702015 -0.465061249 -0.315633320 0.12595591
## pH 0.05330910 -0.262135909 -0.374832351 -0.349371603 -0.07947962
## PC11 PC12 PC13 PC14
## N -0.005103292 0.03375847 0.12866179 -0.023577121
## P -0.212772662 -0.15369608 -0.16014570 -0.146803748
## K 0.118589614 0.28135388 -0.50806589 0.191151759
## Ca 0.669374213 -0.03834446 0.36929697 0.035843646
## Mg -0.239307771 0.42332112 -0.05980040 -0.345891242
## S -0.378600375 -0.07818118 0.63006839 0.345755661
## Al 0.018994101 -0.30010097 0.04257464 -0.654805487
## Fe 0.238879497 -0.09798831 -0.12533928 0.354078026
## Mn -0.035024496 0.18554028 0.13661147 -0.181857434
## Zn 0.104956310 -0.48566331 -0.29628189 0.070169749
## Mo 0.159957373 0.43567172 -0.03761246 0.117855258
## Baresoil -0.053374989 -0.10187147 -0.07709019 0.007445089
## Humdepth -0.168085863 -0.37001287 -0.13026298 0.156358945
## pH -0.406958380 0.04733921 -0.12013250 0.265236656
# para acessar a estrutura do elemento "prc.solo"
str(prc.solo)
## List of 5
## $ sdev : num [1:14] 2.278 1.787 1.298 1.034 0.903 ...
## $ rotation: num [1:14, 1:14] 0.0946 -0.3559 -0.3632 -0.3598 -0.3523 ...
## ..- attr(*, "dimnames")=List of 2
## .. ..$ : chr [1:14] "N" "P" "K" "Ca" ...
## .. ..$ : chr [1:14] "PC1" "PC2" "PC3" "PC4" ...
## $ center : Named num [1:14] 22.4 45.1 162.9 569.7 87.5 ...
## ..- attr(*, "names")= chr [1:14] "N" "P" "K" "Ca" ...
## $ scale : Named num [1:14] 5.53 14.95 64.84 243.58 41.01 ...
## ..- attr(*, "names")= chr [1:14] "N" "P" "K" "Ca" ...
## $ x : num [1:24, 1:14] 1.539 4.255 -0.689 3.634 3.373 ...
## ..- attr(*, "dimnames")=List of 2
## .. ..$ : chr [1:24] "local01" "local02" "local03" "local04" ...
## .. ..$ : chr [1:14] "PC1" "PC2" "PC3" "PC4" ...
## - attr(*, "class")= chr "prcomp"
# para visualizar o número de componentes e as respectivas
# contribuições para a variância total.
screeplot(prc.solo)
# para mostrar a porcentagem de variância capturada por cada eixo
summary(prc.solo)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6
## Standard deviation 2.2785 1.7869 1.2983 1.03392 0.90332 0.84013
## Proportion of Variance 0.3708 0.2281 0.1204 0.07636 0.05829 0.05042
## Cumulative Proportion 0.3708 0.5989 0.7193 0.79564 0.85392 0.90434
## PC7 PC8 PC9 PC10 PC11 PC12
## Standard deviation 0.66061 0.60732 0.4132 0.38669 0.29199 0.26430
## Proportion of Variance 0.03117 0.02635 0.0122 0.01068 0.00609 0.00499
## Cumulative Proportion 0.93551 0.96185 0.9740 0.98473 0.99082 0.99581
## PC13 PC14
## Standard deviation 0.1872 0.15367
## Proportion of Variance 0.0025 0.00169
## Cumulative Proportion 0.9983 1.00000
# para fazer o plot da PCA
biplot(prc.solo)
# para acessar os escores da PCA
prc.solo$x
## PC1 PC2 PC3 PC4 PC5
## local01 1.53878447 -2.46012329 -0.294009378 -0.85232874 -0.817340772
## local02 4.25544857 -1.67410775 -0.504746514 -1.63909051 0.558770476
## local03 -0.68902667 -3.34189696 -2.563741690 0.71125297 -0.968989199
## local04 3.63433625 1.21449816 1.339689070 -0.83264806 0.499185602
## local05 3.37347840 0.07290487 -0.358467072 1.02764414 -0.555584417
## local06 3.88231709 -0.44736574 -0.728450291 -1.01917052 0.786719915
## local07 0.08438668 -1.40485249 -0.514479851 1.58312456 -0.733411043
## local08 -0.85106814 -1.93158072 2.455295189 0.60099298 -0.837723132
## local09 -0.25592697 -3.08135124 3.665611461 0.10586883 1.117079105
## local10 1.23674421 0.53360601 0.271442076 1.49529509 -0.586950936
## local11 -1.61179969 -1.72776197 -1.851617499 -1.61763757 0.161168189
## local12 -0.10849087 1.23231788 -1.057894796 0.85576997 0.235369165
## local13 0.52756644 0.75652573 0.004377408 1.24113026 -1.202410202
## local14 1.61990524 1.54627261 -0.182700904 0.30489556 -0.009249015
## local15 0.13222328 1.70101442 -0.279475522 0.47325693 -0.103821307
## local16 -1.96510029 1.49265376 -1.119483753 0.37139226 1.332867226
## local17 -2.41827770 0.41983066 -1.013756555 -0.72805394 0.288590298
## local18 1.26576946 2.38382268 0.297393354 0.86387385 1.282661605
## local19 -0.78264065 1.74589273 0.277038549 -0.64096723 0.079834902
## local20 -1.83673667 1.74473867 -0.298946184 0.06989374 0.804034232
## local21 -3.96343087 -2.54549515 -0.017887116 1.01474228 1.896445495
## local22 -0.88868934 1.82326518 1.044623907 -0.75063513 -1.242461532
## local23 -3.24105345 1.03869050 1.093443151 -0.74721229 -1.122790249
## local24 -2.93871880 0.90850144 0.336742959 -1.89138943 -0.861994408
## PC6 PC7 PC8 PC9 PC10
## local01 -0.72299099 0.764129828 0.52251461 0.87005247 -0.21039984
## local02 -0.18623480 0.473990937 -1.15101958 0.18069717 0.01462754
## local03 0.43945828 -1.092945035 -0.43319856 -0.16366937 0.32388296
## local04 2.33214424 -0.372775208 1.06173977 0.03575899 -0.10222536
## local05 0.44585427 0.437849242 -0.66318161 -0.02922027 -0.12788259
## local06 -0.24475511 0.003896015 -0.07322921 -0.07022198 0.03076471
## local07 0.78911410 0.313163663 -0.40901417 -0.38867009 0.02167642
## local08 -0.46303287 -0.259576328 0.80876134 0.14111906 0.27398425
## local09 -1.05247280 -0.473633258 -0.53811517 -0.46308153 0.16295082
## local10 0.06898806 0.473997752 0.13222574 -0.44070463 0.20907903
## local11 -0.99674051 0.028618132 1.41746150 -0.78794716 -0.41248879
## local12 0.24258363 0.117482816 0.34746586 -0.11334200 0.29864105
## local13 -0.87748856 0.140335713 0.35570552 0.18415914 -0.32702920
## local14 -0.02669483 -0.373476941 0.78419427 -0.06115766 0.48740293
## local15 -0.97013110 -0.412107828 0.10430066 0.89379861 -0.19515377
## local16 -0.59222144 1.238669139 -0.34158207 -0.31889053 -0.05364217
## local17 0.31608364 -1.808311684 -0.48521666 0.13191310 -0.29763388
## local18 -0.81765547 -0.902502014 -0.12769610 -0.14410013 -0.32436679
## local19 0.23366653 0.539332177 -0.05889938 -0.51844860 0.03006888
## local20 -0.76167251 0.030023854 -0.13218763 0.51649591 0.70693203
## local21 1.65855241 0.584842783 0.19856484 0.59859756 -0.34214482
## local22 0.45818828 -0.296177146 -0.70116183 -0.08870626 -0.56597254
## local23 0.14867036 0.577453010 -0.34781468 -0.05752049 -0.59425418
## local24 0.57878720 0.267720379 -0.27061746 0.09308865 0.99318331
## PC11 PC12 PC13 PC14
## local01 0.45544416 -0.635306833 0.038260431 0.10380174
## local02 -0.33603215 0.155223171 -0.036095816 0.23450059
## local03 0.31092450 -0.016558671 -0.232369489 -0.25165355
## local04 0.04588475 -0.150519119 -0.068070865 -0.09223078
## local05 0.20774098 0.368308444 -0.078853433 0.10186206
## local06 -0.32299944 0.093391136 0.116566189 -0.41080566
## local07 -0.40521219 -0.212953448 0.379813850 0.05207296
## local08 -0.67108522 -0.072769123 0.132399959 -0.03854731
## local09 0.47248237 0.001778163 -0.044201689 -0.01970105
## local10 0.10370214 0.071014379 0.041195274 0.05293037
## local11 -0.06593851 0.293911543 0.019257591 0.08668395
## local12 0.21053275 -0.319591277 -0.001286276 0.11266438
## local13 -0.26463780 0.216772715 -0.264956749 0.10969811
## local14 0.23745992 0.059594599 -0.068810220 0.04176308
## local15 0.15181987 0.446288151 0.180710086 -0.14511706
## local16 -0.16861193 -0.476514833 -0.109832641 -0.17267154
## local17 -0.11048490 -0.198738243 0.218426950 0.21618583
## local18 -0.19983373 -0.218125923 -0.320691780 0.11931958
## local19 0.45835909 0.245481007 0.344342190 0.09944716
## local20 0.03233029 0.054332723 0.215246883 -0.07599179
## local21 -0.03469025 0.310027914 -0.084404758 0.05320728
## local22 0.03863706 -0.175523779 0.079312882 -0.09860196
## local23 0.07314193 0.063378029 -0.169590445 -0.18408979
## local24 -0.21893369 0.097099274 -0.286368123 0.10527341
Como observamos nas linhas de comando, o resultado da PCA retém escores referentes a cada PC. Os escores são as variáveis independentes que podem ser utilizadas em outras análises, como numa regressão linear.
Nós preferimos usar o pacote psych - function principal que nos dá uma série de opções como, por exemplo, rotacionar o eixo dos componentes. Além disso, achamos o default do pacote mais interessante.
A PCA pelo pacote psych requer que seja determinado previamente o número de componentes que serão retidos. Nós podemos usar a função fa.parallel para isto.
install.packages(“psych”)
require(psych)
## Loading required package: psych
## Warning: package 'psych' was built under R version 3.1.3
fa.parallel (solo, fa="pc", show.legend=T,
main="Scree plot with parallel analysis")
## Parallel analysis suggests that the number of factors = NA and the number of components = 2
# A análise realizada acima sugere 02 componentes.
# É possivel ainda estabeler outro critério de "corte" como por exemplo autovalores (eigenvalue) acima de 1.
Vamos agora rodar a PCA?
pca.solo <- principal(solo, nfactors=2, n.obs=24,
rotate='none', scores=TRUE)
# Se existirem mais de 02 PCs podemos aplicar a rotação nos eixos
# É carregar o pacote "GPArotation" e mudar o argumento para
# rotate="varimax", por exemplo.
# A função PRINCIPAL executa uma PCA de correlação como análise padrão.
str(pca.solo)
## List of 28
## $ values : num [1:14] 5.192 3.193 1.686 1.069 0.816 ...
## $ rotation : chr "none"
## $ n.obs : int 24
## $ communality : Named num [1:14] 0.0959 0.7948 0.7683 0.6947 0.6748 ...
## ..- attr(*, "names")= chr [1:14] "N" "P" "K" "Ca" ...
## $ loadings : loadings [1:14, 1:2] -0.216 0.811 0.828 0.82 0.803 ...
## ..- attr(*, "dimnames")=List of 2
## .. ..$ : chr [1:14] "N" "P" "K" "Ca" ...
## .. ..$ : chr [1:2] "PC1" "PC2"
## $ fit : num 0.87
## $ fit.off : num 0.909
## $ fn : chr "principal"
## $ Call : language principal(r = solo, nfactors = 2, rotate = "none", n.obs = 24, scores = TRUE)
## $ uniquenesses: Named num [1:14] 0.904 0.205 0.232 0.305 0.325 ...
## ..- attr(*, "names")= chr [1:14] "N" "P" "K" "Ca" ...
## $ complexity : Named num [1:14] 2 1.4 1.24 1.07 1.09 ...
## ..- attr(*, "names")= chr [1:14] "N" "P" "K" "Ca" ...
## $ chi : num 62.5
## $ EPVAL : num 0.529
## $ R2 : Named num [1:2] 1 1
## ..- attr(*, "names")= chr [1:2] "PC1" "PC2"
## $ objective : num 7.24
## $ residual : num [1:14, 1:14] 0.90414 0.00599 0.096 -0.06058 0.04811 ...
## ..- attr(*, "dimnames")=List of 2
## .. ..$ : chr [1:14] "N" "P" "K" "Ca" ...
## .. ..$ : chr [1:14] "N" "P" "K" "Ca" ...
## $ rms : num 0.12
## $ factors : int 2
## $ dof : num 64
## $ null.dof : num 91
## $ null.model : num 14.9
## $ criteria : Named num [1:3] 7.24 NA NA
## ..- attr(*, "names")= chr [1:3] "objective" "" ""
## $ STATISTIC : num 117
## $ PVAL : num 5.94e-05
## $ weights : num [1:14, 1:2] -0.0415 0.1562 0.1594 0.1579 0.1546 ...
## ..- attr(*, "dimnames")=List of 2
## .. ..$ : chr [1:14] "N" "P" "K" "Ca" ...
## .. ..$ : chr [1:2] "PC1" "PC2"
## $ r.scores : num [1:2, 1:2] 1.00 -1.70e-15 -1.66e-15 1.00
## ..- attr(*, "dimnames")=List of 2
## .. ..$ : chr [1:2] "PC1" "PC2"
## .. ..$ : chr [1:2] "PC1" "PC2"
## $ Structure : loadings [1:14, 1:2] -0.216 0.811 0.828 0.82 0.803 ...
## ..- attr(*, "dimnames")=List of 2
## .. ..$ : chr [1:14] "N" "P" "K" "Ca" ...
## .. ..$ : chr [1:2] "PC1" "PC2"
## $ scores : num [1:24, 1:2] -0.675 -1.868 0.302 -1.595 -1.481 ...
## ..- attr(*, "dimnames")=List of 2
## .. ..$ : chr [1:24] "local01" "local02" "local03" "local04" ...
## .. ..$ : chr [1:2] "PC1" "PC2"
## - attr(*, "class")= chr [1:2] "psych" "principal"
# para acessar os eingenvalues
pca.solo$values
## [1] 5.19155128 3.19284315 1.68550672 1.06899485 0.81599434 0.70581009
## [7] 0.43640596 0.36884148 0.17073705 0.14952776 0.08526025 0.06985507
## [13] 0.03505687 0.02361514
# para visualisar a contribuição de cada variável (peso)
pca.solo$loadings
##
## Loadings:
## PC1 PC2
## N -0.216 -0.222
## P 0.811 0.370
## K 0.828 0.289
## Ca 0.820 0.151
## Mg 0.803 0.175
## S 0.758 0.530
## Al -0.263 0.859
## Fe -0.463 0.684
## Mn 0.655 -0.345
## Zn 0.788 0.289
## Mo 0.409
## Baresoil 0.373 -0.564
## Humdepth 0.536 -0.603
## pH -0.379 0.576
##
## PC1 PC2
## SS loadings 5.192 3.193
## Proportion Var 0.371 0.228
## Cumulative Var 0.371 0.599
# para acessar os escores da PCA
pca.solo$scores
## PC1 PC2
## local01 -0.67535049 1.37679120
## local02 -1.86765551 0.93690297
## local03 0.30240395 1.87026981
## local04 -1.59505819 -0.67968560
## local05 -1.48057141 -0.04080071
## local06 -1.70389344 0.25036518
## local07 -0.03703611 0.78621610
## local08 0.37352163 1.08099596
## local09 0.11232269 1.72445717
## local10 -0.54278934 -0.29862896
## local11 0.70739583 0.96693019
## local12 0.04761509 -0.68965829
## local13 -0.23154137 -0.42338446
## local14 -0.71095324 -0.86536091
## local15 -0.05803091 -0.95196111
## local16 0.86245441 -0.83535348
## local17 1.06134749 -0.23495536
## local18 -0.55552811 -1.33409008
## local19 0.34348978 -0.97707694
## local20 0.80611745 -0.97643108
## local21 1.73949311 1.42456897
## local22 0.39003304 -1.02037790
## local23 1.42245200 -0.58129604
## local24 1.28976164 -0.50843662
# para salvar os escores como um conjunto de dados
SCORES<-data.frame(pca.solo$scores)
# para plotar o gráfico
biplot (pca.solo)
De modo a facilitar o entendimento de qual variável contínua contribui com maior peso em cada PC mostraremos um exemplo de construção gráfica para os loadings por meio do pacote lattice.
install.packages(lattice)
require(lattice)
# definimos os loadings como objeto
load <- pca.solo$loadings
sorted.loadings1 <- load[order(load[,1]),1]
# definimos o objeto que descreve o peso das variáveis para o PC1
Main = "Loadings Plot for PC1"; xlabs = "Variable Loadings"
# criamos objetos que descrevem o título e o eixo x da figura
load1 <- dotplot(sorted.loadings1, main=Main,
xlab=xlabs, cex=1.5, col="red", pch=16)
# para plotar um gráfico simples de pontos
load1
Quais as variáveis que mais contribuem no PC1? Vamos plotar os gráficos para os loadings referentes ao PC2?
sorted.loadings2 <- load[order(load[,2]),2]
Main="Loadings Plot for PC2"; xlabs="Variable Loadings"
load2<-dotplot(sorted.loadings2, main=Main,
xlab=xlabs, cex=1.5, col="blue", pch=1)
load2
Viram como é bem interessante “plotar” os loadings? Facilita a compreensão da importância das variáveis para os PCs.
Da mesma maneira que a função biplot, nós podemos representar graficamente o resultado da PCA utilizando o pacote ggplot2. A sintaxe é bem parecida com o boxplot que construímos anteriormente, mas aqui temos que lembrar que o tipo de gráfico seria de dispersão de pontos.
O ponto de partida é o conjunto de dados SCORES que construímos anteriormente. Os escores dos componentes que representam as parcelas de solo (LOCAIS) serão “plotados” no espaço bidimensional.
require(ggplot2)
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 3.1.3
##
## Attaching package: 'ggplot2'
##
## The following object is masked from 'package:psych':
##
## %+%
# require(extrafont)
# loadfonts(device="win")
# vamos plotar o PC1 x PC2
ggPCA1 <- ggplot() + geom_text(data=SCORES,
aes(x=PC1, y=PC2, label=rownames(SCORES)),
size=4, col="red") +
theme_bw(base_size = 16)
# para definir parametros dos eixos e legendas
ggPCA2 <- ggPCA1 + xlab("PC1 (33,8%)") +
theme(axis.title.x=element_text(angle=0, size=12)) +
ylab("PC2 (22,3%)") +
theme(axis.title.y=element_text(angle=90, size=12))
# visualizar
ggPCA2
MA-RA-VI-LHAAAA! #sóqnão
Cadê as variáveis?? Só “plotamos” as parcelas de solo… Para fazer isto temos que carregar os loadings, criando um objeto a partir de pca.solo$loadings
Vamos lá?
# para criar o conjunto de dados
PESO <- as.data.frame(pca.solo$loadings[1:14, 1:2])
str(PESO)
## 'data.frame': 14 obs. of 2 variables:
## $ PC1: num -0.216 0.811 0.828 0.82 0.803 ...
## $ PC2: num -0.222 0.37 0.289 0.151 0.175 ...
attach(PESO)
require(grid)
## Loading required package: grid
# para "plotar" segmentos devemos acessar o pacote "grid"
ggPCA3 <- ggPCA2 +
geom_segment(data=PESO, aes(x=0, y=0, xend=PC1, yend=PC2),
arrow = arrow(length = unit(0.2, "cm"),
type = "closed", angle = 15),
color="black", alpha=0.5) +
geom_text(data=PESO, aes(PC1*1.2, PC2*1.2,
label=rownames(PESO)), color="black",
fontface="italic", size=6)
ggPCA3