# Del libro R-By-Example by Jim Albert and Maria Rizzo
# Capitulo 7 Regresion
setwd("C:\\Users\\Luis\\Documents\\R-by-Example")
plot(cars)

names(cars)
## [1] "speed" "dist"
# Para ajustar un modelo de linea recta
# dist = Ć0+Ć1 speed+e,
# necesitamos estimados del y-intercept Ć0 y
# la pendiente Ć1 de la linea.
# La funcion lm
model <- lm(cars$dist~cars$speed)
model
##
## Call:
## lm(formula = cars$dist ~ cars$speed)
##
## Coefficients:
## (Intercept) cars$speed
## -17.579 3.932
coef(model)
## (Intercept) cars$speed
## -17.579095 3.932409
summary(model)
##
## Call:
## lm(formula = cars$dist ~ cars$speed)
##
## Residuals:
## Min 1Q Median 3Q Max
## -29.069 -9.525 -2.272 9.215 43.201
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -17.5791 6.7584 -2.601 0.0123 *
## cars$speed 3.9324 0.4155 9.464 1.49e-12 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 15.38 on 48 degrees of freedom
## Multiple R-squared: 0.6511, Adjusted R-squared: 0.6438
## F-statistic: 89.57 on 1 and 48 DF, p-value: 1.49e-12
plot(residuals(model))
abline(h=-2)
abline(model)

plot(cars,main="dist=2.909 x speed",
xlim=c(0,25))
# linea con intercepto en cero,pendiente=2.909
abline(0,2.909)

plot(model,which = 1,add.smooth = FALSE)

plot(model,which = 1,add.smooth = TRUE)

# un modelo cuadratico podria ser considerado
# para esta data
# 7.3 Analisis de regresion para la data
# con dos variables independientes
setwd("C:\\Users\\Luis\\Documents\\R-by-Example\\R-by-Example\\Rx-data")
arboles <- read.table("C:\\Users\\Luis\\Documents\\R-by-Example\\R-by-Example\\Rx-data\\cherry.txt",
header=TRUE)
names(arboles)
## [1] "Diam" "Height" "Volume"
pairs(arboles)

cor(arboles)
## Diam Height Volume
## Diam 1.0000000 0.5192801 0.9671194
## Height 0.5192801 1.0000000 0.5982497
## Volume 0.9671194 0.5982497 1.0000000
# La correlacion entre diametro y volumen
# es 0.97, indicando fuerte y positiva
# relacion lineal entre
# Diam and Volume. La correlacion entre
# height and volume is 0.60, indica
# una asociacion moderada entre Height and Volume.
# primero, usaremos un modelo de regresion
# lineal con diameter como variable independiente
# Y = Ć0+Ć1X1+e,
modelo.arbol <- lm(formula = arboles$Volume~arboles$Diam,
data = arboles)
plot(arboles$Diam,arboles$Volume)
abline(modelo.arbol$coefficients)

modelo.arbol
##
## Call:
## lm(formula = arboles$Volume ~ arboles$Diam, data = arboles)
##
## Coefficients:
## (Intercept) arboles$Diam
## -36.943 5.066
summary(modelo.arbol)
##
## Call:
## lm(formula = arboles$Volume ~ arboles$Diam, data = arboles)
##
## Residuals:
## Min 1Q Median 3Q Max
## -8.065 -3.107 0.152 3.495 9.587
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -36.9435 3.3651 -10.98 7.62e-12 ***
## arboles$Diam 5.0659 0.2474 20.48 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4.252 on 29 degrees of freedom
## Multiple R-squared: 0.9353, Adjusted R-squared: 0.9331
## F-statistic: 419.4 on 1 and 29 DF, p-value: < 2.2e-16
plot(modelo.arbol)




# Para predecir el volumen de arboles nuevos,
# podemos usar el metodo predict. Guardamos
# # el valor del diametro para el nuevo arbol(es)
# en una dataframe llamada Diam del
# # la formula del modelo original especificado
# en la llamada de funcion lm . Por ejemplo, la prediccion
# # del volumen para un nuevo arbol con un diametero de 16
# pulgadas es obtenido:
new <- data.frame(Diam=16)# da error
predict(modelo.arbol,new)# da error
## Warning: 'newdata' had 1 row but variables found have 31 rows
## 1 2 3 4 5 6 7
## 5.103149 6.622906 7.636077 16.248033 17.261205 17.767790 18.780962
## 8 9 10 11 12 13 14
## 18.780962 19.287547 19.794133 20.300718 20.807304 20.807304 22.327061
## 15 16 17 18 19 20 21
## 23.846818 28.406089 28.406089 30.432431 32.458774 32.965360 33.978531
## 22 23 24 25 26 27 28
## 34.991702 36.511459 44.110244 45.630001 50.695857 51.709028 53.735371
## 29 30 31
## 54.241956 54.241956 67.413183
# 7.3.2 Modelo de regresion multiple
# Y = Ć0+Ć1X1+Ć2X2+e,
# dos variables independientes
modelo.arbol1 <- lm(Volume~Diam+Height,data=arboles)
modelo.arbol1
##
## Call:
## lm(formula = Volume ~ Diam + Height, data = arboles)
##
## Coefficients:
## (Intercept) Diam Height
## -57.9877 4.7082 0.3393
summary(modelo.arbol1)
##
## Call:
## lm(formula = Volume ~ Diam + Height, data = arboles)
##
## Residuals:
## Min 1Q Median 3Q Max
## -6.4065 -2.6493 -0.2876 2.2003 8.4847
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -57.9877 8.6382 -6.713 2.75e-07 ***
## Diam 4.7082 0.2643 17.816 < 2e-16 ***
## Height 0.3393 0.1302 2.607 0.0145 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.882 on 28 degrees of freedom
## Multiple R-squared: 0.948, Adjusted R-squared: 0.9442
## F-statistic: 255 on 2 and 28 DF, p-value: < 2.2e-16
plot(modelo.arbol1)




# modelo.arbol1 tambien muestra problemas
# cuando revisamos los graficos de los residuales
# Finalmente, usaremos un modelo
# que incluye tambien el cuadrado del diameter
# como variable independiente
modelo.arbol2 <- lm(arboles$Volume~arboles$Diam+
I(arboles$Diam^2)+arboles$Height,data = arboles)
modelo.arbol2
##
## Call:
## lm(formula = arboles$Volume ~ arboles$Diam + I(arboles$Diam^2) +
## arboles$Height, data = arboles)
##
## Coefficients:
## (Intercept) arboles$Diam I(arboles$Diam^2)
## -9.9204 -2.8851 0.2686
## arboles$Height
## 0.3764
plot(modelo.arbol2)




# El Modelo (modelo.arbol2), el grafico de residuals vs fits
# no tiene la forma de āUā
# aparente en los modelos anteriores
# Los residuales estan aproximadamente
# centrados en 0 con varianza constante.