Sie sind auf Seite 1von 13

#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. Análisis preliminar (Gráfico-numérico)


2. Ajuste del modelo
3. Bondad del ajuste
4. 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 RSS AIC

<none> 153.30 48.733

- DBH 1 24.06 177.36 49.649

- HT 1 173.42 326.72 61.867

- D16 1 213.21 366.51 64.166

Call:

lm(formula = VOL ~ DBH + D16 + HT)

Coefficients:

(Intercept) DBH D16 HT

-108.5758 1.6258 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))

Das könnte Ihnen auch gefallen