Generando el modelo de regresión lineal simple con la función lm
En su forma más básica, debemos especificar los parámetros: fórmula y data. Si miramos la documentación, vemos que el parámetro fórmula, debe ser un objeto de la clase fórmula. A modo simplificado, requiere una notación del tipo y = f(x) —> formula = y ~ x
¿Cuál es la variable objetivo, y la variable explicativa?
Si, a partir del número de reclamaciones queremos estimar el precio del seguro, nuestra variable objetivo será el precio y nuestra predictora el número de reclamaciones.
objeto_modelo <-lm(formula = total_payment_sek ~ n_claims, data = swedish_motor_insurance)print(objeto_modelo)
Requiere el objeto modelo creado previamente y un dataframe que contenga un conjunto de datos (reales o sintéticos) de las variables predictoras.
str(swedish_motor_insurance)
'data.frame': 63 obs. of 2 variables:
$ n_claims : int 108 19 13 124 40 57 23 14 45 10 ...
$ total_payment_sek: num 392.5 46.2 15.7 422.2 119.4 ...
Code
swedish_motor_insurance %>%mutate(prediction_payment_sek =predict(objeto_modelo, newdata =select(., n_claims))) %>%ggplot() +geom_point(aes(x = n_claims, y = total_payment_sek), color ="blue") +geom_point(aes(x = n_claims, y = prediction_payment_sek), color ="red", alpha =0.5) +theme_bw()
Extrapolando datos fuera del rango observado:
Aunque la fórmula del modelo es la ecuación de una recta y su dominio e imagen son teóricamente infinitos, hay que ser cauteloso a la hora de extrapolar datos fuera de rango, usando un modelo creado con un rango determinado.
explanatory_data <-as.integer(round(seq(-10, 150, length.out =63))) # Datos sintéticosprediction_data <-predict(object = objeto_modelo, newdata =data.frame(n_claims = explanatory_data))swedish_motor_insurance$prediction_data = prediction_dataswedish_motor_insurance$explanatory_data = explanatory_dataswedish_motor_insurance %>%ggplot() +geom_point(aes(x = n_claims, y = total_payment_sek), color ="blue") +geom_point(aes(x = explanatory_data, y = prediction_data), color ="red") +theme_bw()
Las métricas principales del modelo
mdl_lqsa_conv_vs_locura <-lm(formula = Convivencia ~ Locura, data = lqsa)mdl_lqsa_conv_vs_locura
La regresión lineal calcula una ecuación que minimiza la distancia entre la línea del modelo y los puntos de los datos reales. Técnicamente, se minimiza la distancia al cuadrado entre el dato y el valor ajustado al modelo.
El parámetro estadístico r-cuadrado es una medida que nos indica el nivel de cercanía entre los datos y la línea de regresión ajustada. Se conoce también como coeficiente de determinación. Es frecuente encontrar en la bibliografía el término r-squared en minúscula cuando hablamos de regresión lineal simple y R-squared cuando tenemos más de una variable predictora.
El coeficiente nos dice qué porcentaje de la varianza explica el modelo.
Puede tomar valores entre 0 y 1
1 significa ajuste perfecto
0 significa que el modelo no explica la variabilidad de los datos de respuesta para los predictores la muestra.
En general, cuanto mayor es r-cuadrado, mejor se ajusta el modelo a los datos.
El coeficiente de determinación debemos relativizarlo al contexto de los datos. En ocasiones, 0.5, puede ser suficiente, mientras que en otras circunstancias es pura aleatoriedad.
Cálculo: correlación elevada al cuadrado. (Para regresión lineal simple)
Coeficiente de determinación ajustado R cuadrado ajustado
En regresión simple, si la muestra es suficientemente grande, es un valor muy parecido, aunque varía ligeramente, porque se usa n-1. El coeficiente tiene sentido cuando la fórmula utiliza más variables predictoras (k), ya que el coeficiente de determinación aumenta al incrementar k, aunque algunas de esas otras variables tengan poca influencia sobre la variable de respuesta. R cuadrado ajustado ya no es entre 0 y 1, sino que podría ser negativo si el nº de variables es grande respecto al nº de filas, especialmente, si el coeficiente de determinación es bajo.
\(1 - \frac{{(n-1)}}{{(n-k-1)}} \cdot (1-R^2)\)
Code
n <-nrow(lqsa)k <-1# Grados de libertad (nº de var. ind.)adj_r_squared <-1- ( (n-1)/(n-k-1) )*(1- r_squared)adj_r_squared
[1] 0.2625036
Error residual estándar (RSE / sigma): Grados de libertad
Otra métrica del modelo es el error residual estándard. Es la diferencia “estándar” entre el valor real y el ajustado por el modelo. Para calcularlo, se eleva al cuadrado el vector de residuos y se realiza la suma total y se calcula la raíz cuadrada y se divide por los grados de libertad (nº de observaciones - nº de coeficientes del modelo).
Lo que representa es por cuánto se equivoca el modelo.
sigma: estimación de la desviación estándar de los errores: n-k-1
statistic: F-statistic. Es un parámetro que se obtiene comparando dos modelos, uno con todos los coeficientes y otro sin incluir predictores. Si el modelo que incluye los predictores es significativamente explica mejor la variabilidad de la variable dependiente en función de la independiente, entonces se acepta el modelo, dado un nivel de significancia previamente establecido. \(f(x; d_1, d_2) = \frac{\sqrt{\frac{(d_1 x)^{d_1} \cdot d_2^{d_2}}{(d_1 x + d_2)^{d_1 + d_2}}}}{x \cdot \text{Beta}\left(\frac{d_1}{2}, \frac{d_2}{2}\right)}\)\(F = \frac{\text{SSR} / k}{\text{SSE} / (n - k - 1)}\)
p.value: A partir del parámetro anterior, y usando la distribución F, se obtiene el p-valor como la probabilidad de encontrar un valor tan extremo o más que F_statictic según la distribución F. Usamos la función de distrubución de probabilidad acumulada pf
df: Grados de libertad (nº de variables predictoras)
logLik: El logaritmo de la verosimilitud del modelo. Es una medida de cuán bien se ajusta el modelo a los datos, y se utiliza en la comparación de modelos. en la práctica, se usa junto con otros criterios, como AIC y BIC. Un valor más alto indica un mejor ajuste.
AIC (Criterio de Información de Akaike): Un criterio de selección de modelos que tiene en cuenta tanto la bondad de ajuste del modelo como la complejidad del modelo. Se utiliza para comparar modelos, siendo preferible un valor más bajo.
BIC (Criterio de Información Bayesiana): Similar al AIC, es otro criterio de selección de modelos que penaliza la complejidad del modelo. Al igual que el AIC, se utiliza para comparar modelos, y un valor más bajo es preferible.
deviance: Una medida de la falta de ajuste del modelo en comparación con un modelo nulo (modelo con solo el intercepto). Cuanto menor sea la deviance, mejor se ajusta el modelo a los datos.
df.residual: Los grados de libertad residuales, que representan el número de observaciones menos el número de coeficientes en el modelo.
nobs: El número total de observaciones en el modelo
# statistic (F)n <-30# Número total de observacionesk <-1# Número de variables predictoras# Suma de Cuadrados Total (SST)y_mean <-mean(mdl_lqsa_conv_vs_locura$model$Convivencia)# Suma de Cuadrados de la Regresión (SSR)y_pred <-predict(mdl_lqsa_conv_vs_locura)SSR <-sum((y_pred - y_mean)**2)# Suma de Cuadrados del Error (SSE)SSE <-sum((mdl_lqsa_conv_vs_locura$model$Convivencia - y_pred)**2)# Cálculo del Estadístico FF_statistic <- (SSR / k) / (SSE / (n - k -1))F_statistic
[1] 11.32222
Code
# p.valuep_v <-1-pf(F_statistic, k, n-k-1)p_v
[1] 0.002236027
Code
# ParámetrosF_value <-1.32#F_value <- F_statistick <-1n <-30df1 <- kdf2 <- n - k -1# Crear un data frame con valores de F y sus densidadesF_values <-seq(0, 15, length.out =1000)densities <-df(F_values, df1, df2)data_f <-data.frame(F_values, densities)# Gráfico de la distribución F con ggplot2ggplot(data_f, aes(x = F_values, y = densities)) +geom_line(color ="blue") +geom_area(data =subset(data_f, F_values >= F_value), fill ="lightblue", aes(y = densities)) +geom_vline(xintercept = F_value, linetype ="dashed", color ="red") +annotate("text", x = F_value +1, y =max(densities), label =paste("F =", F_value), hjust =1, vjust =2) +labs(title ="Distribución F con df1 = 1 y df2 = 28",x ="Valor F", y ="Densidad") +theme_minimal()
.fitted: Los valores ajustados (o predicciones) del modelo.
.resid: Los residuos del modelo. Un residuo es la diferencia entre el valor observado de la variable dependiente y el valor ajustado (predicho) por el modelo.
.hat: Los valores de apalancamiento son una medida de la influencia de cada observación en el ajuste del modelo. Cuanto mayor es el valor de .hat para una observación, mayor es su influencia. Estos valores son importantes en la identificación de valores atípicos.
.sigma: Una estimación de la desviación estándar de los residuos del modelo. En cada observación, .sigma excluye la observación en cuestión de la estimación. Es útil para entender la variabilidad de los residuos.
.cooksd: Las distancias de Cook son una medida de la influencia de cada observación en el conjunto de parámetros estimados del modelo. Una observación con una distancia de Cook alta puede ser un punto influyente, lo que significa que su eliminación del conjunto de datos podría cambiar significativamente la estimación de los coeficientes.
.std.resid: Los residuos estandarizados. Son los residuos divididos por su desviación estándar estimada. Son útiles para identificar valores atípicos y para verificar si los residuos se distribuyen uniformemente y cumplen con las suposiciones del modelo.
Visualizando el ajuste del modelo
Code
mdl_fz_vs_tam <-lm(fuerza ~ tamano, data = lotr)mdl_fz_vs_tam_sin_an <-lm(fuerza ~ tamano, data = lotr_sin_anillo)
Warning: package 'ggfortify' was built under R version 4.3.2
Code
autoplot(mdl_fz_vs_tam,which =1, ncol=1)
Code
autoplot(mdl_fz_vs_tam_sin_an,which =1, ncol=1)
Code
autoplot(mdl_fz_vs_tam_sin_an,which =2)
Code
autoplot(mdl_fz_vs_tam_sin_an)
Code
autoplot(mdl_fz_vs_tam)
¿Qué se calcula cuando se ajusta un modelo en R (Opcional):
Estimación de coeficientes: Coeficientes que minimizan la suma de los cuadrados de los residuos.
Cálculo del error Estándar de los Coeficientes: El error estándar de los coeficientes se calcula utilizando la matriz de varianza-covarianza de los coeficientes. Esta matriz se deriva de la varianza residual y de la matriz de diseño (X’X, donde X es la matriz de diseño que contiene las variables independientes). El error estándar de un coeficiente se calcula como la raíz cuadrada de la varianza de ese coeficiente. La fórmula general para el error estándar de un coeficiente (SE) es:
\(SE(\hat{\beta}_i) = \sqrt{Var(\hat{\beta}_i)}\)
Code
#Matriz de diseño: X_design <-model.matrix(mdl_lqsa_conv_vs_locura)residual_variance <-summary(mdl_lqsa_conv_vs_locura)$sigma**2# Matriz de varianza-covarianza de los coeficientesvar_cov_matrix <- residual_variance *solve(t(X_design) %*% X_design)# Mostrar la matriz de varianza-covarianzavar_cov_matrix