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.
| 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…
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.
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. 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.
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.
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