Introduccion a GREENREG

Que es GREENREG

GREENREG es un paquete pensado para facilitar el ajuste, la validacion de supuestos y la interpretacion de modelos estadisticos comunes en ciencias agropecuarias y ambientales, sin tener que escribir a mano las pruebas de diagnostico cada vez.

Incluye funciones para:

library(GREENREG)

Regresion Lineal Multiple

El flujo tipico es: ajustar el modelo, imprimirlo (para leer coeficientes, VIF y el veredicto de los supuestos) y graficarlo (para inspeccionar los diagnosticos visualmente).

data(datos_rendimiento_maiz)

modelo <- greenreg_rlm(rendimiento_maiz_ton_ha ~ ., data = datos_rendimiento_maiz)
modelo
#> 
#> ==================================================================
#>        REGRESIÓN LINEAL MULTIPLE (RLM)        
#> ==================================================================
#> 
#> --- 1. MODELO MATEMÁTICO ESTIMADO ---
#>  Variable Dependiente (Y):  rendimiento_maiz_ton_ha 
#>  Predictores (X):            precipitacion_mm, temperatura_c, fertilizante_kg_ha 
#>  Ecuación Estimada:          rendimiento_maiz_ton_ha  = 1.5384 + 0.004 * precipitacion_mm + 0.1196 * temperatura_c + 0.0149 * fertilizante_kg_ha 
#>  Ajuste (R2 Ajustado):       91.99 %
#> 
#> --- 2. COEFICIENTES ESTIMADOS ---
#>                     Estimate Std. Error t value Pr(>|t|)    
#> (Intercept)        1.5383598  0.3235100   4.755 5.75e-06 ***
#> precipitacion_mm   0.0040207  0.0001536  26.180  < 2e-16 ***
#> temperatura_c      0.1196020  0.0112550  10.627  < 2e-16 ***
#> fertilizante_kg_ha 0.0149040  0.0005876  25.364  < 2e-16 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Multicolinealidad (VIF):
#>   precipitacion_mm      temperatura_c fertilizante_kg_ha 
#>               1.01               1.01               1.00 
#> 
#> --- 3. INTERVALOS DE CONFIANZA ---
#>                     2.5 % 97.5 %
#> (Intercept)        0.8976 2.1791
#> precipitacion_mm   0.0037 0.0043
#> temperatura_c      0.0973 0.1419
#> fertilizante_kg_ha 0.0137 0.0161
#> 
#> --- 4. ANÁLISIS DE VARIANZA (ANOVA) ---
#>                          Df   Sum Sq  Mean Sq F value Pr(>F)    
#> precipitacion_mm     1.0000  92.6101  92.6101  632.68 <2e-16 ***
#> temperatura_c        1.0000  13.5819  13.5819   92.79 <2e-16 ***
#> fertilizante_kg_ha   1.0000  94.1686  94.1686  643.32 <2e-16 ***
#> Residuals          116.0000  16.9799   0.1464      NA     NA    
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> --- 5. VERIFICACIÓN DE SUPUESTOS ---
#>  Linealidad (Rainbow Test):   [p-valor: 0.3609 ] -> No se rechaza la linealidad.
#>  Normalidad (Shapiro-Wilk):   [p-valor: 0.0193 ] -> Se rechaza la normalidad de los residuos.
#>  Homocedasticidad (B-Pagan):  [p-valor: 0.9307 ] -> No se rechaza la homocedasticidad.
#>  Independencia (D-Watson):    [Estad.: 1.94    ] -> No hay evidencia de autocorrelación.
#>  Multicolinealidad (VIF):      No hay problemas graves de Multicolinealidad (VIF < 5).
#> 
#> --- 6. RESUMEN DEL MODELO ---
#> GLOBAL:     BIEN: El modelo en conjunto es SIGNIFICATIVO (al menos una variable ayuda a predecir). 
#> AJUSTE:     El modelo explica el 91.99% de la variabilidad (R2 Ajustado). Ajuste BUENO. 
#> VALIDEZ:    El modelo cumple con los supuestos básicos. 
#> 
#> Use 'plot(modelo)' para ver diagnósticos visuales.
#> ==================================================================

print() reporta, en orden: los coeficientes con sus intervalos de confianza, el Factor de Inflacion de la Varianza (VIF) para detectar multicolinealidad, y una bateria de pruebas de supuestos (normalidad, homocedasticidad, independencia y linealidad) traducidas a un veredicto accionable.

plot(modelo)

Diagnosticos graficos del modelo de regresion lineal multiple

#> `geom_smooth()` using formula = 'y ~ x'

Diagnosticos graficos del modelo de regresion lineal multiple

#> `geom_smooth()` using formula = 'y ~ x'

Diagnosticos graficos del modelo de regresion lineal multipleDiagnosticos graficos del modelo de regresion lineal multipleDiagnosticos graficos del modelo de regresion lineal multipleDiagnosticos graficos del modelo de regresion lineal multipleDiagnosticos graficos del modelo de regresion lineal multipleDiagnosticos graficos del modelo de regresion lineal multipleDiagnosticos graficos del modelo de regresion lineal multipleDiagnosticos graficos del modelo de regresion lineal multiple

plot() genera una secuencia de graficas de diagnostico: distribucion de variables, relacion Y vs. cada predictor, ajuste observado-vs-predicho, QQ-plot de normalidad, homocedasticidad, independencia, VIF, distancia de Cook y apalancamiento (leverage).

Regresion Logistica

data(datos_roya_cafe)

modelo_log <- greenreg_logistico(
  presencia_roya ~ humedad_relativa_pct + altitud_msnm + manejo_sombra,
  data = datos_roya_cafe
)
#> Waiting for profiling to be done...
modelo_log
#> 
#> ==========================================================
#>                REGRESIÓN LOGÍSTICA 
#> ==========================================================
#> 
#> --- 1. MODELO Y ECUACIÓN ---
#> Fórmula aplicada: presencia_roya ~ humedad_relativa_pct + altitud_msnm + manejo_sombra 
#> Ecuación estimada:
#>  logit(p) = -27.484 + (0.306 * humedad_relativa_pct) + (-0.001 * altitud_msnm) + (-2.289 * manejo_sombra) 
#> 
#> --- 2. COEFICIENTES ESTIMADOS ---
#> Estimaciones en escala Logit (log-odds):
#>                        Estimate Std. Error z value Pr(>|z|)   
#> (Intercept)          -2.748e+01  8.912e+00  -3.084  0.00204 **
#> humedad_relativa_pct  3.061e-01  9.733e-02   3.145  0.00166 **
#> altitud_msnm         -7.489e-04  1.089e-03  -0.688  0.49170   
#> manejo_sombra        -2.289e+00  9.251e-01  -2.474  0.01335 * 
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Interpretación en Odds Ratios (OR):
#>                          OR  2.5 % 97.5 % P-valor
#> humedad_relativa_pct 1.3581 1.1647 1.7239  0.0017
#> altitud_msnm         0.9993 0.9970 1.0014  0.4917
#> manejo_sombra        0.1014 0.0122 0.5231  0.0134
#>  NOTA: El intercepto se omite de esta tabla (su OR no tiene una
#>        interpretación útil; representa el caso base con predictores en 0).
#>  GUIA: OR > 1 Aumenta prob. | OR < 1 Disminuye prob.
#> 
#> --- 3. EVALUACIÓN DEL MODELO ---
#> Prueba de Razon de Verosimilitud (LRT):
#>  Chi-cuadrado: 33.441 | GL: 3 | p-valor: 0.0000
#>  Resultado: Modelo Globalmente Significativo 
#> 
#> --- 4. BONDAD DE AJUSTE ---
#>  Log-Verosimilitud (LogLik): -21.9 
#>  AIC (Criterio de Akaike):  51.801 
#>  AUC (Área bajo la curva ROC): 0.95 
#> * Pseudo R2 (McFadden) = 0.433. (Por encima de 0.4: revisa sobreajuste o separación casi perfecta antes de celebrar; la regla 0.2-0.4 no aplica aquí.) 
#>  Prueba de Wald: Revisar asteriscos en la sección 2 (Significancia individual).
#> 
#> --- 5. MATRIZ DE CONFUSIÓN (Real vs Predicho) ---
#>     Predicho
#> Real   0   1
#>    0 168   2
#>    1   7   3
#> 
#>  CÓMO LEER ESTA GRÁFICA:
#> Buscamos una diagonal principal (Real y Predicho coinciden) con valores altos.
#> Los valores fuera de la diagonal representan Falsos Positivos y Falsos Negativos.
#> * Precisión Global (Accuracy): 95%. Tasa de no información (predecir siempre la clase mayoritaria): 94.4%. 
#>  Sensibilidad (VP/(VP+FN)): 30.0%   Especificidad (VN/(VN+FP)): 98.8%
#>  VPP (VP/(VP+FP)):          60.0%   VPN (VN/(VN+FN)):           96.0%
#>  Exactitud balanceada: 64.4%
#>  AVISO: Con clases desbalanceadas, compara la Accuracy contra la tasa de
#>         no informacion (arriba); si son parecidas, el modelo no aporta
#>         mucho mas que predecir siempre la clase mayoritaria.
#> 
#> --- 6. VERIFICACIÓN DE SUPUESTOS ---
#>  Linealidad en el Logit: Supuesta (Usar plot(x) para verificar gráficos de residuos).
#>  Independencia: Observaciones independientes asumidas por diseño.
#>  -  OKEY: El modelo es significativamente mejor que el nulo. 
#>  -  OKEY: No hay multicolinealidad severa. 
#>  -   ALERTA: Se detectaron casos influyentes (Distancia de Cook). Revisa los casos atípicos. 
#>  -   ALERTA: Hay observaciones con Leverage alto (puntos atípicos en X). Usa plot() para ver el gráfico. 
#> 
#> --- 7. RESUMEN DEL MODELO ---
#> Conclusión rapida: Ejemplo de interpretación: La variable 'humedad_relativa_pct' es significativa. Su OR es 1.36, lo que significa que AUMENTA la probabilidad del evento. 
#> 
#>  ALERTA: El modelo presenta advertencias técnicas (Multicolinealidad, Puntos influyentes o Leverage).
#>  Se recomienda usar plot(nombre_del_objeto) para ver los gráficos de diagnóstico.
#> 
#> ==========================================================

El resultado incluye los momios (Odds Ratio), la pseudo-R2 de McFadden, la matriz de confusion y el area bajo la curva ROC (AUC).

Series de tiempo

data(datos_anomalia_temperatura)

modelo_ts <- greenreg_modelo_ar(datos_anomalia_temperatura$anomalia_c, p = 2)
modelo_ts
#> 
#> ==========================================================
#>      MODELO AUTORREGRESIVO AR(2) 
#> ==========================================================
#> 
#> --- 1. MODELO Y ECUACIÓN ---
#> Ecuación de Diferencias Estimada:
#>  Y(t) = -0.048 + (0.963 * Y(t-1)) + (-0.378 * Y(t-2)) + E(t) 
#> AIC (Criterio de Akaike): 26.73 
#>  NOTA: El intercepto representa el valor medio de la serie si es estacionaria.
#> 
#> --- 2. COEFICIENTES ESTIMADOS (Parámetros Phi) ---
#>           Estimacion Std.Error  z.value P.valor
#> ar1          0.96319   0.05967 16.14326    0.00
#> ar2         -0.37801   0.05957 -6.34565    0.00
#> intercept   -0.04784   0.03899 -1.22689    0.22
#> 
#>  Persistencia: El coeficiente AR1 es 0.96. Esto indica que tanto del valor de ayer (t-1) se transfiere a hoy. 
#>  GUIA: Si |Phi| es cercano a 1, la serie tiene mucha memoria (persistencia).
#> 
#> --- 3. IDENTIFICACIÓN DEL MODELO (Orden p) ---
#>  Orden seleccionado: p = 2 
#>  Criterio ACF: Las autocorrelaciones decaen exponencialmente o de forma sinoidal.
#>  Criterio PACF: Los coeficientes de autocorrelación parcial se cortan despues del lag 2 .
#>  NOTA: Si ves barras significativas en PACF despues de p, podrias necesitar un orden mayor.
#> 
#> --- 4. VERIFICACIÓN DE SUPUESTOS ---
#> A) Estacionariedad (Raíces Unitarias):
#>    - Módulos de raíces inversas: 0.615, 0.615 
#>    -  CONCLUSIÓN: El modelo es ESTABLE (Estacionario). Puede usarse para predecir. 
#> 
#> B) Diagnóstico de Errores (E ~ RB):
#>   Media de los residuos: -0.0001 (Esperado: 0)
#>   No Autocorrelación (Ljung-Box p-valor): 0.0396  [lag=10, fitdf=2]
#>      ->  CONCLUSIÓN: Existe Autocorrelación. El modelo no capturó toda la dinámica (Faltan lags). 
#>   Normalidad (Shapiro p-valor): 0.4942
#>      ->  CONCLUSIÓN: No se rechaza la normalidad de los errores (OKEY). Los intervalos de confianza son fiables. 
#> 
#> --- 5. RESUMEN DEL MODELO ---
#>  ADVERTENCIA: El modelo presenta deficiencias técnicas.
#>    Revisa si es necesario diferenciar la serie (d=1) o cambiar el orden p.
#> 
#>  Usa plot(modelo) para visualizar la serie, ACF y raíces unitarias.
#> ==========================================================

greenreg_modelo_ar() (y sus analogos greenreg_modelo_ma(), greenreg_modelo_arma(), greenreg_modelo_arima()) reportan la estabilidad del modelo (raices inversas dentro del circulo unitario), y el diagnostico de residuos mediante la prueba de Ljung-Box (ruido blanco) y Shapiro-Wilk (normalidad).

Que modelo debo usar

Cuando no es evidente que tipo de modelo conviene, greenreg_analisis_datos() inspecciona la variable respuesta y sugiere una opcion:

greenreg_analisis_datos(datos_rendimiento_maiz, "rendimiento_maiz_ton_ha")
#> 
#> Asistente de Análisis de Datos
#> ===========================================
#>    Base de datos: datos_rendimiento_maiz
#>    Objetivo: 'rendimiento_maiz_ton_ha'
#>    Observaciones: 120 | Predictoras: 3
#> 
#> RECOMENDACIÓN AUTOMÁTICA:
#>    -> Sugerencia: Opción 1
#>    -> Motivo: Variable continua (Regresión Lineal).
#> 
#> Opciones Disponibles:
#>    1. Regresión Lineal  * (Recomendado)
#>    2. Modelos GLM (Logística/Poisson)
#>    3. Series de Tiempo
#> -> Seleccion automática aplicada: 1
#> 
#>  Analizando para Regresión Lineal...
#> 
#>  ANÁLISIS COMPLETADO.
#> NOTA: El proceso stepwise (AIC) conservó todas las variables; no se eliminó ninguna. 
#> --------------------------------------------------
#>  OPCIÓN A: Modelo con TODAS las variables
#> --------------------------------------------------
#> modelo_rlm_full <- greenreg_rlm(rendimiento_maiz_ton_ha ~ ., data = datos_rendimiento_maiz)
#> modelo_rlm_full
#> plot(modelo_rlm_full) 
#> --------------------------------------------------
#> 
#>  OPCIÓN B: Modelo OPTIMIZADO (Variables Seleccionadas)
#>    (Elimina variables que aportan ruido o son redundantes)
#> --------------------------------------------------
#> modelo_rlm_opt <- greenreg_rlm(rendimiento_maiz_ton_ha ~ precipitacion_mm + temperatura_c + fertilizante_kg_ha, data = datos_rendimiento_maiz)
#> modelo_rlm_opt
#> plot(modelo_rlm_opt) 
#> --------------------------------------------------

Para saber mas

Consulta la documentacion de cada funcion (por ejemplo, ?greenreg_rlm) para el detalle de cada estadistico reportado y las referencias metodologicas (Montgomery et al., 2021; Box & Jenkins, 1970) en las que se basa el paquete.