#Construcción de la Base de Datos
y = c(35, 63, 103, 121.8, 163.8, 373.0)
x1 = c(0.00,4.00,10.00,10.72,16.00,21.00)
x2 = c(13.0, 9.0, 20.0, 10.0, 17.0, 19.0)
x3= c(220,120,120,120,120,118)
datos=data.frame(y,x1,x2,x3)
pairs(ChickWeight)# diagramas de dispersion
summary(ChickWeight)
## weight Time Chick Diet
## Min. : 35.0 Min. : 0.00 13 : 12 1:220
## 1st Qu.: 63.0 1st Qu.: 4.00 9 : 12 2:120
## Median :103.0 Median :10.00 20 : 12 3:120
## Mean :121.8 Mean :10.72 10 : 12 4:118
## 3rd Qu.:163.8 3rd Qu.:16.00 17 : 12
## Max. :373.0 Max. :21.00 19 : 12
## (Other):506
###• El promedio de datos para la variable peso es de 121.8 • El promedio de datos para la variable tiempo es de 10.27
cor(datos) # Correlacion
## y x1 x2 x3
## y 1.0000000 0.9051452 0.5519687 -0.4542933
## x1 0.9051452 1.0000000 0.6088234 -0.6691901
## x2 0.5519687 0.6088234 1.0000000 -0.1829205
## x3 -0.4542933 -0.6691901 -0.1829205 1.0000000
## y x1 x2 x3
Y con y correlaion perfecta • Y con X1 correlacion buena de 0.9,van variando conjuntamente, indicando que el peso del polluelo cambia con el tiempo • Y con x2 correlacion de 0.55 no presenta buena correlación indicando que el peso del pollo no depende del polluelo • Y con X3 correkacion de -0.45
modelo=lm(y~x1+x2+x3,datos=data.frame)
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
## extra argument 'datos' will be disregarded
summary(modelo)
##
## Call:
## lm(formula = y ~ x1 + x2 + x3, datos = data.frame)
##
## Residuals:
## 1 2 3 4 5 6
## 1.165 36.867 -3.834 -27.799 -64.648 58.250
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -136.3429 186.1096 -0.733 0.540
## x1 18.8078 7.3456 2.560 0.125
## x2 -2.9223 9.0894 -0.322 0.778
## x3 0.9462 1.1068 0.855 0.483
##
## Residual standard error: 69.72 on 2 degrees of freedom
## Multiple R-squared: 0.8677, Adjusted R-squared: 0.6691
## F-statistic: 4.371 on 3 and 2 DF, p-value: 0.1918
##
## Call:
## lm(formula = y ~ x1, y ~ x2, y ~ x3)
• El coeficiente de -2.92 me indica que no hay una relación directa entre el tipo de polluelo y el peso y una hipótesis superior a 0.5 indica que no es confiable
modelo <- lm(y ~ x1 + x2 + x3, data = datos)
res <- residuals(modelo)
res_std <- rstandard(modelo)
plot(modelo$fitted.values, res,
xlab = "Valores ajustados",
ylab = "Residuales",
main = "Residuales vs Ajustados")
abline(h = 0, col = "red")
###✔ Los residuales no están distribuidos aleatoriamente ✔ Existe heterocedasticidad ✔ Hay puntos muy influyentes que distorsionan el modelo ✔ El supuesto de linealidad está en duda ✔ El modelo de regresión no es adecuado en su forma actual
hist(res, main = "Histograma de residuales")
qqnorm(res)
qqline(res, col = "red")
Esto se ve porque:
Los puntos de los extremos (cuantiles bajos y altos) se alejan bastante de la línea. La línea roja sube de manera suave, pero los puntos están desplazados hacia arriba o abajo.
Indica falta de normalidad.
shapiro.test(res)
##
## Shapiro-Wilk normality test
##
## data: res
## W = 0.98025, p-value = 0.9528
plot(modelo, which = 1) # Residuales vs ajustados
plot(modelo, which = 2) # QQ plot
plot(modelo, which = 3) # Escala-local (homocedasticidad)
plot(modelo, which = 5) # Cocientes de apalancamiento
## Warning in sqrt(crit * p * (1 - hh)/hh): Se han producido NaNs
## Warning in sqrt(crit * p * (1 - hh)/hh): Se han producido NaNs
plot(modelo, which = 4)
###El Q‑Q plot muestra que los residuales se desvían claramente de la normalidad debido a un valor extremadamente influyente; por lo tanto, el supuesto de normalidad no se cumple y el modelo lineal no es confiable.
cooks.distance(modelo)
## 1 2 3 4 5 6
## 3.578011e+03 4.193598e-01 6.121791e-02 8.245977e-02 1.174208e-01 9.315763e-01
Cook’s Distance > 1 → observación influyente
La observación 1 tiene Cook’s D ≈ 3578, lo cual es absurdamente alto y confirma que:
El modelo no es confiable Los coeficientes están sesgados por ese valor Las predicciones serán inestables Los intervalos de confianza enormes que viste son consecuencia de este problema
modelo <- lm(y ~ x1 + x2 + x3, data = datos)
nuevo <- data.frame(
x1 = 15,
x2 = 10,
x3 = 120
)
predict(modelo, newdata = nuevo, interval = "confidence")
## fit lwr upr
## 1 230.0965 -62.07223 522.2653
###lwr = –62.07223 Este es el límite inferior del intervalo de confianza al 95%. Significa que, con 95% de confianza, el valor esperado de la media de y podría ser tan bajo como −62.07.
🔹 upr = 522.2653 Este es el límite superior del intervalo de confianza al 95%. Con 95% de confianza, el valor esperado de la media de y podría ser tan alto como 522.27.