PASSO 1: INSTALAR E CARREGAR PACOTES

Carregar o pacote

library(psych)
library(dplyr)
## 
## Anexando pacote: 'dplyr'
## Os seguintes objetos são mascarados por 'package:stats':
## 
##     filter, lag
## Os seguintes objetos são mascarados por 'package:base':
## 
##     intersect, setdiff, setequal, union

———————————————————–

PASSO 2: CARREGAMENTO DOS DADOS

———————————————————–

URL do arquivo CSV

url_dados <- "https://raw.githubusercontent.com/leocbc/ANALISE-MULTIVARIADA/refs/heads/main/Custo_Producao.csv"

Carregar os dados

dados <- read.table(url_dados, header = TRUE, sep = ",")

Inserindo os nomes das fazendas

rownames(dados) <- paste0("Fazenda_", sprintf("%03d", 1:nrow(dados)))

Visualizar as primeiras linhas para entender a estrutura

head(dados)
##             Produtividade  Biomassa Taxa_Crescimento Indice_Vegetacao
## Fazenda_001      53.37271 110.69127         21.77163        0.8388293
## Fazenda_002      48.01798  96.31255         19.43039        0.8023331
## Fazenda_003      56.48213 113.82338         21.97190        0.8329807
## Fazenda_004      65.27728 131.81623         24.43041        0.8696821
## Fazenda_005      47.20840  95.73037         19.16719        0.7952746
## Fazenda_006      48.28148  97.19406         19.20484        0.7922280
##             Preco_Mercado  Demanda Custo_Producao Margem_Liquida
## Fazenda_001      355.6173 4861.088       253.9277      11.833838
## Fazenda_002      357.5530 4917.523       259.4792      11.658089
## Fazenda_003      366.4904 5028.467       261.7047      12.965791
## Fazenda_004      366.8936 5017.950       261.0472      12.555920
## Fazenda_005      329.4327 4534.427       232.5025       5.145736
## Fazenda_006      336.0138 4604.867       236.8394       6.552871

Observações importantes:

  • Se houver uma coluna de identificação/nome que não é uma variável para a análise, é importante removê-la ou selecioná-la.

  • Assumindo que a primeira coluna do nosso arquivo é apenas um ID e as demais são variáveis para a análise fatorial (exceto se for uma variável categórica que precisa ser excluída), vamos assumir que as colunas 2 em diante são as variáveis para a Análise Fatorial.

Para isso precisamos excluir a primeira coluna (coluna 1) do arquivo original. Para tal, será criado um novo objeto chamado “dados_fa” que contém os dados originais menos a primeira coluna:

dados_fa <- scale(dados) 
head(dados_fa)
##             Produtividade   Biomassa Taxa_Crescimento Indice_Vegetacao
## Fazenda_001     0.4188891  0.6143774        0.6629551       0.84554804
## Fazenda_002    -0.1612954 -0.1539453       -0.1735645       0.06492359
## Fazenda_003     0.7557939  0.7817405        0.7345128       0.72045244
## Fazenda_004     1.7087474  1.7431835        1.6129332       1.50546711
## Fazenda_005    -0.2490134 -0.1850540       -0.2676065      -0.08605354
## Fazenda_006    -0.1327454 -0.1068422       -0.2541554      -0.15121708
##             Preco_Mercado    Demanda Custo_Producao Margem_Liquida
## Fazenda_001     0.2896149  0.2170924      0.2224834      0.5222592
## Fazenda_002     0.4194305  0.5014291      0.6851405      0.4637494
## Fazenda_003     1.0188084  1.0603975      0.8706129      0.8991048
## Fazenda_004     1.0458528  1.0074079      0.8158221      0.7626522
## Fazenda_005    -1.4664269 -1.4287273     -1.5630679     -1.7043199
## Fazenda_006    -1.0250703 -1.0738273     -1.2016302     -1.2358617

Observação:

Se a primeira coluna não for um ID, use: dados_fa <- dados (ou simplesmente use o arquivo de dados original: “dados”)

———————————————————–

PASSO 3: PREPARAÇÃO E AVALIAÇÃO DE ADEQUAÇÃO

———————————————————–

3.1. Matriz de Correlação

A Análise Fatorial baseia-se nas correlações entre as variáveis.

cor_matriz <- cor(dados_fa)
cor_matriz
##                  Produtividade   Biomassa Taxa_Crescimento Indice_Vegetacao
## Produtividade       1.00000000 0.99349090       0.98929881       0.96841692
## Biomassa            0.99349090 1.00000000       0.99423749       0.97429093
## Taxa_Crescimento    0.98929881 0.99423749       1.00000000       0.97288507
## Indice_Vegetacao    0.96841692 0.97429093       0.97288507       1.00000000
## Preco_Mercado       0.08868103 0.08379236       0.07476817       0.08022891
## Demanda             0.09016990 0.08726120       0.07909273       0.08480233
## Custo_Producao      0.06565588 0.06201749       0.05306437       0.06163231
## Margem_Liquida      0.08641484 0.08352154       0.07530675       0.08127321
##                  Preco_Mercado    Demanda Custo_Producao Margem_Liquida
## Produtividade       0.08868103 0.09016990     0.06565588     0.08641484
## Biomassa            0.08379236 0.08726120     0.06201749     0.08352154
## Taxa_Crescimento    0.07476817 0.07909273     0.05306437     0.07530675
## Indice_Vegetacao    0.08022891 0.08480233     0.06163231     0.08127321
## Preco_Mercado       1.00000000 0.98985430     0.97771857     0.98361751
## Demanda             0.98985430 1.00000000     0.98546902     0.98924438
## Custo_Producao      0.97771857 0.98546902     1.00000000     0.98039092
## Margem_Liquida      0.98361751 0.98924438     0.98039092     1.00000000

3.2. Teste de Esfericidade de Bartlett (Teste se a matriz é de identidade)

cortest.bartlett(cor_matriz, n = nrow(dados_fa))
## $chisq
## [1] 4554.171
## 
## $p.value
## [1] 0
## 
## $df
## [1] 28

Bartlett testa a hipótese nula de que a matriz de correlação é uma matriz identidade (o que significa que as variáveis não estão correlacionadas). Se o resultado do Bartlett for significativo (p < 0,05), rejeita-se a hipótese nula, indicando que as variáveis estão correlacionadas e a AF é possível.

Se o p-valor for SIGNIFICATIVO (p < 0,05), a matriz de correlação não é uma matriz identidade, indicando que as variáveis são correlacionadas e a Análise Fatorial é APROPRIADA.

KMO (Kaiser-Meyer-Olkin)

O KMO mede a adequação amostral. Valores acima de 0.6 são geralmente considerados aceitáveis, com valores acima de 0.8 sendo muito bons.

KMO(dados_fa)
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = dados_fa)
## Overall MSA =  0.87
## MSA for each item = 
##    Produtividade         Biomassa Taxa_Crescimento Indice_Vegetacao 
##             0.87             0.79             0.87             0.97 
##    Preco_Mercado          Demanda   Custo_Producao   Margem_Liquida 
##             0.88             0.81             0.92             0.91

O KMO avalia se o grau de correlação é alto o suficiente para justificar a AF.

———————————————————–

PASSO 4: DETERMINAÇÃO DO NÚMERO DE FATORES

———————————————————–

4.1. Gráfico de Declive (Scree Plot)

Procure pelo “cotovelo” (ponto de inflexão) no gráfico, onde a curva se achata. O número de fatores é geralmente o ponto ANTES do cotovelo.

modelo_fa <- principal(dados_fa, nfactors = ncol(dados_fa), rotate = "varimax")
plot(modelo_fa$values, type = "b", main = "Scree Plot", 
     ylab = "Autovalor (Eigenvalue)", xlab = "Número do Fator")

Neste exemplo, a analise sugeriu 2 fatores (NÚMERO_DE_FATORES = 2)

4.2. Critério de Kaiser

Apenas conte quantos autovalores no gráfico acima (eigenvalues) são maiores que 1.

NUMERO_DE_FATORES <- 2

———————————————————–

PASSO 5: EXECUÇÃO DA ANÁLISE FATORIAL

———————————————————–

Usaremos o método de fatoramento Principal (pa) com rotação Varimax:

af_resultado <- fa(
  r = dados_fa,
  nfactors = NUMERO_DE_FATORES,
  rotate = "varimax", # Rotação ortogonal (fatores não correlacionados)
  fm = "pa"           # Método de fatoramento (Principal Axis Factoring)
)

Visualizar os resultados

print(af_resultado)
## Factor Analysis using method =  pa
## Call: fa(r = dados_fa, nfactors = NUMERO_DE_FATORES, rotate = "varimax", 
##     fm = "pa")
## Standardized loadings (pattern matrix) based upon correlation matrix
##                   PA1   PA2   h2     u2 com
## Produtividade    0.37  0.92 0.99 0.0127 1.3
## Biomassa         0.37  0.93 1.00 0.0025 1.3
## Taxa_Crescimento 0.36  0.93 0.99 0.0079 1.3
## Indice_Vegetacao 0.36  0.91 0.95 0.0481 1.3
## Preco_Mercado    0.95 -0.29 0.98 0.0174 1.2
## Demanda          0.96 -0.29 1.00 0.0045 1.2
## Custo_Producao   0.94 -0.31 0.98 0.0245 1.2
## Margem_Liquida   0.95 -0.29 0.98 0.0157 1.2
## 
##                        PA1  PA2
## SS loadings           4.13 3.74
## Proportion Var        0.52 0.47
## Cumulative Var        0.52 0.98
## Proportion Explained  0.53 0.47
## Cumulative Proportion 0.53 1.00
## 
## Mean item complexity =  1.2
## Test of the hypothesis that 2 factors are sufficient.
## 
## df null model =  28  with the objective function =  23.29 with Chi Square =  4554.17
## df of  the model are 13  and the objective function was  0.08 
## 
## The root mean square of the residuals (RMSR) is  0 
## The df corrected root mean square of the residuals is  0 
## 
## The harmonic n.obs is  200 with the empirical chi square  0.01  with prob <  1 
## The total n.obs was  200  with Likelihood Chi Square =  14.63  with prob <  0.33 
## 
## Tucker Lewis Index of factoring reliability =  0.999
## RMSEA index =  0.025  and the 90 % confidence intervals are  0 0.077
## BIC =  -54.24
## Fit based upon off diagonal values = 1
## Measures of factor score adequacy             
##                                                   PA1 PA2
## Correlation of (regression) scores with factors     1   1
## Multiple R square of scores with factors            1   1
## Minimum correlation of possible factor scores       1   1

———————————————————–

PASSO 6: INTERPRETAÇÃO (ANÁLISE DAS CARGAS)

———————————————————–

Exibir apenas as cargas (loadings) fatoriais de forma organizada

print(af_resultado$loadings, cutoff = 0.5, sort = TRUE)
## 
## Loadings:
##                  PA1    PA2   
## Preco_Mercado     0.949       
## Demanda           0.956       
## Custo_Producao    0.939       
## Margem_Liquida    0.949       
## Produtividade            0.922
## Biomassa                 0.928
## Taxa_Crescimento         0.928
## Indice_Vegetacao         0.906
## 
##                  PA1   PA2
## SS loadings    4.131 3.736
## Proportion Var 0.516 0.467
## Cumulative Var 0.516 0.983

Exemplo de Interpretação:

  1. Olhe para a coluna 1 (Fator 1) e 2 (Fator 2).
  2. Identifique quais variáveis têm a maior carga em cada fator.
  3. Nomeio os fatores de acordo com o observado.

Interpretação dos Resultados parciais

A análise fatorial realizada com oito variáveis agronômicas e econômicas revelou a presença de dois fatores principais, capazes de explicar 98,3% da variação total observada nos dados. O teste KMO apresentou valor 0,87, considerado excelente, indicando que os dados possuem estrutura adequada para a aplicação da técnica. O teste de Esfericidade de Bartlett também foi altamente significativo (p < 0,001), confirmando que a matriz de correlação não é identidade e que existe padrão de correlações suficiente para justificar o modelo fatorial.

A inspeção do scree plot e dos autovalores indicou a retenção de dois fatores, que correspondem claramente a dois blocos distintos de variáveis.

O Fator 1 concentra as variáveis Preço de Mercado, Demanda, Custo de Produção e Margem Líquida, todas com cargas fatoriais acima de 0,93. Esse fator representa um componente latente associado ao desempenho econômico/comercial do sistema produtivo, refletindo condições de mercado, custos operacionais e retorno econômico.

O Fator 2 agrupa as variáveis Produtividade, Biomassa, Taxa de Crescimento e Índice de Vegetação, todas com cargas superiores a 0,90. Este fator representa o desempenho fisiológico-produtivo da cultura, sintetizando vigor vegetativo, crescimento e potencial produtivo.

As comunalidades foram extremamente altas (0,95 a 1,00), indicando que os dois fatores extraídos explicam praticamente toda a variabilidade das variáveis observadas. A rotação Varimax proporcionou uma separação clara entre fatores, sem cargas cruzadas relevantes.

A interpretação geral revela a existência de dois processos independentes no sistema avaliado: (1) um processo econômico, associado à precificação, custos e retorno financeiro; (2) um processo fisiológico, associado à produtividade e ao desenvolvimento da planta.

Esta estrutura evidencia a dissociação entre desempenho agronômico e condições de mercado, indicando que alterações fisiológicas da planta não necessariamente se refletem diretamente na dinâmica econômica, e vice-versa.

Aprofundando…

Verificando os scores dos fatores 1 e 2 em cada linha (fazenda)

scores = as.data.frame(af_resultado$scores)
head(scores)
##                    PA1        PA2
## Fazenda_001  0.4399124  0.4915143
## Fazenda_002  0.4264779 -0.3310207
## Fazenda_003  1.1646988  0.3621425
## Fazenda_004  1.3849309  1.2834696
## Fazenda_005 -1.4605494  0.3544512
## Fazenda_006 -1.0778914  0.2686192

Para filtrar apenas os scores maiores, vamos usar a função “filter” do pacote “dplyr”:

Escores altos do primeiro fator:

scores %>% 
  filter(abs(PA1) > 2)
##                   PA1        PA2
## Fazenda_010  3.766451 -0.7917876
## Fazenda_021  2.557976  0.6959308
## Fazenda_024 -2.054415 -0.7242215
## Fazenda_035  2.158719  0.1058505
## Fazenda_063 -3.471664  0.1806600
## Fazenda_086 -2.025251  0.3373912
## Fazenda_175  2.067191 -0.4457752
## Fazenda_183 -2.431297 -0.2322413

Escores altos do segundo fator:

scores %>% 
  filter(abs(PA2) > 2)
##                     PA1       PA2
## Fazenda_014  0.02748629 -2.207754
## Fazenda_038 -0.48230877 -2.074263
## Fazenda_072 -0.99375424  2.093663
## Fazenda_075 -1.76533304 -2.308413
## Fazenda_114  1.45323710  2.367102
## Fazenda_124  1.45439336 -2.142752
## Fazenda_126 -0.55412694  2.717554
## Fazenda_157  0.46116950  2.031499
## Fazenda_168  0.54835459  2.124811
## Fazenda_180  0.03803844  3.212254