library(pacman)
p_load("base64enc", "htmltools", "mime", "xfun", "prettydoc", "readr", "ggplot2", "tidyr", "plotly", "DT")
setwd("~/PROBABILIDAD Y ESTADISTICA (R Studio)")
grasas <- read.table("http://verso.mat.uam.es/~joser.berrendero/datos/EdadPesoGrasas.txt", header= TRUE)
names(grasas)
## [1] "peso" "edad" "grasas"
Se tienen datos de 25 personas de peso, edad y grasas.
datatable(grasas)
pairs(grasas)
cor(grasas)
## peso edad grasas
## peso 1.0000000 0.2400133 0.2652935
## edad 0.2400133 1.0000000 0.8373534
## grasas 0.2652935 0.8373534 1.0000000
regresion <- lm(grasas ~ peso, data=grasas )
summary(regresion)
##
## Call:
## lm(formula = grasas ~ peso, data = grasas)
##
## Residuals:
## Min 1Q Median 3Q Max
## -127.729 -53.686 -9.239 46.537 128.404
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 199.298 85.818 2.322 0.0294 *
## peso 1.622 1.229 1.320 0.2000
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 76.65 on 23 degrees of freedom
## Multiple R-squared: 0.07038, Adjusted R-squared: 0.02996
## F-statistic: 1.741 on 1 and 23 DF, p-value: 0.2
Los parámetros de la ecuación de la recta de mínimos cuadrados que relaciona la cantidad de grasas en la sangre en función del peso vienen dados por la columna ´Estimate´ de la tabla ´Coefficients´ de la salida anterior. Por lo tanto, en este ejemplo la ecuación de la recta de mínimos cuadrados es:
\(y=199.298+1.622x\)
Los siguientes comandos representan la nube de puntos (comando plot) y añaden la representación gráfica de la recta de mínimos cuadrados (comando abline aplicado al objeto generado por lm):
plot(grasas$edad, grasas$grasas, xlab="Peso", ylab="Grasas" )
abline(regresion)
nuevos.pesos <- data.frame(peso= seq(30,90))
predict(regresion,nuevos.pesos)
## 1 2 3 4 5 6 7 8
## 247.9678 249.5901 251.2125 252.8348 254.4572 256.0795 257.7018 259.3242
## 9 10 11 12 13 14 15 16
## 260.9465 262.5689 264.1912 265.8136 267.4359 269.0582 270.6806 272.3029
## 17 18 19 20 21 22 23 24
## 273.9253 275.5476 277.1700 278.7923 280.4146 282.0370 283.6593 285.2817
## 25 26 27 28 29 30 31 32
## 286.9040 288.5264 290.1487 291.7710 293.3934 295.0157 296.6381 298.2604
## 33 34 35 36 37 38 39 40
## 299.8828 301.5051 303.1274 304.7498 306.3721 307.9945 309.6168 311.2391
## 41 42 43 44 45 46 47 48
## 312.8615 314.4838 316.1062 317.7285 319.3509 320.9732 322.5955 324.2179
## 49 50 51 52 53 54 55 56
## 325.8402 327.4626 329.0849 330.7073 332.3296 333.9519 335.5743 337.1966
## 57 58 59 60 61
## 338.8190 340.4413 342.0637 343.6860 345.3083
confint(regresion)
## 2.5 % 97.5 %
## (Intercept) 21.7696109 376.825392
## peso -0.9209324 4.165618
confint(regresion, level = 0.05)
## 47.5 % 52.5 %
## (Intercept) 193.857106 204.737897
## peso 1.544403 1.700282
nuevos.pesos <- data.frame(peso=seq(55,89))
#Gráfica de disperión y recta
plot(grasas$peso, grasas$grasas, xlab="peso", ylab="Grasas")
abline(regresion)
#Intervalos de confianza de la respuesta media
#ic es una matriz de tres columnas: la primera es la predicción, las otras son los extremos del intervalo
ic <- predict(regresion, nuevos.pesos, interval="confidence" )
lines(nuevos.pesos$peso, ic[, 2], lty =2, col="Blue" )
lines(nuevos.pesos$peso, ic[, 3], lty =2, col="Blue" )
#Intervalo de predicción
ic <- predict(regresion, nuevos.pesos, interval="prediction" )
lines(nuevos.pesos$peso, ic[, 2], lty =2, col="Blue" )
lines(nuevos.pesos$peso, ic[, 3], lty =2, col="Blue" )
anova(regresion)
Los valores ajustados y^i y los residuos ei=y^i−yi se pueden obtener con los comandos fitted y residuals respectivamente. Los residuos estandarizados se obtienen con rstandard. Por ejemplo, el siguiente código obtiene una representación de los residuos estandarizados frente a los valores ajustados, que resulta útil al llevar a cabo el diagnóstico del modelo:
residuos <- rstandard(regresion)
valores.ajustados <- fitted(regresion)
plot(valores.ajustados, residuos)
No se observa ningún patrón especial, por lo que tanto la homocedasticidad como la linealidad resultan hipótesis razonables.
La hipótesis de normalidad se suele comprobar mediante un QQ plot de los residuos. El siguiente código sirve para obtenerlo:
qqnorm(residuos)
qqline(residuos)
#xfun::embed_file("U4A2.rmd")#