Fernando López-Torrijos Flórez y Jose Fernando Zea Castro.

Regresión lineal

El modelo de regresión lineal para muchas variables toma la siguiente forma:

\[y=\beta_0 + \beta_1 x_1 + \beta_2 x_2 + \dots + \beta_p x_p\], donde:

Los valores de \(\beta\) se conocen como los coeficientes de regresión. Estos valores se estiman en un proceso de ajuste usando la función de perdida cuadrático:

\[\sum_{i=1}^{n}(\hat{y}_i-y_i)^2\]

Esta función de perdida se conoce como suma de cuadrados del error.

Se van a exponer varias maneras de utilizar los resultados de una regresión para identificar datos anómalos.

Para exponer las ideas que se van a trabajar, se utiliza una base de datos con medidas corporales.

Medidas de influencia

La formulación del modelo y los coeficientes de regresión son:

modelo = lm(formula = "Peso ~ Estatura", data = datos)
modelo$coefficients
## (Intercept)    Estatura 
##   -66.73773    78.54030

El coeficiente de determinación del modelo es:

res <- summary(modelo)
res$r.squared
## [1] 0.4382725

Los primeros seis registros:

head(datos)
##   ID Peso Sexo Estatura circun_cuello circun_muneca
## 1  1 47.6    F     1.57          29.5          13.9
## 2  2 68.1    M     1.66          38.4          16.0
## 3  3 68.0    M     1.90          36.5          16.6
## 4  4 80.0    M     1.76          38.0          17.1
## 5  5 68.1    M     1.83          38.0          17.1
## 6  6 56.1    F     1.66          33.0          14.7

El número total de datos es 26

Residuales estudentizados

Una manera de identificar outliers es el uso de los residuales estandarizados: \[t_i=\frac{\hat{\epsilon_i}}{\hat{\sigma}\sqrt{\frac{n-1}{n}}}\]

Un umbral razonable para identificar valores extremos según el modelo es considerar los puntos con valor absoluto de los residuales estudentizados mayores a dos:

\[|t_i| > 2\]

Se puede visualizar el punto atípico.

Distancia de Cook

Se define como

\[D_i = \frac{1}{p\sigma^2}\sum_{j=1}^{n}\left(\hat{y}_j - \hat{y}_{j(i)} \right)^2\]

Donde \(\sigma\) corresponde a la varianza de los residuales, \(\hat{y}_j\) es el valor pronosticado para la observación j-ésima usando todos los datos en el modelo de regresión y \(\hat{y}_{j(i)}\) es el pronóstico para la observación j eliminando la observación i-ésima. p es el número de variables consideradas + 1 (el intercepto también se tiene en cuenta), por ejemplo, si se consideran para el modelo de regresión dos variables independientes para pronosticar la variable de interés, el valor de p = 3.

Un punto se considera influyente si \(D_i > \frac{4}{n-p-2}\)

Se puede visualizar el punto atípico que quedó identificado con el método anterior, y un punto adicional:

Estadística dffit

La diferencia “estandarizada” entre el pronóstico de la obsevación i-esima con el modelo haciendo uso de todos los datos y el modelo quitando la observación i-ésima

\[DFFIT_i = \frac{\hat{y}_i-\hat{y}_{i(i)}}{\sqrt{s^2_{(i)}h_{ii}}}\] Si el valor de dffit de la i-ésima es mayor a \(2\sqrt{p/n}\) la observación se considera un outlier.

Se puede visualizar el punto atípico detectado por medio de la prueba dffit:

Punto de apalancamineto

Es relevante identificar los valores atípicos en los predictores, para esto se utiliza la matriz de proyección (matriz “hat”):

\[H=X(X^TX)^{-1}X^T\]

Se identifican los valores que son extremos en el espacio de los predictores.

Por medio de este método se detectan tres puntos sospechosos de atípicos.

Caso multivariado

Una buena estrategia es identificar valores atípicos por varios criterios. En el caso multivariado no es posible visualizar los outliers, sin embargo, sí se pueden marcar los puntos y analizarlos.

modelo <- lm(formula = "Peso ~ Estatura + circun_cuello + circun_muneca", data = datos)
n <- nrow(datos)
p <- 4
res <- summary(modelo)
res$r.squared
## [1] 0.7582013

Se calculan las diferentes medidas de influencia bajo el modelo multivariado:

resid_student <- MASS::studres(modelo)
datos$outlier_residstud_rlm <- ifelse(abs(resid_student) >= 2, 1, 0)
dist_cook <- cooks.distance(modelo)
datos$outlier_cook_rlm <- as.numeric(dist_cook > 4/(n - p - 2))
dffitsr <- dffits(modelo)
datos$outlier_dffit_rlm <- ifelse(dffitsr > 2 * sqrt(p/n), 1, 0)
hat_modelo <- hatvalues(modelo)
datos$influential_hat_rlm <- ifelse(hat_modelo >= 2*p/n, 1 , 0)
ID Peso Sexo Estatura circun_cuello circun_muneca outlier_residstud_rlm outlier_cook_rlm outlier_dffit_rlm influential_hat_rlm
3 68.0 M 1.90 36.5 16.6 0 0 0 1
8 69.2 M 1.78 40.5 16.5 0 1 0 0
11 102.2 M 1.79 41.5 17.1 1 1 1 0
17 79.1 M 1.82 38.0 18.0 0 0 0 1