Transformación del modelo MISHO: Gatos MASS

Author

Ángel Colli & Beatriz Lavadores

1. Introducción y planteamiento del problema

En este reporte se utilizará la base de datos cats disponible en R, que contiene la información de 144 gatos adultos: su sexo, el peso de su corazón y su peso corporal; todos con más de 2 kilogramos.

El propósito es analizar de que forma se relaciona el peso de cada gato (\(X=Bwt\), en kilogramos) con el peso de su corazon (\(Y=Hwt\), en gramos).

2. Retomando el modelo

Reajuste del modelo

Dado que el modelo original no pasó la pruea del intercepto, es necesario reajustarlo.

MISHO <- lm(Hwt ~ Bwt-1, data = cats)
summary(MISHO)

Call:
lm(formula = Hwt ~ Bwt - 1, data = cats)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.4563 -0.9980 -0.1003  1.0044  5.2623 

Coefficients:
    Estimate Std. Error t value Pr(>|t|)    
Bwt  3.90711    0.04364   89.53   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 1.449 on 143 degrees of freedom
Multiple R-squared:  0.9825,    Adjusted R-squared:  0.9823 
F-statistic:  8015 on 1 and 143 DF,  p-value: < 2.2e-16
Intercepto \(\hat{\beta}_0\): 0, lo cual indica que si el peso del gato fuese de 0kg, el peso de su corazón sería 0 g; a forma de interpretación matemática, fuera del rango observado.
Pendiente: \(\hat{\beta_1}\): 3.90711. Lo cual indica que por cada kilo que el gatito aumente, se estima que el peso de su corazón aumenta, en promedio, 3.90711 gramos.
R-squared: 0.9825, que es mayor a 0.7

Gráfica de dispersión del modelo reajustado

Gráfico de bigotes

Gráficos de diagnóstico estándar

Además, se habia concluido que el modelo, no cumplía ninguno de los tres supuesto: Normalidad, homocedasticidad e independencia.

3. Datos atípicos

Se puede observar la presencia de tres datos atípicos, sin embargo, es necesario ir un paso más allá de lo visual, y ocupar las tres herramientas que nos permiten conocer aquellos datos que influyen en nuestro modelo. 

  • Leverage 
  • Distancia de Cook 
  • Residuales estandarizados 
Observaciones con RStudent > 3: 144 
Observaciones con Distancia de Cook alta: 125 135 136 140 144 

Notese que la observación 144 aparece en ambos analisis, por lo que se procurará su tratamiento.

Y al visualizar las distancias de cook se tiene:

4. Tratamiento de valores atípicos

El peso fuera de lo normal del corazón (alto) en gatos puede tener múltiples razones, incluyendo la Miocardiopatía hipertrófica (MCH). El tipo más común de miocardiopatía. El músculo cardíaco se engrosa, lo que dificulta bombear sangre. Aunque se desconoce la causa exacta, se estima que 1 de cada 7 gatos lo padece (Purina, 2026). El gatito tiene un peso similar a otras observaciones pero el peso de su corazón es mayor en comparación al resto de datos, lo que podría implicar una mayor acumulación de grasa en el corazón, con otras causas como el sexo, edad y raza.

Opción A) Eliminación de observaciones extremas

La observación 144, correspondiente a un gato macho de 3.9 kilos y tiene un corazón que pesa 20 gramos; se repite en las observaciones de R-student y de las distancias de Cook. Por lo que la filtraremos y eliminaremos al ser la única coincidencia.

#Identificamos y filtramos la observación 144 (la de mayor RStudent/Cook) 

cats_filtered <- cats[-atipicos_rstudent, ] 

#Reajustar modelo sin el outlier 

modelo_filtrado <- lm(Hwt ~ Bwt -1, data = cats_filtered)
summary(modelo_filtrado) 

Call:
lm(formula = Hwt ~ Bwt - 1, data = cats_filtered)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.3864 -0.9597 -0.0647  1.0459  3.5912 

Coefficients:
    Estimate Std. Error t value Pr(>|t|)    
Bwt  3.88823    0.04199   92.61   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 1.384 on 142 degrees of freedom
Multiple R-squared:  0.9837,    Adjusted R-squared:  0.9836 
F-statistic:  8576 on 1 and 142 DF,  p-value: < 2.2e-16

Nótese que el modelo sigue cumpliendo el \(R-quared>0.7\)


    Lilliefors (Kolmogorov-Smirnov) normality test

data:  modelo_filtrado$residuals
D = 0.091081, p-value = 0.005511

Sin embago, considerando un \(\alpha=0.05\) y un \(p=0.005\), el modelo no tiene un comportamiento normal.

Opción B) Winsorización

Considerando que con la opción A) el modelo no pasó la prueba de normalidad, recurrimos a la Winsorización. Considerando que 1 de cada 7 gatitos pueden tener algún problema cardíaco, puede ser un problema de salud común entre la población gatuna; por lo que quizá mantener el dato atípico sea la mejor opción.

#1. Definir los límites de los percentiles (por ejemplo, 5% inferior y 5% superior)
q_inf <- quantile(cats$Hwt, 0.05, na.rm = TRUE) 

q_sup <- quantile(cats$Hwt, 0.95, na.rm = TRUE) 

#2. Crear una nueva columna en el dataframe con la variable Ozone winsorizada 

cats$Hwt_winsorized <- pmin(pmax(cats$Hwt, q_inf), q_sup) 

#3. Ajustar el nuevo modelo con la variable winsorizada 

modelo_winsor <- lm(Hwt_winsorized ~ Bwt -1, data = cats) 

summary(modelo_winsor) 

Call:
lm(formula = Hwt_winsorized ~ Bwt - 1, data = cats)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.3296 -0.8631 -0.0267  1.0797  3.0178 

Coefficients:
    Estimate Std. Error t value Pr(>|t|)    
Bwt  3.87288    0.03899   99.34   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 1.294 on 143 degrees of freedom
Multiple R-squared:  0.9857,    Adjusted R-squared:  0.9856 
F-statistic:  9868 on 1 and 143 DF,  p-value: < 2.2e-16

Ahora, con este nuevo modelo, hacemos la prueba de Lilliefors de normalidad 


    Lilliefors (Kolmogorov-Smirnov) normality test

data:  modelo_winsor$residuals
D = 0.07857, p-value = 0.02974

considerando un \(\alpha=0.05\) y un \(p=0.02\), el modelo aún con el ajuste de los datos atípicos no satisface la prueba de normalidad, apesar de que se acerca más al valor de significancia que en la opción A).

5. Transformación de BoxCox

Calculamos el BoxCox

De manera gráfica, el punto máximo de la curva con un 95% de confianza parece indicar que el valor óptimo de \(\lambda\) parece aproximarse a cero o almenos a un valor muy cercano a el.

Encontramos el \(\lambda\) óptimo exacto:

El valor óptimo estimado de lambda es: -0.06060606 

Como se había esperado, el valor de lambda está contenido en un intervalo que también contiene al 0, por lo que la transformación más adecuada es el logaritmo natural.

Transformación del modelo

modelo_trans <- lm(log(Hwt) ~ Bwt -1, data = cats) 

summary(modelo_trans) 

Call:
lm(formula = log(Hwt) ~ Bwt - 1, data = cats)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.72377 -0.13793  0.04596  0.25066  0.56390 

Coefficients:
    Estimate Std. Error t value Pr(>|t|)    
Bwt  0.84369    0.00815   103.5   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.2705 on 143 degrees of freedom
Multiple R-squared:  0.9868,    Adjusted R-squared:  0.9867 
F-statistic: 1.072e+04 on 1 and 143 DF,  p-value: < 2.2e-16

Notése que el R-quared se mantiene arriba de 0.7

Gráficos del nuevo modelo

Observamos que el gráfico Residuals vs Fitted, presenta una “pendiente” hacia abajo por lo que aplicamos la misma transformación, pero ahora al modelo con intercepto.

Reajuste del modelo transformado

modelo_trans3 <- lm(log(Hwt) ~ Bwt, data = cats_filtered) 

summary(modelo_trans3) 

Call:
lm(formula = log(Hwt) ~ Bwt, data = cats_filtered)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.38100 -0.08750 -0.00625  0.10045  0.28436 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  1.36479    0.06433   21.21   <2e-16 ***
Bwt          0.35698    0.02334   15.30   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.1326 on 141 degrees of freedom
Multiple R-squared:  0.624, Adjusted R-squared:  0.6213 
F-statistic:   234 on 1 and 141 DF,  p-value: < 2.2e-16

El valor de \(r-quared\) es de 0.624, que es ligeramente menor a 0.7; sin embargo, antes de descartarlo, observemos de manera gráfica los supuestos.

En estos nuevos gráficos, se sospecha normalidad y homocedasticidad.

6. Pruebas de normalidad, homocedasticidad e independencia

Antes de realizar el ajuste de los outliners, se desea comprobar si el modelo transformado cumple los supuestos.

Prueba de normalidad

Sean:

\(H_0:\) Los residuales del modelo siguen una distribución normal
\(H_1:\) Los residuales del modelo NO siguen una distribución normal

Considerando la Regla de decisión: \(\alpha=0.05\):

  • Si \(p-valor>0.05\): No se rechaza \(H_0\)​. Se concluye que existe evidencia suficiente de que se cumple el supuesto de normalidad en los residuales.

  • Si \(p-valor≤0.05\): Se rechaza $H_0$​. Existen evidencias de que los residuales no se distribuyen de forma normal.


    Lilliefors (Kolmogorov-Smirnov) normality test

data:  modelo_trans3$residuals
D = 0.059281, p-value = 0.252
Sea \(p=0.252\), entonces hay evidencia suficiente para afirmar que se cumple el supuesto de normalidad (1/3).

Prueba de homocedasticidad

Sean:

\(H_0:\) Los residuales son homocedásticos (errores con varianza constante)

\(H_1:\) Los residuales son heterocedásticos.

Considerando la Regla de decisión: \(\alpha=0.05\):

  • Si \(p-valor>0.05\): No se rechaza \(H_0\)​. Se concluye que existe evidencia suficiente de que se cumple el supuesto de homocedasticidad.

  • Si \(p-valor≤0.05\): Se rechaza $H_0$​. Existen evidencias de heterocedasticidad.


    studentized Breusch-Pagan test

data:  modelo_trans3
BP = 1.4188, df = 1, p-value = 0.2336
Sea \(p=0.2636\), entonces hay evidencia suficiente para afirmar que se cumple el supuesto de homocedasticidad (2/3).

Prueba de independencia

Sean:

\(H_0:p=0\) (errores independientes/no hay correlación en residuales)

\(H_1:p\neq0\) (Existe correlación entre los residuales).

Considerando la Regla de decisión: \(\alpha=0.05\):

  • Si \(p-valor>0.05\): No se rechaza \(H_0\)​. Se cumple el supuesto de independencia.

  • Si \(p-valor≤0.05\): Se rechaza \(H_0\)​. Existe autocorrelación entre residuales.


    Durbin-Watson test

data:  modelo_trans3
DW = 1.6155, p-value = 0.008209
alternative hypothesis: true autocorrelation is greater than 0
Sea \(p=0.08209\), entonces hay evidencia suficiente para afirmar que no se cumple el supuesto de independencia (2/3 :().

7. Winsorización