*Importar paquetes y definir folder de trabajo
library(pacman)
p_load("base64enc", "htmltools", "mime", "xfun", "prettydoc", "readr", "ggplot2", "tidyr", "plotly", "DT")
setwd("~/veranoPyE")
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)
*Cuantificar el grado de relación lineal (coef. de correlación)
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
*Estimación y representación de la recta de mínimos cuadrados
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
plot(grasas$peso, grasas$grasas, xlab="peso", ylab="Grasas" )
abline(regresion)
nuevas.edades <- data.frame(peso= seq(30,90))
predict(regresion,nuevas.edades)
## 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.90)
## 5 % 95 %
## (Intercept) 52.2166142 346.378389
## peso -0.4847468 3.729432
nuevas.edades <- data.frame(peso=seq(20,60))
#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, nuevas.edades, interval="confidence")
lines(nuevas.edades$peso, ic[, 2], lty =2, col="red")
lines(nuevas.edades$peso, ic[, 3], lty =2, col="red")
#Intervalo de predicción
ic <- predict(regresion, nuevas.edades, interval="prediction" )
lines(nuevas.edades$peso, ic[, 2], lty =2, col="red" )
lines(nuevas.edades$peso, ic[, 3], lty =2, col="red" )
anova(regresion)
## Analysis of Variance Table
##
## Response: grasas
## Df Sum Sq Mean Sq F value Pr(>F)
## peso 1 10232 10231.7 1.7413 0.2
## Residuals 23 135145 5875.9
residuos <- rstandard(regresion)
valores.ajustados <- fitted(regresion)
plot(valores.ajustados, residuos)
qqnorm(residuos)
qqline(residuos)
* Dado que los puntos están bastante alineados, la normalidad también parece aceptable.