Está en la página 1de 17

Maestría en Análisis Estadístico y Computación (INEGI-

CIMAT)
Curso: Modelos Estadísticos
Tarea 2 (Modelos lineales)
Tarea donde se piden hacer ejercicios relacionados al tema de modelos de regresión lineal (de los
temas visto en la clase 10 de febrero 2023).

Instrucciones:

1) La tarea se anexa en formato pdf (ya sea escaneando las imágenes y uniéndolas en un solo
archivo, o generar el documento mediante un archivo de word o de latex)

2) Si el problema así lo amerita, es necesario indiquen los comandos o código de R empleado.

Ejercicio 1.- Use el modelo estadístico:


𝑌𝑖 = 𝛽0 + 𝛽1 𝑋𝑖1 + 𝜖𝑖 , 𝑖 = 1,2, … , 𝑛
para probar que el supuesto de errores 𝜖𝑖 independientes y normales con media cero y varianza
constante 𝜎2 implica lo siguiente:

a) 𝐸(𝑌𝑖 ) = 𝛽0 + 𝛽1 𝑋𝑖1
b) 𝑉(𝑌𝑖 ) = 𝜎 2
c) 𝐶𝑜𝑣(𝑌𝑖 , 𝑌𝑗 ) = 0, 𝑖 ≠ 𝑗

Para los incisos b), y c), use las siguientes definiciones de varianza y covarianza:

𝑉(𝑌𝑖 ) = 𝐸{[𝑌𝑖 − 𝐸(𝑌𝑖 )]2 }

𝐶𝑜𝑣(𝑌𝑖 , 𝑌𝑗 ) = 𝐸{[𝑌𝑖 − 𝐸(𝑌𝑖 )][𝑌𝑗 − 𝐸(𝑌𝑗 )]}

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.

X Y X Y
23.1 10.5 37.9 22.8
32.8 16.7 30.5 14.1
31.8 18.2 25.1 12.9
32 17 12.4 8.8
30.4 16.3 35.1 17.4
24 10.5 31.5 14.9
39.5 23.1 21.1 10.5
24.2 12.4 27.7 16.1
52.5 24.9

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.
b) Obtenga e interprete las estimaciones por intervalo del intercepto y la pendiente.
c) Pruebe la hipótesis 𝐻0 : 𝛽0 = 0, contra la alternativa 𝐻0 : 𝛽0 ≠ 0. Interprete los resultados.
d) Ajuste un modelo de regresión al origen.
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.
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.

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 𝜷 ̂ = (𝑿𝑻 𝑿)−𝟏 (𝑿𝑻 𝒀), σ 𝟏
̂ ) (𝒀 −
̂2 = 𝒏−𝒑 (𝒀 − 𝑿𝜷
̂ ) y la matriz de varianza covarianza de la distribución normal multivariada de los
𝑿𝜷
−𝟏
parámetros estimados (𝑿𝑻 𝑿) σ ̂2 .
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 (estimadores y sus errores estándar), con la tabla anterior.
¿Se obtuvieron los mismos resultados?.

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.
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 [13]: #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 [14]: 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 [29]: 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(Coeficientes,t(cbind(SE_BETA0,SE_BETA1)),t(rbind(itervalo_B
colnames(Intervalo)=c("Coeficiente", "Error STD", "2.5%","97.5%")
Intervalo
#lm=lm(y~x,data = datos)
#summary(lm)

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

Un p-valor pequeño es un indicador de que nuestra Hipótesis Nula es incorrecta, en cuyo


caso debemos rechazarla.
Si el estadístico de prueba T cal
> Tn−gl,n−2 existe evidencia suficiente para rechazar H . 0

Para este ejercicio, dado que el valor del intercepto se encuentra en el itervalo
[−2.58, 0.392] ; está contenido dentro del intervalo (area bajo la curva). Se puede
interpretar que la ausencia de caida de nieve en la región de la montaña Wyoming, el
rendimiento del nivel de agua en el rio Snake es nulo hasta tener un rendimiento de 4.0122
de unidad de agua.

De igual manera, el valor de la pendiente se encuentra en el itervalo [4.01, 0.603]; está


contenido dentro del intervalo (area bajo la curva). Se puede interpretar que por cada
unidad de nieve que cae en la región de la montaña Wyoming, el rendimiento del nivel de
agua en el rio Snake será entre 4.0122 a 0.6036 unidad de agua.

c) Pruebe la hipótesis H 0
: β
0
= 0 , contra la alternativa H 0
: β
0
≠ 0. Interprete los resultados.
In [27]: 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
Estadisticos=data.frame(cbind(T_cal,T_tab,P_value,alfa))
colnames(Estadisticos)=c("T calculado","T de tabla","P_value"," Alpha")
Estadisticos

T calculado T de tabla P_value Alpha

0.462672 2.13145 0.6502402 0.05

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 Pvalue = 0.65 > α = 0.05 de acuerdo a la la regla de decisión, existe evidencia
suficiente para rechazar la H0 , ya que Pvalue = 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. Por otra parte, se puede corroborar con el estadístico de
prueba, donde Tcal = 0.56 < Tn−gl,n−2 = 2.13 ; entonces sí existe evidencia suficiente para
aceptar H ,concluyendo así que el intercepto no tienes significancia para modelar los datos.
0

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

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

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)

Beta1

0.5203178

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
1

el 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 X = 30 yX = 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 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 [2]: #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

Vector de los estimadores

In [4]: 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"
BETA

Estimadores

X0 36.9600559

X1 -0.1136764

X2 -0.2280174

X3 1.9577126

Matriz de varianza y covarianza


In [5]: 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
Var_Cov

X0 X1 X2 X3

X0 170.8584375 -0.4026627787 -0.6654064690 -4.832774070

X1 -0.4026628 0.0119520601 0.0006695721 -0.014028077

X2 -0.6654065 0.0006695721 0.0069370491 -0.008391548

X3 -4.8327741 -0.0140280770 -0.0083915485 0.403088946

Cuadro resumen con los estimadores, varianza y error estandar

In [6]: 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 (estimadores)

In [7]: 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 [26]: #Generar un modelo lineal anidado


mls_mult1 <- lm(carbohydrate$Y ~ carbohydrate$X1+carbohydrate$X2+carbohydrate$X3, data
coefficients(summary(mls_mult1))
R2=summary(mls_mult1)$r.squared
print(paste("Valor de R2 es =",R2))

Estimate Std. Error t value Pr(>|t|)

(Intercept) 36.9600559 13.07128293 2.827577 0.012130638

carbohydrate$X1 -0.1136764 0.10932548 -1.039797 0.313892706

carbohydrate$X2 -0.2280174 0.08328895 -2.737666 0.014599416

carbohydrate$X3 1.9577126 0.63489286 3.083532 0.007121265

[1] "Valor de R2 es = 0.480542773310741"

In [25]: mls_mult2 <- lm(carbohydrate$Y ~ carbohydrate$X2+carbohydrate$X3, data = carbohydrate


coefficients(summary(mls_mult2))
R2=summary(mls_mult2)$r.squared
print(paste("Valor de R2 es =",R2))

Estimate Std. Error t value Pr(>|t|)

(Intercept) 33.130320 12.57155155 2.635341 0.017361207

carbohydrate$X2 -0.221649 0.08326155 -2.662082 0.016422843

carbohydrate$X3 1.824291 0.62327400 2.926949 0.009409071

[1] "Valor de R2 es = 0.445441139540518"

In [14]: #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. Así que
almenosalgúnde los coeficientes del subconjunto es ceros, no son significativos para el modelo
de regresión; no a porta al conjunto de datos para encontar un mejor ajuste. Además se puede
ver la diferencia en las , la modelo completo presenta una y la del segundo
2 2
R R = 0.3831

modelo presenta una R ; hay una disminución en el valor de R .


2 2
= 0.3802

In [ ]:

También podría gustarte