Escolar Documentos
Profissional Documentos
Cultura Documentos
Base de dados
Será utilizado nesse relatório um dataset com dados de um experimento para testar diferentes espaçamentos silviculturais de Pinus taeda no Sul
do Brasil. Os dados contidos nesse dataset são de parcelas amostrais na idade de 9 anos. Para cada espaçamento foram amostradas 9 parcelas.
Foram consideradas sete variáveis para o presente relatório:
Aplicação no Rstudio
Para a execução da PCA no R é necessário a instalação dos pacotes factoextra e FactoMineR. Além disso, os pacotes readr, dplyr e ggplot
também serão utilizados.
library(readr)
library(dplyr)
library(ggplot2)
library(factoextra)
library(FactoMineR)
Criaremos o dataframe com os dados importados no formato csv, conforme mostrado abaixo.
Em seguida utilizaremos a função PCA inclusa no pacote FactoMineR para obter os principais resultados da análise de componentes principais
para os dados de espaçamentos. O vetor “c(1:6)” exclui da análise as colunas do dataframe que não serão utilizadas na PCA. O argumento “ncp”
recebe o número de componentes principais a serem gerados, no nosso caso, serão 7 componentes, uma vez que detemos 7 variáveis. Por fim, o
argumento “graph” indica se os resultados serão apresentados graficamente.
Uma observação que sempre deve ser realizada ao utilizar uma PCA é quanto aos eigenvalues ou autovalores, que correspondem a variância
carregada por cada componente. Ou seja, quanto de variação dos dados originais está contida nos novos componentes. A função
“get_eigenvalue” permite a obtenção dos autovalores, ao passo que a função “fviz_eig” demonstra graficamente os resultados de variância por
componente. Podemos observar que para os nossos dados, os primeiros dois componentes carregam 97,3% da variação total dos dados (CP1 =
59,2% e CP2 = 38,1%). Diversos autores relatam que em PCA os dois primeiros componentes devem carregar pelo menos 80% da variação para
que a análise seja reduzivel.
A tarefa de avaliar a importância das variáveis fica mais didatica ao plotarmos o circulo de correlação com as setas e coordenadas. A função
“fviz_pca_var” plota o gráfico de importância das variáveis, é necessário indicar quais componentes serão os eixos do plote (geralmente aqueles
com maiores autovalores) através do comando axes.
Observando o gráfico gerado, fica evidente que as variáveis de povoamento (vha e AB) são inversamente proporcionais e altamente
correlacionadas com variáveis de carater dendrométrico (dap, v e g). Esse comportamente pode ser observado devido a relação de oposição das
setas no gráfico e a sua proximidade com o circulo de correlação. Essa relação inversa se justifica por conta da densidade de árvores nos
diferentes espaçamentos, que ocasiona em caracteristicas especificas de crescimento. Os espaçamentos mais densos, possuem maiores
produções volumétricas e área ocupada por fustes de árvores, no entanto com menor crescimento em diâmetro e árvores com menores
volumetrias médias.
Podemos melhorar o código da função “fviz_pca_ind” para colorir as parcelas por espaçamento e traçar as elipses que separam os espaçamentos
avaliados, conforme o código escrito abaixo. Observa-se que algumas elipses apresentam interseção, como é o caso dos espaçamentos de
menor densidade (1,5 x 2 m; 1,5 x 2,5 m; 1,5 x 3 m; 2,5 x 2 m) e espaçamentos intermediarios (2,5 x 2,5 m; 2,5 x 3 m e 2,5 x 2 m). Isso indica que
há certas similaridades entre estes grupos, porém de forma geral, os dois componentes principais foram eficientes na distinção das parcelas.
fviz_pca_ind(res.pca,
geom = "text",
col.ind = as.factor(pinus$trat),
palette = "jco",
addEllipses = TRUE,
legend.title = "Espaçamentos")
A partir da análise do biplot fica mais evidente a forma com que as variáveis estão relacionadas aos distintos espaçamentos. Os espaçamentos de
menor densidade (3,5 x 3 m; 3,5 x 2,5 m; 3,5 x 2 m; 2,5 x 3 m) estão localizados sob as setas das variáveis dendrométricas (dap, v e g) e os de
maior densidade (1,5 x 2 m; 1,5 x 2,5 m; 1,5 x 3 m) sob influencia das variáveis de povoamento (vha e AB).
fviz_pca_biplot(res.pca,
col.ind = as.factor(pinus$trat),
palette = "jco",
addEllipses = TRUE, label = "var",
col.var = "black", repel = TRUE,
legend.title = "Espaçamentos")
Random Forest
Para exemplificar a utilização dos componentes principais em outros modelos estatisticos ou de aprendizado de máquina e o poder de
redutibilidade de variáveis através de componentes, iremos utilizar um exemplo prático com um modelo de floresta aleatória (random forest).
Segundo Breiman (1999) o classificador random forest consiste em uma combinação de classificadores de árvore de regressão onde cada
classificador é gerado usando um vetor aleatório amostrado independentemente do vetor de entrada, e cada árvore lança um voto de unidade
para a classe mais popular para classificar um vetor de entrada.
Iremos utilizar a classificação por random forest para classificar as parcelas em espaçamentos, utilizando como entradas para o modelo os
componentes principais gerados na PCA. Primeiramente, será necessaria instalar e carregar o pacote random forest. Cria-se um dataframe (dd)
com os componentes principais e os dados rotulados de espaçamento, em seguida a função “randomForest” executa o treinamento.
library(randomForest)
## randomForest 4.6-14
##
## Attaching package: 'randomForest'
set.seed(313)
fit = randomForest(pinus ~ ., data = dd)
fit
##
## Call:
## randomForest(formula = pinus ~ ., data = dd)
## Type of random forest: classification
## Number of trees: 500
## No. of variables tried at each split: 2
##
## OOB estimate of error rate: 50.62%
## Confusion matrix:
## 1.5 x 2 1.5 x 2.5 1.5 x 3 2.5 x 2 2.5 x 2.5 2.5 x 3 3.5 x 2 3.5 x 2.5
## 1.5 x 2 7 2 0 0 0 0 0 0
## 1.5 x 2.5 4 3 2 0 0 0 0 0
## 1.5 x 3 0 2 4 3 0 0 0 0
## 2.5 x 2 0 0 4 3 2 0 0 0
## 2.5 x 2.5 0 0 0 4 2 1 2 0
## 2.5 x 3 0 0 0 0 1 2 4 2
## 3.5 x 2 0 0 0 0 1 3 5 0
## 3.5 x 2.5 0 0 0 0 0 2 0 6
## 3.5 x 3 0 0 0 0 0 0 0 1
## 3.5 x 3 class.error
## 1.5 x 2 0 0.2222222
## 1.5 x 2.5 0 0.6666667
## 1.5 x 3 0 0.5555556
## 2.5 x 2 0 0.6666667
## 2.5 x 2.5 0 0.7777778
## 2.5 x 3 0 0.7777778
## 3.5 x 2 0 0.4444444
## 3.5 x 2.5 1 0.3333333
## 3.5 x 3 8 0.1111111
Os principais resultados gerados são a matriz de confusão, que indica a quantidade de observações classificadas corretamente e o plot de
importância das variáveis, no nosso caso, dos componentes principais. Podemos constatar que embora os componentes 1 e 2 carreguem
maiores autovalores, no treinamento via random forest essa tendência não foi observada (componentes 1 e 4 com maior importância).
fit$importance
## MeanDecreaseGini
## Dim.1 20.879531
## Dim.2 8.008494
## Dim.3 6.841514
## Dim.4 11.115772
## Dim.5 8.548775
## Dim.6 8.476584
## Dim.7 7.232146
varImpPlot(fit)