Los Modelos Lineales Generalizados (GLM) son una extensión de los modelos lineales clásicos que permiten modelar variables respuesta que no siguen una distribución normal.
Fueron introducidos por Nelder y Wedderburn (1972) y son ampliamente utilizados en estadística y ciencia de datos.
Un GLM está compuesto por tres elementos fundamentales:
La variable respuesta ( Y ) sigue una distribución de la familia exponencial, como:
Se define como:
[ = X]
donde:
Relaciona la media de la variable respuesta con el predictor lineal:
[ g() = ]
Algunos ejemplos de funciones de enlace:
Los GLM permiten modelar una amplia variedad de datos y son fundamentales en análisis estadístico moderno.
data(mtcars)
head(mtcars)
modelo <- lm(mpg ~ wt + hp + cyl, data = mtcars)
summary(modelo)
predicciones <- predict(modelo)
head(predicciones)
plot(mtcars$mpg, predicciones, main = “Valores reales vs predichos”, xlab = “mpg real”, ylab = “mpg predicho”, col = “blue”, pch = 19)
abline(0,1, col = “red”, lwd = 2)
# Ejemplo de regresión lineal múltiple en R
# Usaremos el dataset mtcars (incluido en R)
data(mtcars)
# Ver las primeras filas
head(mtcars)
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
# Modelo: predecir consumo (mpg) usando peso (wt), caballos de fuerza (hp) y cilindros (cyl)
modelo <- lm(mpg ~ wt + hp + cyl, data = mtcars)
# Resumen del modelo
summary(modelo)
##
## Call:
## lm(formula = mpg ~ wt + hp + cyl, data = mtcars)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.9290 -1.5598 -0.5311 1.1850 5.8986
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 38.75179 1.78686 21.687 < 2e-16 ***
## wt -3.16697 0.74058 -4.276 0.000199 ***
## hp -0.01804 0.01188 -1.519 0.140015
## cyl -0.94162 0.55092 -1.709 0.098480 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.512 on 28 degrees of freedom
## Multiple R-squared: 0.8431, Adjusted R-squared: 0.8263
## F-statistic: 50.17 on 3 and 28 DF, p-value: 2.184e-11
# Predicciones
predicciones <- predict(modelo)
# Ver primeras predicciones
head(predicciones)
## Mazda RX4 Mazda RX4 Wag Datsun 710 Hornet 4 Drive
## 22.82043 22.01285 25.96040 20.93608
## Hornet Sportabout Valiant
## 17.16780 20.25036
# Gráfico de valores reales vs predichos
plot(mtcars$mpg, predicciones,
main = "Valores reales vs predichos",
xlab = "mpg real",
ylab = "mpg predicho",
col = "blue", pch = 19)
# Línea de referencia
abline(0,1, col = "red", lwd = 2)
#id="supuestos_lm"
# Instalar paquetes si no los tienes
# install.packages("lmtest")
# install.packages("car")
# install.packages("nortest")
# Cargar librerías
library(lmtest)
## Cargando paquete requerido: zoo
##
## Adjuntando el paquete: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(car)
## Cargando paquete requerido: carData
library(nortest)
# Datos
data(mtcars)
# Ajustar modelo
modelo <- lm(mpg ~ wt + hp + cyl, data = mtcars)
# 1. Normalidad de los residuos
residuos <- residuals(modelo)
shapiro.test(residuos)
##
## Shapiro-Wilk normality test
##
## data: residuos
## W = 0.93455, p-value = 0.05252
# 2. Homocedasticidad (Breusch-Pagan)
bptest(modelo)
##
## studentized Breusch-Pagan test
##
## data: modelo
## BP = 2.9351, df = 3, p-value = 0.4017
# 3. Independencia de errores (Durbin-Watson)
dwtest(modelo)
##
## Durbin-Watson test
##
## data: modelo
## DW = 1.6441, p-value = 0.1002
## alternative hypothesis: true autocorrelation is greater than 0
# 4. Multicolinealidad (VIF)
vif(modelo)
## wt hp cyl
## 2.580486 3.258481 4.757456
# 5. Gráficos de diagnóstico
par(mfrow = c(2,2))
plot(modelo)
```{r} id=“logistic_model”} # Cargar datos data(mtcars)
mtcars\(am <- as.factor(mtcars\)am)
modelo_logit <- glm(am ~ wt + hp + mpg, data = mtcars, family = binomial(link = “logit”))
summary(modelo_logit)
probabilidades <- predict(modelo_logit, type = “response”)
head(probabilidades)
pred_clase <- ifelse(probabilidades > 0.5, 1, 0)
table(Predicho = pred_clase, Real = mtcars$am)
``` r
# install.packages("faraway")
library(faraway)
## Warning: package 'faraway' was built under R version 4.5.3
##
## Adjuntando el paquete: 'faraway'
## The following objects are masked from 'package:car':
##
## logit, vif
data(mtcars)
mtcars$am <- as.factor(mtcars$am)
modelo_logit <- glm(am ~ wt + hp + mpg,
data = mtcars,
family = binomial)
# Residuos de devianza
residuos_dev <- residuals(modelo_logit, type = "deviance")
# Envelope (sin xlab ni ylab para evitar conflicto)
halfnorm(residuos_dev,
main = "Envelope de residuos (Half-Normal Plot)")
# Caminata aleatoria
z<-rnorm(1000,0,1)
plot(cumsum(z),type="l",ylim = c(-100,100))
#Caminata aleatoria
for (i in 1:100) {
z<-rnorm(1000,0,1)
lines(cumsum(z),type="l",col=i)
}
# Browniano Geométrica
z<-rnorm(1000,0,0.01)
t<-seq(0,1,length=1000)
plot(t,exp(t+cumsum(z)),type="l",ylim = c(-1,5))
#Caminata aleatoria
for (i in 1:100) {
z<-rnorm(1000,0,0.01)
t<-seq(0,1,length=1000)
lines(t,exp(t+cumsum(z)),type="l",col=i)
}