# Estadisticas de relación de niños, segun la edad en meses, el peso en kilos y la talla en centimetros
Edad=c(1,3,6,9,12,15,18,24,36,48,60,72,84,96)
Peso= c(3.4,6.2,8,9.2,10.2,11.1,11.8,12.9,15.1,16.07,18.03,19.91,22,23.56)
Talla=  c(50.3,60,67,72,76,79,82.5,88,96.5,100.13,106.4,112.77,118.5,122.86)
Tabla=data.frame(cbind(Edad,Peso,Talla))
names(Tabla)
## [1] "Edad"  "Peso"  "Talla"
#Se busca demostrar que conforme aumenta la edad aumenta la talla

#regresion lineal simple para h0
pairs(Tabla)

#tabla de correlacion 
cor(Tabla)
##            Edad      Peso     Talla
## Edad  1.0000000 0.9703357 0.9601080
## Peso  0.9703357 1.0000000 0.9977875
## Talla 0.9601080 0.9977875 1.0000000
#recta de minimos 
#cuadrados 
regresion = lm(Talla ~ Edad, data=Tabla)
summary(regresion)
## 
## Call:
## lm(formula = Talla ~ Edad, data = Tabla)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -15.225  -2.406   1.251   3.864   7.547 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 64.85529    2.60751   24.87 1.08e-11 ***
## Edad         0.66939    0.05628   11.89 5.34e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 6.495 on 12 degrees of freedom
## Multiple R-squared:  0.9218, Adjusted R-squared:  0.9153 
## F-statistic: 141.5 on 1 and 12 DF,  p-value: 5.338e-08
#Grafico del ajuste lineal
plot (Tabla$Edad, Tabla$Talla, xlab="Edad", ylab = "Talla")
abline(regresion)

#calculo de predicciones
nuevas.edades = data.frame(Edad=seq(6,42))
predict(regresion, nuevas.edades)
##        1        2        3        4        5        6        7        8 
## 68.87165 69.54104 70.21043 70.87983 71.54922 72.21861 72.88800 73.55739 
##        9       10       11       12       13       14       15       16 
## 74.22679 74.89618 75.56557 76.23496 76.90436 77.57375 78.24314 78.91253 
##       17       18       19       20       21       22       23       24 
## 79.58193 80.25132 80.92071 81.59010 82.25949 82.92889 83.59828 84.26767 
##       25       26       27       28       29       30       31       32 
## 84.93706 85.60646 86.27585 86.94524 87.61463 88.28403 88.95342 89.62281 
##       33       34       35       36       37 
## 90.29220 90.96159 91.63099 92.30038 92.96977
#intervalo de confianza
confint(regresion)
##                 2.5 %     97.5 %
## (Intercept) 59.174022 70.5365678
## Edad         0.546769  0.7920156
# Intervalo de confianza: Devuelve un intervalo para el valor promedio de que todos los niños tengan una talla especifico, supóngase lstat=10.
predict(object = regresion, newdata = data.frame(lstat = c(10)),
        interval = "confidence", level = 0.95)
## Warning: 'newdata' had 1 row but variables found have 14 rows
##          fit       lwr       upr
## 1   65.52469  59.93432  71.11506
## 2   66.86347  61.45115  72.27579
## 3   68.87165  63.71605  74.02725
## 4   70.87983  65.96680  75.79285
## 5   72.88800  68.20120  77.57481
## 6   74.89618  70.41677  79.37559
## 7   76.90436  72.61079  81.19792
## 8   80.92071  76.92247  84.91895
## 9   88.95342  85.16710  92.73974
## 10  96.98613  92.86096 101.11129
## 11 105.01883 100.11697 109.92070
## 12 113.05154 107.10427 118.99882
## 13 121.08425 113.93985 128.22864
## 14 129.11696 120.68812 137.54579
attach(regresion)
plot(x = Edad, y = Talla, main = "Edad vs Talla", pch = 20, col = "grey30")
abline(regresion, lwd = 3, col = "red")

# Una de las mejores formas de confirmar que las condiciones necesarias para un modelo de regresión lineal simple por mínimos cuadrados se cumplen es mediante el estudio de los residuos del modelo.
par(mfrow = c(1,2))
plot(regresion)

plot(hatvalues(regresion), main = "Medición de leverage", pch = 20)
# Se añade una línea en el threshold de influencia acorde a la regla
# 2.5x((p+1)/n)
abline(h = 2.5*((dim(regresion$talla)[2]-1 + 1)/dim(regresion$talla)[1]),
       col = "red")

#Tal como era de suponerse, conforme aumenta la edad, msin importar cuantos meses sean, la talla aumenta proporcionalmente.