#Solución base de datos BOSQUE (pag 187 en papel y 201 del pdf

Anuncio
#Solución base de datos BOSQUE (pag 187 en papel y 201 del pdf del
libro)
#Todo modelo de Regresión Lineal Múltiple tiene una variable respuesta (y) y
#dos o más de dos variables explicativas (x1, x2, x3, …). La formulación en
#este caso del modelo sería:
y  β0  β1x1  β2 x2  ...  βp1xp1  ε
#Las hipótesis del modelo son (sobre los errores): normalidad, incorrelación,
#homocedasticidad (varianza cte) y media cero.
#Estudiemos el caso de BOSQUE:
#Los pasos fundamentales son los mismos que con el modelo de RLS:
1.
2.
3.
4.
Análisis preliminar (Gráfico-numérico)
Ajuste del modelo
Bondad del ajuste
Diagnóstico del modelo
#Empezamos:
#Leemos los datos
DBH <- c(10.2,13.72,15.43,14.37,15,15.02,15.12,15.24,15.24,15.28,
13.78,15.67,15.67,15.98,16.5,16.87,17.26,17.28,17.87,19.13)
D16 <-c(9.3,12.1,13.3,13.4,14.2,12.8,14,13.5,14,13.8,13.6,14,
13.7,13.9,14.9,14.9,14.3,14.3,16.9,17.3)
HT <-c(89,90.07,95.08,98.03,99,91.05,105.6,100.8,94,93.09,89,
102,99,89.02,95.09,95.02,91.02,98.06,96.01,101)
VOL <-c(25.93,45.87,56.2,58.6,63.36,46.35,68.99,62.91,58.13,
59.79,56.2,66.16,62.18,57.01,65.62,65.03,66.74,73.38,82.87,95.71)
#Creamos una base de datos con las cuatro variables:
bosque<-data.frame(VOL=VOL,DBH=DBH,D16=D16,HT=HT)
#Análisis preliminar
#Gráfico
#Al haber definido la base de datos, podemos hacer un plot “de golpe” de todas
#las variables
plot(bosque)
#En la primera fila de gráficos, vemos cómo se observan relaciones lineales
#entre VOL y el resto de variables explicativas (DBH, D16, HT). Las relaciones
#son crecientes en todos los casos y más fuertes para el caso de los diámetros
#(DBH y D16).
#Numérico
#Correlaciones simples:
cor(bosque)
#
VOL
DBH
D16
HT
#VOL 1.0000000 0.9078088 0.9530963 0.6010862
#Confirman lo visto en los gráficos anteriores
#Correlaciones parciales
#Para calcular las correlaciones parciales necesitamos descargar el paquete de
#R llamado Rcmdr. Para ello debes ir al menú Paquetes  Instalar paquete(s).
Se #abrirá entonces una ventana. En ella busca y selecciona “Spain (Madrid)”
 #OK. Luego se abrirá una nueva ventana. En ella aparecen, por orden
#alfabético, todos los paquetes que existen actualmente. Busca el que se llama
#“Rcmdr” (encontrarás otros paquetes que comenzarán de la misma forma,
#pero SÓLO nos interesa el que se llama exactamente Rcmdr). Lo seleccionas
#y pinchas sobre OK. Tardará unos segundos en instalarse todo. Después
#escribes en R:
library(Rcmdr)
#Al darle al Intro se abrirá una nueva VENTANA. Debes cerrarla y seguir
#trabajando en R como habitualmente hacemos. Así que sigue escribiendo lo
#siguiente:
partial.cor(bosque)
#
VOL
DBH
D16
HT
#VOL 0.0000000 0.3683119 0.7627127 0.7285511
#Detectamos entonces que la variable más importante a la hora de explicar
#VOL es D16, seguida de HT. DBH no es tan importante como parecía
#inicialmente al ver las correlaciones simples. La variable explicativa menos
#importante es DBH.
#Ajuste del modelo
fit=lm(VOL~DBH+D16+HT)
sfit=summary(fit)
sfit
#Call:
#lm(formula = VOL ~ DBH + D16 + HT)
#Residuals:
#
Min
1Q Median
3Q
Max
#-5.2548 -1.6765 -0.1277 1.5232 4.9990
#Coefficients:
#
Estimate Std. Error t value Pr(>|t|)
#(Intercept) -108.5758
14.1422 -7.677 9.42e-07 ***
#DBH
1.6258
1.0259 1.585 0.132611
#D16
5.6714
1.2023 4.717 0.000232 ***
#HT
0.6938
0.1631 4.254 0.000606 ***
#--#Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#Residual standard error: 3.095 on 16 degrees of freedom
#Multiple R-squared: 0.9591,
Adjusted R-squared: 0.9514
#F-statistic: 124.9 on 3 and 16 DF, p-value: 2.587e-11
#El modelo teórico a estimar era:
#VOL=b0 + b1*DBH + b2*D16 + b3*HT
#El modelo ajustado (estimado) es:
#VOL= -108.5758 + 1.6258*DBH + 5.6714*D16 + 0.6938*HT
#¿Qué significa que beta 1 = 1.6258? Significa que ceteris paribus (es decir, si
#dejamos fijas las otras variables X) y aumentamos en una unidad DBH, VOL
#aumenta en 1.6258 unidades.
#Calculemos IC al 95% para los coeficientes del modelo:
confint(fit)
#
2.5 %
97.5 %
#(Intercept) -138.5559230 -78.595770
#DBH
-0.5491507 3.800682
#D16
3.1227268 8.220064
#HT
0.3480719 1.039469
#Por ejemplo: IC95%  β2    3.12,8.22 .
#Estudiemos si cada coeficiente puede o no ser cero (contrates de hipótesis)
#Por ejemplo:
#
H0 : β1  0
H1 : β1  0
#p-valor= 0.132611 (tomado del summary de fit) > 0.05  No se rechaza H0.
#En consecuencia, es posible que el coeficiente beta 1 sea cero. Lo que
#significaría que el modelo nos está indicando que esa variable X (DBH) no es
#lo suficientemente útil, en el sentido de que la información contenida en esa
#variable para explicar VOL es posible que, en gran medida, se solape con la
#información que en este sentido contienen D16 y HT.
#Si hacemos el mismo contrate para beta2 y beta3 (para beta 0 no es
#importante hacerlo): concluimos en ambos casos que rechazamos que los
#coeficientes sean cero. En consecuencia, D16 y HT son variables importantes
#a la hora de explicar VOL. Este tipo de análisis está muy relacionado con las
#correlaciones parciales calculadas anteriormente.
#Bondad del ajuste
#Miramos los tres criterios:
#Error estándar residual (estimación de sigma), de la tabla de summary:
#Residual standard error: 3.095
#¿Es grande o pequeña? Calculamos el coeficiente de variación:
cv=100*(3.095/mean(VOL))
cv
#Sale 5%  el error estándar residual es pequeño  estamos ante un buen
#modelo según este criterio
#Segundo criterio: Tabla de ANOVA. Con la tabla de ANOVA contestamos al
#contraste:
#
H0 : β1  β2  β3  0
H1 : Lo contrario
#p-value: 2.587e-11 (tomado del summary de fit) < 0.05  Rechazo H0  El
#modelo es bueno según este criterio
#Tercer criterio: coeficiente de determinación
#Multiple R-squared: 0.9591
#Es decir nuestro modelo de regresión consigue explicar casi el 96% de la
#variabilidad total de los datos. Es un muy buen modelo.
#No obstante, cuando estimamos un modelo con varias variables explicativas
#(X), solemos mirar también el coeficiente R cuadrado ajustado, que también lo
#da el summary de fit:
# Adjusted R-squared: 0.9514
#Dado que da un valor del 95%, que es parecido al 96% de antes,
#interpretaremos finalmente como valor adecuado el R cuadrado original (sin
#ajustar). Si encontrásemos grandes diferencias entre el ajustado y el no
#ajustado, entonces interpretaríamos el valor del R cuadrado ajustado como el
#adecuado para nuestro modelo.
#Diagnóstico del modelo:
par(mfrow=c(2,2))
plot(fit)
#Normalidad
#Según el gráfico qqplot, fallaría la normalidad. Veamos el histograma de los
#residuos:
# Los residuos e(i) se obtienen con:
e<-residuals(fit)
# Los residuos estandarizados (el otro tipo de residuos) se obtienen con:
d<-e/sfit$sigma
# el histograma de los residuos, superponiendo una densidad normal:
hist(d,probability=T,xlab="Residuos estandarizados",main="",xlim=c(-3,3))
d.seq<-seq(-3,3,length=50)
lines(d.seq,dnorm(d.seq,mean(d),sd(d)))
#Falla la normalidad, claramente la cola de la derecha es demasiado pesada.
#Hagamos un contraste de hipótesis para salir definitivamente de dudas:
#
H0 : e
N
H1 : Lo contrario
#Contraste de Shapiro-Wilks
shapiro.test(e)
#
Shapiro-Wilk normality test
#data: e
#W = 0.9679, p-value = 0.7103
#p-valor=0.7103 > 0.05  No se puede rechazar la hipótesis de normalidad (a
#pesar de que los gráficos podían indicarnos lo contrario). Los problemas
#observados gráficamente no eran tan relevantes como nos parecía en
#principio.
#Homocedasticidad (hipótesis de varianza constante)
#El gráfico de residuos vs valores predichos de VOL deja algunas dudas sobre
#el cumplimiento de la hipótesis. Salgamos de dudas con un contraste de
#hipótesis:
#
H0 : Homocedasticidad
H1 : Heterocedasticidad
# El test de Breusch-Pagan se obtiene con
library(lmtest)
bptest(fit)
#
studentized Breusch-Pagan test
#data: fit
#BP = 3.5341, df = 3, p-value = 0.3164
#p-valor=0.3164 > 0.05  No se puede rechazar la hipótesis de varianza
#constante.
#Incorrelación
#el gráfico de residuos versus el anterior sería:
n<-length(d)
plot(d[1:(n-1)],d[2:n],xlab="Residuo i",ylab="Residuo i-1")
# y capturamos con una curva suavizada la tendencia:
lines(lowess(d[1:(n-1)],d[2:n]),col="red")
#Gráficamente no se ve ninguna tendencia clara creciente o decreciente. Por lo
#que la hipótesis parecería que se cumple. Salgamos de dudas con un
#contraste:
#
H0 : ρ  0
H1 : ρ  0
# El test de Durbin-Watson:
library(lmtest)
dwtest(fit,alternative="two.sided")
#
Durbin-Watson test
#data: fit
#DW = 1.4267, p-value = 0.1148
#alternative hypothesis: true autocorrelation is not 0
#p-valor=0.1148 > 0.05  No puede rechazar la hipótesis de incorrelación.
#Finalmente, hipótesis de media cero: Siempre se verifica por cómo ajustamos
#el modelo (EMV).
#En definitiva, estamos ante un buen modelo donde parece que se cumplen
#todas las hipótesis.
Procedimientos secuenciales de selección de variables
¿Podemos simplificar el modelo original reduciendo el número de variables
explicativas? Utilizaremos el criterio AIC (valores pequeños son preferidos a
valores grandes)
step(fit)
Start: AIC=48.73
VOL ~ DBH + D16 + HT
Df Sum of Sq
<none>
AIC
153.30 48.733
- DBH 1
- HT
RSS
24.06 177.36 49.649
1
173.42 326.72 61.867
- D16 1
213.21 366.51 64.166
Call:
lm(formula = VOL ~ DBH + D16 + HT)
Coefficients:
(Intercept)
-108.5758
DBH
1.6258
D16
HT
5.6714
0.6938
#No eliminaríamos ninguna variable X. A pesar de que parecía que sobraba
DBH.
Estimación de la respuesta media y predicción para una nueva
observación
# Queremos estimar el volumen esperado de madera cuando en las
# variables explicativas tenemos los siguientes valores
dbh.0=15.5315
d16.0=13.91
ht.0= 95.547
# La estimación de la respuesta media viene dada por
fit.d16.0<-predict(fit,data.frame(DBH=dbh.0,D16=d16.0,HT=ht.0),interval="confidence")
fit.d16.0
fit
lwr
upr
61.8515 60.38422 63.31878
La estimación puntual del volumen de madera promedio para un grupo de
árboles con esas medidas (en DBH, D16 y HT) sería 61.8515. Y el intervalo de
confianza al 95% estaría entre 60.38422 y 63.31878.
Calculemos ahora la predicción del volumen de madera para un árbol que
tenga las siguientes medidas:
dbh.0=20
d16.0=15
ht.0= 105
fit.d16.0<-predict(fit,data.frame(DBH=dbh.0,D16=d16.0,HT=ht.0),interval="prediction")
fit.d16.0
fit
lwr
upr
81.85626 71.43233 92.2802
La estimación puntual del volumen de madera para un árbol con esas medidas
(en DBH, D16 y HT) sería 81.85626. Y el intervalo de confianza al 95% estaría
entre 71.43233 y 92.2802.
Transformación de la variable respuesta (método de Box-Cox)
(si fuese necesario)
library(MASS)
bc<-boxcox(fit,plotit=F)
lambda<-bc$x[which.max(bc$y)]
lambda
#=0.6
#Transformamos VOL en z
library(labstatR) # librería que calcula la media geométrica (cargala desde el menú Paquetes
#Instalar paquetes
# la variable transformada por Box-Cox es:
z<-(VOL^lambda-1)/(lambda*mean.g(VOL)^(lambda-1))
z
Descargar