Se crea un ejemplo aleatorio usando una función para después analizar los supuestos de este escenario.
La forma de construir este escenario dará pie a que todos los supuestos se cumplan como se verá a continuación:
gen_dat_multiple <- function(n) {
varianza <- 16 # Varianza del error
# Generar 3 variables predictoras
x1 <- runif(n=n, min=-5, max=6)
x2 <- runif(n=n, min=-8, max=3)
x3 <- runif(n=n, min=-1, max=10)
# Crear media con relación lineal múltiple
media <- 4 - 2*x1 + 0.5*x2 + 1.5*x3
# Generar variable respuesta
y <- rnorm(n=n, mean=media, sd=sqrt(varianza))
# Crear data frame
marco_datos <- data.frame(y=y, x1=x1, x2=x2, x3=x3)
return(marco_datos)
}
# Generar datos
datos_multi <- gen_dat_multiple(n=100)
summary(datos_multi)
## y x1 x2 x3
## Min. :-18.467 Min. :-4.9786 Min. :-7.8347 Min. :-0.7848
## 1st Qu.: 1.485 1st Qu.:-2.4772 1st Qu.:-4.9449 1st Qu.: 1.5455
## Median : 7.703 Median : 0.1258 Median :-2.9936 Median : 4.0374
## Mean : 8.010 Mean : 0.4241 Mean :-2.7109 Mean : 4.3767
## 3rd Qu.: 14.809 3rd Qu.: 3.6385 3rd Qu.:-0.5025 3rd Qu.: 7.6723
## Max. : 31.569 Max. : 5.9148 Max. : 2.7988 Max. : 9.9434
#Mostrar Datos
chart.Correlation(datos_multi, histogram = TRUE)
mat_cor <- cor(datos_multi)
corrplot.mixed(mat_cor)
# Ajustar modelo lineal múltiple
mod_multi <- lm(y ~ x1 + x2 + x3, data=datos_multi)
summary(mod_multi)
##
## Call:
## lm(formula = y ~ x1 + x2 + x3, data = datos_multi)
##
## Residuals:
## Min 1Q Median 3Q Max
## -11.4946 -2.3324 -0.1246 2.6832 10.7244
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.1394 0.7993 3.928 0.000161 ***
## x1 -1.9444 0.1245 -15.622 < 2e-16 ***
## x2 0.6890 0.1382 4.986 2.74e-06 ***
## x3 1.7280 0.1315 13.140 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4.224 on 96 degrees of freedom
## Multiple R-squared: 0.8159, Adjusted R-squared: 0.8102
## F-statistic: 141.8 on 3 and 96 DF, p-value: < 2.2e-16
Analicemos los sigueintes gráficos:
mean(mod_multi$residuals)
## [1] 2.454092e-17
t.test(mod_multi$residuals)$p.value
## [1] 1
Con un p-valor >0.05 se concluye que los residuos tienen media igual a 0.
shapiro.test(mod_multi$residuals)$p.value
## [1] 0.700143
Con un p-valor >0.05 se concluye que los residuos siguen una distribución normal.
Como se pudo observar, todos los supuestos se cumplieron con éxito, esto gracias a la forma en que se creó la base datos.
Se crea un ejemplo aleatorio usando una función para después analizar los supuestos de este escenario.
La forma de construir este escenario dará pie a que algunos de los supuestos no se cumplan como se verá a continuación:
gen_dat_multiple <- function(n) {
varianza <- 16 # Varianza del error
# Generar 3 variables predictoras
x1 <- runif(n=n, min=-5, max=6)
x2 <- runif(n=n, min=-8, max=3)
x3 <- runif(n=n, min=-1, max=10)
# Crear media con relación lineal múltiple
media <- 4 - 2*x1 + 0.5*x2 + 1.5*x3^2
# Generar variable respuesta
y <- rnorm(n=n, mean=media, sd=sqrt(varianza))
# Crear data frame
marco_datos <- data.frame(y=y, x1=x1, x2=x2, x3=x3)
return(marco_datos)
}
# Generar datos
datos_multi <- gen_dat_multiple(n=100)
summary(datos_multi)
## y x1 x2 x3
## Min. : -9.932 Min. :-4.95682 Min. :-7.939 Min. :-0.7543
## 1st Qu.: 10.202 1st Qu.:-2.86794 1st Qu.:-5.535 1st Qu.: 1.5354
## Median : 28.272 Median : 0.30780 Median :-2.981 Median : 4.1883
## Mean : 44.806 Mean : 0.08926 Mean :-2.883 Mean : 4.3366
## 3rd Qu.: 81.224 3rd Qu.: 2.85515 3rd Qu.:-0.129 3rd Qu.: 7.0130
## Max. :152.536 Max. : 5.98878 Max. : 2.675 Max. : 9.8396
#Mostrar Datos
chart.Correlation(datos_multi, histogram = TRUE)
mat_cor <- cor(datos_multi)
corrplot.mixed(mat_cor)
# Ajustar modelo lineal múltiple
mod_multi2 <- lm(y ~ x1 + x2 + x3, data=datos_multi)
summary(mod_multi)
##
## Call:
## lm(formula = y ~ x1 + x2 + x3, data = datos_multi)
##
## Residuals:
## Min 1Q Median 3Q Max
## -11.4946 -2.3324 -0.1246 2.6832 10.7244
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.1394 0.7993 3.928 0.000161 ***
## x1 -1.9444 0.1245 -15.622 < 2e-16 ***
## x2 0.6890 0.1382 4.986 2.74e-06 ***
## x3 1.7280 0.1315 13.140 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4.224 on 96 degrees of freedom
## Multiple R-squared: 0.8159, Adjusted R-squared: 0.8102
## F-statistic: 141.8 on 3 and 96 DF, p-value: < 2.2e-16
Analicemos los sigueintes gráficos:
plot(mod_multi2)
mean(mod_multi2$residuals)
## [1] -5.035035e-16
t.test(mod_multi2$residuals)$p.value
## [1] 1
Con un p-valor >0.05 se concluye que los residuos tienen media igual a 0.
shapiro.test(mod_multi2$residuals)$p.value
## [1] 0.0001056259
Con un p-valor <0.05 se concluye que los residuos no siguen una distribución normal.
El cambio en la fórmula para definir el valor esperado de la variable
respuesta ocasionó los sigueintes problemas:
1) Los residuos tuvieron un patrón asociado a una parábola, cuando
deberían no seguir ningún patrón.
2) Los residuos dejaron de seguir una distribución normal.
3) Los residuos no tuvieron varianza constante, esto es
heterocedasticidad
El único supuesto que se cumplió fue que la media de los residuos fue
igual a 0.