1 Dados e Métodos

Os dados utilizados neste trabalho foram obtidos do repositório de dados de pesquisa da Mindanao State University (Baixar os dados aqui). O conjunto de dados possui aproximadamente 378 observações e contém informações sobre a produção de arroz, além das variáveis agro-climáticas, como umidade relativa, umidade do solo, temperatura e precipitação, a Tabela 1 mostra algumas variáveis selecionadas para este estudo em especifico. Os dados foram coletados a partir de registros da Office of the Provincial Agriculturist of Cotabato Province e da base de dados agro-climático da NASA, abrangendo o periodo de 2007 a 2021.

O principal objetivo deste trabalho foi responder a duas perguntas relacionadas a multicolinearidade e seleção de modelos. Portanto, foram considerado as relações entre as variáveis explicativas e a variável resposta (produção de arroz), utilizando técnicas como: matriz de correlação, Fator de Inflação da Variância (VIF), a fim de diagnosticar a presença de multicolinearidade. A seleção de modelos, foi utilizado os métodos de regressão OLS, Ridge e Lasso, avaliando o desempenho preditivo com no R2 ajustado e o erro quadrático médio RMSE.

1.1 Descrição das Variáveis usadas no estudo

Variável Descrição
rice_prod_t Produção de arroz (toneladas)
rel_humidity Umidade relativa (%)
soil_wet_surface Umidade do solo na superfície (g/g)
soil_moist_profile Umidade do solo no perfil (VWC)
soil_moist_root Umidade do solo na zona da raiz (VWC)
temperature_c Temperatura média (°C)
precip_corr_mm Precipitação corrigida (mm)
par_clear_sky Irradiação PAR sob céu limpo (W/m²)
# Carregar pacotes necessários
library(readxl)
library(tidyverse)
library(gtsummary)
library(car)
library(glmnet)
library(knitr)
library(gt)
library(corrplot)
# Definir o diretório de trabalho
getwd()
## [1] "/Users/valdemiromulima/Documents/All info/UFV/Disciplinas/Semester 1/640 - Modelo Linear I/Prova3/EST640-Prova3-Valdemiro"
# Carregar o dataset e renomear as variáveis

data_clean<-read_excel("Research Data.xlsx", sheet = "PROCESSED CROP RRODUCTION DATA") |>
  select(`RICE PRODUCTION (t)`, `RELATIVE HUMIDITY (%)`,`SURFACE SOIL WETNESS (g/g)`,
  `PROFILE SOIL MOISTURE (VWC)`,`ROOT ZONE SOIL MOISTURE (VWC)`,`TEMPERATURE (°C)`, `PRECIPITATION CORRECTED (mm)`,`CLEAR SKY SURFACE PAR TOTAL (W/m^2)`) |> 
 rename(rice_prod_t = `RICE PRODUCTION (t)`, rel_humidity = `RELATIVE HUMIDITY (%)`,
    soil_wet_surface = `SURFACE SOIL WETNESS (g/g)`, soil_moist_profile= `PROFILE SOIL MOISTURE (VWC)`, soil_moist_root = `ROOT ZONE SOIL MOISTURE (VWC)`, temperature_c= `TEMPERATURE (°C)`, 
    precip_corr_mm= `PRECIPITATION CORRECTED (mm)`, par_clear_sky=`CLEAR SKY SURFACE PAR TOTAL (W/m^2)`) %>% drop_na()
## New names:
## • `MIN TEMPERATURE (°C)` -> `MIN TEMPERATURE (°C)...8`
## • `MIN TEMPERATURE (°C)` -> `MIN TEMPERATURE (°C)...9`
#
glimpse(data_clean)
## Rows: 378
## Columns: 8
## $ rice_prod_t        <dbl> 164509.465, 152109.465, 12495.000, 10341.000, 6985.…
## $ rel_humidity       <dbl> 85.69, 86.19, 85.38, 85.81, 87.50, 86.06, 84.88, 83…
## $ soil_wet_surface   <dbl> 0.79, 0.86, 0.80, 0.80, 0.91, 0.88, 0.82, 0.82, 0.9…
## $ soil_moist_profile <dbl> 0.82, 0.91, 0.84, 0.85, 0.95, 0.94, 0.87, 0.86, 0.9…
## $ soil_moist_root    <dbl> 0.79, 0.87, 0.80, 0.80, 0.93, 0.91, 0.82, 0.83, 0.9…
## $ temperature_c      <dbl> 24.05, 24.12, 24.10, 24.00, 23.58, 24.12, 24.16, 24…
## $ precip_corr_mm     <dbl> 7.42, 7.32, 5.90, 5.61, 8.42, 7.32, 6.65, 10.26, 9.…
## $ par_clear_sky      <dbl> 135.84, 134.99, 134.55, 135.73, 136.02, 135.13, 134…

2 Resultados

Nesta seção são apresentados as análise e os principais resultados obtidos atráves dos dados, com foco na verificação de presença de multicolinearidade entre as variáveis e na avaliação comparativa de diferentes modelos de regressão aplicados a predição da produção do arroz.

2.1 Multicolinearidade

1. Existe presença de multiculinearidade entre as variáveis agro-climáticas que afetam a produção de arroz na provínvia de Cotabato, Filipinas?

# correlação entre as variáveis explicativas

matriz_cor<-cor(data_clean %>% select(-rice_prod_t)) %>%round(3)

# visualização 

corrplot(matriz_cor, type="upper")

# vif

model <- lm(rice_prod_t ~ rel_humidity + soil_wet_surface + soil_moist_profile + soil_moist_root + temperature_c + precip_corr_mm + par_clear_sky, data = data_clean)

vif(model)
##       rel_humidity   soil_wet_surface soil_moist_profile    soil_moist_root 
##          10.906934         118.097499          57.628615         124.781044 
##      temperature_c     precip_corr_mm      par_clear_sky 
##           2.344390           4.060355           1.241330

A matriz de correlação mostra a existência de correlações fortes entre algumas variáveis, como a umidade relativa e a umidade do solo na superfície, além da temperatura e da precipitação corrigida. Os resultados do VIF corroboram com essa evidência, com valores superiores a 10 para as variáveis de umidade relativa, umidade do solo na superfície, no perfil e na zona da raiz. Confirmando assim a presença significativa de multicolinearidade.

2.2 Seleção de Modelos

2. Qual modelo de predição apresenta melhor desempenho para explicar a produção de arroz?

Tendo observado a presença de multicolinearidade entre as variáveis, foi necessário aplicar técnicas de regularização para melhorar o desempenho preditivo do modelo. Para isso, foram utilizados os métodos de regressão Ridge e Lasso, além do modelo de regressão OLS como referência. A seguir, são apresentados os resultados dos modelos ajustados e suas respectivas métricas de desempenho.

# definindo variáveis dependentes e independentes

y<- data_clean$rice_prod_t
x <- model.matrix(rice_prod_t~., data = data_clean)[,-1]

# cross validation para encontrar o melhor lambda

cv_ridge <- cv.glmnet(x, y, alpha = 0, nfolds = 10)

# encontrar melhor lambda que minimiza MSE

best_lambda <- cv_ridge$lambda.min
print(best_lambda)
## [1] 6238.225
# encontrar coeficientes do modelo com o melhor lambda

final_model <- glmnet(x, y, alpha = 0, lambda = best_lambda) 

coef(final_model)
## 8 x 1 sparse Matrix of class "dgCMatrix"
##                             s0
## (Intercept)        -6966650.46
## rel_humidity          66056.39
## soil_wet_surface    -809480.93
## soil_moist_profile  -940542.44
## soil_moist_root     -577162.56
## temperature_c         40417.39
## precip_corr_mm        28428.57
## par_clear_sky         16052.37
# avaliando modelo final Rˆ2 e RMSE

pred<- predict(final_model, s = best_lambda, newx = x)

r2 <- 1 - sum((y - pred)^2) / sum((y - mean(y))^2)
print(r2)
## [1] 0.1710973
# RMSE

rmse <- sqrt(mean((y - pred)^2) / length(y))
print(rmse)
## [1] 9871.172
# ajustando modelo Lasso

cv_lasso <- cv.glmnet(x, y, alpha = 1, nfolds = 10)

best_lambda_lasso<-cv_lasso$lambda.min

final_model_lasso <- glmnet(x, y, alpha = 1, lambda = best_lambda_lasso)

coef(final_model_lasso, s="lambda.min")
## 8 x 1 sparse Matrix of class "dgCMatrix"
##                    s=lambda.min
## (Intercept)         -8881442.62
## rel_humidity           94702.63
## soil_wet_surface    -2180476.79
## soil_moist_profile  -1011793.56
## soil_moist_root            .   
## temperature_c          57316.48
## precip_corr_mm         40648.19
## par_clear_sky          13735.81
# avaliando modelo final Lasso Rˆ2 e RMSE
pred_lasso<-predict(final_model, s=best_lambda_lasso, newx = x)

r2_lasso<-1-sum((y-pred_lasso)^2)/sum((y-mean(y))^2)
print(r2_lasso)
## [1] 0.1710973
rmse_lasso<-sqrt(mean((y-pred_lasso)^2)/length(y))
print(rmse_lasso)
## [1] 9871.172
# ajustando o modelo OLS

ols_model <- lm(rice_prod_t ~ ., data = data_clean)
summary(ols_model)
## 
## Call:
## lm(formula = rice_prod_t ~ ., data = data_clean)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -287227  -90694  -28364   27144 1518395 
## 
## Coefficients:
##                    Estimate Std. Error t value Pr(>|t|)    
## (Intercept)        -9158916    2324676  -3.940 9.75e-05 ***
## rel_humidity          98184      17300   5.676 2.79e-08 ***
## soil_wet_surface   -2353859    1570851  -1.498  0.13487    
## soil_moist_profile -1018783     963408  -1.057  0.29098    
## soil_moist_root       72709    1377057   0.053  0.95792    
## temperature_c         59569      19341   3.080  0.00222 ** 
## precip_corr_mm        42310      14824   2.854  0.00456 ** 
## par_clear_sky         13755      13038   1.055  0.29212    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 193000 on 370 degrees of freedom
## Multiple R-squared:  0.1797, Adjusted R-squared:  0.1642 
## F-statistic: 11.58 on 7 and 370 DF,  p-value: 2.552e-13
r2_ols <- summary(ols_model)$adj.r.squared

rmse_ols <- sqrt(mean(ols_model$residuals^2))

# comparando os modelos

tabela<-data.frame(
  Model = c("OLS", "Ridge", "Lasso"),
  R2 = c(r2_ols, r2, r2_lasso),
  RMSE = c(rmse_ols, rmse, rmse_lasso)
)

print(tabela)
##   Model        R2       RMSE
## 1   OLS 0.1641564 190921.807
## 2 Ridge 0.1710973   9871.172
## 3 Lasso 0.1710973   9871.172

Com base nos resultados apresentadas acima, os modelos Ridge e Lasso apresentaram melhor desempenho em termos de R2 ajustado e RMSE quando comparados ao modelo OLS. Ambos se mostraram mais eficazes para predizer a produção de arroz diante da multicolinearidade observada entre as variáveis explicativas.

3 Conclusão

O trabalho teve como objetivo avaliar a presença de multicolinearidade e seleção de modelos. Tendo em conta o objetivo estabelecido e com base nos resultados da análise, conclui-se que: há presença de multicolinearidade, ou seja, existem correlações fortes entre as variáveis explicativas como a umidade relativa e a umidade do solo na superfície, além da temperatura e da precipitação corrigida. O melhor modelo para predizer a produção do arroz tendo em conta algumas variáveis explicativas multicolineares foram modelos Ridge e Lasso.

4 Referências Bibliográficas

  • Akhtar, N., Alharthi, M.F.(2025). Enhancing accuracy in modelling highly multicollinear data using alternative shrinkage parameters for ridge regression methods. Sci Rep 15, 10774 https://doi.org/10.1038/s41598-025-94857-7

  • Delena, Reymark; Tangkeko, Marivic (2023), “From Climate to Crop: Unveiling the Impact of Agro-Climate Dataset on Rice Yield in Cotabato Province”, Mendeley Data, V4, doi: 10.17632/5tp2p84mzc.4

  • Kayode Ayinde, Olusegun O. Alabi, & Nwosu, U. I. (2021). Solving Multicollinearity Problem in Linear Regression Model: The Review Suggests New Idea of Partitioning and Extraction of the Explanatory Variables. Journal of Mathematics and Statistics Studies, 2(1). https://doi.org/10.32996/jmss.2021.2.1.2

  • Montgomery, D. C., Peck, E. A., & Vining, G. G. (2012). Introduction to linear regression analysis (5th ed.). Hoboken, NJ: Wiley.

  • Rita Obikimari Efeizomor. (2023). A Comparative Study of Methods of Remedying Multicolinearity. American Journal of Theoretical and Applied Statistics, 12(4). https://doi.org/10.11648/j.ajtas.20231204.14