Está en la página 1de 16

Ejercicio 2.

- En la siguiente tabla tenemos, X=contenido de agua en la nieve durante el mes de


abril en una región de montaña de Wyoming, USA y además Y=el rendimiento de agua de abril
a julio en el rio Snake, que lleva agua proveniente de la nieve, durante 17 años. Ajuste un
modelo de regresión lineal simple y comente si en este caso debemos utilizar un modelo de
regresión a través del origen.

In [108… #install.packages("ISLR2")
library(ISLR2)
#------------------------------------------------------------------------
#Cargar los datos
#------------------------------------------------------------------------
datos=data.frame(x=c(23.1,32.8,31.8,32,30.4,24,39.5,24.2,52.5,37.9,30.5,25.1,12.4,35.1
y=c(10.5,16.7,18.2,17,16.3,10.5,23.1,12.4,24.9,22.8,14.1,12.9,8.8,17.4,14.9,10.5,16.1)

a) Estime el intercepto y la pendiente de la regresión lineal de rendimiento de agua de abril a


julio contra el contenido de agua en la nieve.

In [103… n=nrow(datos) #Número de datos


X_barra=mean(datos$x) #Media del predictor
Y_barra=mean(datos$y) #Media de la variable respuesta
BETA1=sum((datos$x-X_barra)*(datos$y-Y_barra))/sum((datos$x-X_barra)^2) #Cálculo de la
BETA0=Y_barra-BETA1*X_barra # #Cálculo de la coeficiente Beta 1
y_ajus=BETA0+BETA1*datos$x #Juste del modelo lineal

Coeficientes=data.frame(cbind(BETA0,BETA1))
colnames(Coeficientes)=c("Beta0","Beta1")
Coeficientes=t(Coeficientes)
colnames(Coeficientes)=c("Valor")
Coeficientes

Modelo_ajustado=BETA0+BETA1*datos$x
datos_ajus=data.frame(cbind(datos,Modelo_ajustado))
names(datos_ajus)[1:3]=c("Contenido de agua","Rendimiento de agua","Rendimiento de agu
head(datos_ajus)

Valor

Beta0 0.7155956

Beta1 0.4983090

Contenido de agua Rendimiento de agua Rendimiento de agua predicha

23.1 10.5 12.22653

32.8 16.7 17.06013

31.8 18.2 16.56182

32.0 17.0 16.66148

30.4 16.3 15.86419

24.0 10.5 12.67501


b) Obtenga e interprete las estimaciones por intervalo del intercepto y la pendiente.

In [14]: RSS=sum((datos$y-y_ajus)^2)# Cálculo de la suma de cuadrados de los residuos (RSS)


sigma2=RSS/(n-2)# Cálculo de la varianza
std=sqrt(sigma2) #Raiz cuadrada de la varianza, desviación estandar
#S2=RSS/(n-2)
#sigma=sum(ei^2)/(n-2)
Syy=sum((datos$y-Y_barra)^2)
Sxx=sum((datos$x-X_barra)^2)

VAR_BETA0=sigma2*((1/n)+(X_barra^2/Sxx)) #Varianza del estimador Beta 0


SE_BETA0=sqrt(VAR_BETA0) # Error estandar de Beta0
VAR_BETA1=sigma2/Sxx #Varianza del estimador Beta 1
SE_BETA1=sqrt(VAR_BETA1)# Error estandar de Beta1

T_tab <- qt(0.975, n - 2)

itervalo_BETA0=c(BETA0-T_tab*SE_BETA0,BETA0+T_tab*SE_BETA0) #Intervalo para Beta 0 al


itervalo_BETA1=c(BETA1-T_tab*SE_BETA1,BETA1+T_tab*SE_BETA1) #Intervalo para Beta 1 al

Intervalo=data.frame(cbind(t(Coeficientes),t(cbind(SE_BETA0,SE_BETA1)),t(rbind(iterval
colnames(Intervalo)=c("Coeficiente", "Error STD", "2.5%","97.5%")
Intervalo

Coeficiente Error STD 2.5% 97.5%

Beta0 0.7155956 1.54665841 -2.581029 0.3929205

Beta1 0.4983090 0.04944452 4.012220 0.6036975


c) Pruebe la hipótesis 𝐻0:𝛽0=0, contra la alternativa 𝐻0:𝛽0≠0. Interprete los resultados.

In [19]: T_cal=BETA0/SE_BETA0
alfa <- 0.05
gl <- n-2
T_tab <- qt(1-(alfa/2), gl) #Se contrasta con la T_calculada
P_value=2*pt(abs(T_cal),gl,lower.tail =F) #Se contrasta con un alfa=0.05
P_value=data.frame(P_value)
P_value

P_value

0.6502402

Si el valor p es menor o igual que α, existe evidencia suficiente para no rechazar la hipótesis
nula; si el valor p es mayor que α existe evidencia suficiente para rechazar la hipótesis nula.
Como **P_value>alfa= 0.65>0.05** de acuerdo a la la regla de decisión, existe evidencia
suficiente para rechazar la H0, ya que P_value=0.65 está en la región de rechazo. Por lo tanto,
no existe una relación lineal significativa entre la cantidad de agua que contiene la nieve con el
rendimiento de agua en el rio Snake.

d) Ajuste un modelo de regresión al origen.

In [102… Beta1=sum(datos$y*datos$x)/sum(datos$x^2)
Y_ajus_origen=data.frame(Beta1*datos$x)

Y_ajus_origen=data.frame(cbind(datos,Y_ajus_origen))
names(Y_ajus_origen)[1:3]=c("Contenido de agua","Rendimiento de agua","Rendimiento de
head(Y_ajus_origen)

Contenido de agua Rendimiento de agua Rendimiento de agua predicha

23.1 10.5 12.01934

32.8 16.7 17.06642

31.8 18.2 16.54611

32.0 17.0 16.65017

30.4 16.3 15.81766

24.0 10.5 12.48763


e) Compare las varianzas de las estimaciones de las pendientes para los dos modelos (con y sin
intercepto) ¿Cuál modelo le da mayor precisión para la estimación de la pendiente?. Interprete
el resultado.

In [44]: #con intercepto calculado paso a paso


VAR_BETA0=sigma2*((1/n)+(X_barra^2/Sxx)) #Varianza del estimador Beta 0
SE_BETA0=sqrt(VAR_BETA0) # Error estandar de Beta0
VAR_BETA1=sigma2/Sxx #Varianza del estimador Beta 1
SE_BETA1=sqrt(VAR_BETA1)# Error estandar de Beta1
TSS=sum((datos$y-mean(datos$y))^2)
R2=1-(RSS/TSS)

#Cálculo usando lm()


con_intercepto=lm(y~x,data = datos)
#summary(con_intercepto)
Var_con_interc=coefficients(summary(con_intercepto))[2,1:2]

#Sin intercepto calculado paso a paso


RSS_O=sum((datos$y-Y_ajus_origen)^2)# Cálculo de la suma de cuadrados de los residuos
Sigma2=RSS_O/(n-1)# Cálculo de la varianza
Sigma=sqrt(sigma2)
Var_Beta1=Sigma2/sum(datos$x^2)
SE_Beta1=sqrt(Var_Beta1)
R2_origen=1-(RSS_O/(sum(datos$y^2)*sum(datos$x^2)))

#Cálculo usando lm()


sin_intercepto=lm(y~0+x,data = datos)
#summary(sin_intercepto)
Var_sin_interc=coefficients(summary(sin_intercepto))[,1:2]
R2=t(cbind(summary(con_intercepto)$adj.r.squared,summary(sin_intercepto)$adj.r.squared

Varianza=data.frame(rbind(Var_con_interc,Var_sin_interc))
Varianza$Variance=(Varianza[,2])^2
Varianza=cbind(Varianza,R2)
Varianza

Estimate Std..Error Variance R2

Var_con_interc 0.4983090 0.04944452 0.002444761 0.8627422

Var_sin_interc 0.5203178 0.01315363 0.000173018 0.9892456

Los errores estándar (permiten también construir pruebas de hipótesis relacionadas a los
coeficientes. Se plantea la siguinte pruebas de hipótesis relacionadas al intercepto(regresión al
origen). **H0: Regresión al origen (sin intercepto) H0 : β
0
= 0, β
1
≠ 0 ** **Ha: Regresión lineal
simple con intercepto Ha : β
0
≠ 0, β
1
≠ 0 ** De acuerdo al valor **SE(β^ )** estimado para el
1

modelo sin intercepto es menor que al modelo con intercepto, se puede concluir que está más
a favor de la hipotesis nula. Si β
0
= 0 entonces Y = β
1
∗ X + ei , donde el intercepto es cero
en la relación entre la respuesta (Y ) y el predictor (X). Además, para el modeloi sin intercepto
presenta un valor de R
2
= 0.9892 mayor que le valor de R
2
= 0.8627 correspodinte al
modelo con intercepto.
f) Calcule las estimaciones por intervalo de 95% de confianza del promedio (valor esperado de
la respuesta) del rendimiento del agua en un año futuro, para 𝑋=30 y 𝑋=50, para ambos
modelos, con y sin intercepto. Explique las diferencias en los intervalos obtenidos.

In [80]: #Valores a futuros


X0 <- data.frame(x=c(30,50))
#----------------------------------------------------
#estimaciones de las pendientes con intercepto
#----------------------------------------------------
mls_1 <- lm(y ~ x, data = datos )
#Intervalo de las predicciones
Inter_con_intercepto=data.frame(predict(mls_1, newdata = X0 , interval = "confidence")
Inter_con_intercepto$Modelo="Con_intercepto"
Inter_con_intercepto=cbind(Inter_con_intercepto,X0)
colnames(Inter_con_intercepto)=c("Estimador","Inferior","Superior","Modelo","Futuro")
#----------------------------------------------------
#estimaciones de las pendientes sin intercepto
#----------------------------------------------------
mls_2 <- lm(y ~ 0+x, data = datos )
#Intervalo de las predicciones
Inter_sin_intercepto=data.frame(predict(mls_2, newdata = X0 , interval = "confidence")
Inter_sin_intercepto$Modelo="Sin_intercepto"
Inter_sin_intercepto=cbind(Inter_sin_intercepto,X0)
colnames(Inter_sin_intercepto)=c("Estimador","Inferior","Superior","Modelo","Futuro")

Estimacion=rbind(Inter_con_intercepto,Inter_sin_intercepto)
Estimacion<-Estimacion[, c(4,5,1,2,3)]
Estimacion$Diferencia=Estimacion$Superior-Estimacion$Inferior
Estimacion <- Estimacion[order(Estimacion$Futuro),]
Estimacion

Modelo Futuro Estimador Inferior Superior Diferencia

1 Con_intercepto 30 15.66487 14.76545 16.56428 1.798832

11 Sin_intercepto 30 15.60953 14.77300 16.44607 1.673067

2 Con_intercepto 50 25.63104 23.34854 27.91355 4.565010

21 Sin_intercepto 50 26.01589 24.62167 27.41011 2.788445

El rendimiento del agua en el rio Snake en años futuros sí se logra una caida de nieve en las
montaña de Wyoming de 30 y 50, la predicción de un valor futuro es más precisa para el
modelo sin intercepto. Este modelo es de menor amplitud en su intervalo respecto al modelo
con intercepto, lo que permite explicar mejor el fenómeno y la mejorar la predicción en el
rendimiento del agua en el rio Snake.
Ejercicio 3.- El conjunto de datos carbohydrate de la biblioteca en R dobson, muestra los
porcentajes de las calorías totales obtenidas de los carbohidratos complejos, para veinte
hombres diabéticos insulinodependientes que siguieron una dieta alta en carbohidratos
durante seis meses. El cumplimiento del régimen se pensó que estaba relacionado con la edad
(en años), el peso corporal (en relación con el peso "ideal" para la estatura) y otros
componentes de la dieta, como el porcentaje de calorías en forma de proteínas. Considerando
estas 3 variables predictoras, realice lo siguiente:

a) Empleando algebra matricial encuentre


−1 T
^ ^ ^
y la matriz de varianza covarianza de
T T 2 1
β = (X X) ^
(X Y), σ = (Y − Xβ ) (Y − Xβ )
n−p
−1
la distribución normal multivariada de los parámetros estimados (X T
X) σ
2
^ .

In [106… #install.packages("dobson")
library(dobson)
data(carbohydrate)
head(carbohydrate)

carbohydrate age weight protein

33 33 100 14

40 47 92 15

37 49 135 18

27 35 144 12

30 46 140 15

43 52 101 15

In [107… colnames(carbohydrate)[1:4]=c("Y","X1","X2","X3")
p=3 #Número de predictoras
n=nrow(carbohydrate)
X=as.matrix(cbind(X0=1,carbohydrate[,2:4]))
Y=as.matrix(carbohydrate[,1])
BETA=solve(t(X)%*%X) %*% t(X)%*%Y
colnames(BETA)[1]="Estimadores"

Y_ajust=BETA[1]+BETA[2]*X[,2]+BETA[3]*X[,3]+BETA[4]*X[,4]
S2=sum((Y-Y_ajust)^2)/(n-(p+1))
S2=as.numeric(t(Y-X%*%BETA)%*% (Y-X%*%BETA)/(n-(p+1)))
Var_Cov=solve(t(X) %*% X)*S2
SE_BETA2=diag(Var_Cov)
SE_BETA=sqrt(diag(Var_Cov))
Tab_PARAMETROS=cbind(as.matrix(BETA),as.matrix(SE_BETA2),as.matrix(SE_BETA))
colnames(Tab_PARAMETROS)=c("Estimadores","Varianza","Error Std")
Tab_PARAMETROS
Estimadores Varianza Error Std

X0 36.9600559 1.708584e+02 13.07128293

X1 -0.1136764 1.195206e-02 0.10932548

X2 -0.2280174 6.937049e-03 0.08328895

X3 1.9577126 4.030889e-01 0.63489286

b) Usando la información del inciso anterior, construya una tabla de los parámetros estimados
con su correspondiente error estándar. Posteriormente ajuste el modelo usando la función lm()
de R, y compare la salida (estimadore

In [97]: mls_mult <- lm(carbohydrate$Y ~ carbohydrate$X1+carbohydrate$X2+carbohydrate$X3, data


#summary(mls_mult)
Y_ajust=mls_mult$coefficients[1]+mls_mult$coefficients[2]*carbohydrate$X1+mls_mult$coe
S2=sum((carbohydrate$Y-Y_ajust)^2)/(n-(p+1))
E2=sum((mls_mult$residuals)^2)/(n-(p+1))
Sigma=sqrt(S2)
Coeficientes=coefficients(summary(mls_mult))[,1:2]
Tab_ESTIMADOS=as.matrix(cbind(Coeficientes[,1],Coeficientes[,2]^2,Coeficientes[,2]))
colnames(Tab_ESTIMADOS)=c("Estimate","Variance","Std. Error")

TABLA_ESTIMADO=cbind(Tab_PARAMETROS,Tab_ESTIMADOS)
TABLA_ESTIMADO

Estimadores Varianza Error Std Estimate Variance Std. Error

X0 36.9600559 1.708584e+02 13.07128293 36.9600559 1.708584e+02 13.07128293

X1 -0.1136764 1.195206e-02 0.10932548 -0.1136764 1.195206e-02 0.10932548

X2 -0.2280174 6.937049e-03 0.08328895 -0.2280174 6.937049e-03 0.08328895

X3 1.9577126 4.030889e-01 0.63489286 1.9577126 4.030889e-01 0.63489286

c) De acuerdo a la significancia de las variables del modelo ajustado con la función lm(),
realizado en el inciso anterior, formule una prueba anidada usando la función anova() y el
estadístico F. ¿Se rechaza la hipótesis nula asociada a un modelo más simple? Justifica tu
respuesta.

In [101… #Generar un modelo lineal anidado


mls_mult1 <- lm(carbohydrate$Y ~ carbohydrate$X1+carbohydrate$X2+carbohydrate$X3, data
#summary(mls_mult1)

mls_mult2 <- lm(carbohydrate$Y ~ carbohydrate$X2+carbohydrate$X3, data = carbohydrate


#summary(mls_mult2)

#Prueba F
n=nrow(carbohydrate)
anova=anova(mls_mult1,mls_mult2)
anova
Res.Df RSS Df Sum of Sq F Pr(>F)

16 567.6629 NA NA NA NA

17 606.0219 -1 -38.35907 1.081179 0.3138927

No hay prueba sólida para rechazar H0 , no hay evidencia suficiente para rechazarla; al menos
algunos de los esos predictores del subconjunto es igual a cero. además sí hay un cambio en
R
2
, la del primer modelo presenta una R
2
= 0.3831 y la del segundo modelo presenta una
; hay una disminución en el valor de R .
2 2
R = 0.3802

También podría gustarte