Está en la página 1de 1

Práctica 2

Maximiliano Vaca Montejano


364897
maximiliano.vaca@uabc.edu.mx

Profesor: Andrés García Medina


andres.garcia.medina@uabc.edu.mx
Fecha de entrega: jueves 29 de febrero, 2024 (12pm)

Ejercicio 1
Considere nuevamente el modelo del ejercicio 2 de la practica 1 dado por:

2
disti = β0 + β1 speedi + β2 speed + ϵ
i

In [128… data(cars)
head(cars)

A data.frame: 6 × 2
speed dist

<dbl> <dbl>

1 4 2

2 4 10

3 7 4

4 7 22

5 8 16

6 9 10

(a) Usar el metodo pairs para graficar los datos e interpretar.

In [129… pairs(cars)

(b) Graficar la matriz de covarianza de la matriz de diseño asociada X como un mapa de calor con la función heatmap.

In [130… X <- model.matrix(dist ~ speed + I(speed^2), data=cars)


y <- cars$dist

dim(X)
head(X)
tail(X)

50 · 3

A matrix: 6 × 3 of type dbl


(Intercept) speed I(speed^2)

1 1 4 16

2 1 4 16

3 1 7 49

4 1 7 49

5 1 8 64

6 1 9 81

A matrix: 6 × 3 of type dbl


(Intercept) speed I(speed^2)

45 1 23 529

46 1 24 576

47 1 24 576

48 1 24 576

49 1 24 576

50 1 25 625

In [131… cov_X <- cov(X)


cov_X

A matrix: 3 × 3 of type dbl


(Intercept) speed I(speed^2)

(Intercept) 0 0.00000 0.0000

speed 0 27.95918 844.4653

I(speed^2) 0 844.46531 26585.8841

In [132… heatmap(cov_X)

(c) Estimar el vector β del modelo via la factorización QR y comparar con resultado de la función lm. Se puede apoyar de la función qr.

In [133… beta_qr <- qr.solve(X, y)


beta_qr

(Intercept): 2.4701377850663 speed: 0.913287614242585 I(speed^2): 0.0999593020698439

In [134… cars.mod <- lm(dist ~ speed + I(speed^2), data=cars)

#summary(cars.mod_1)
coef(cars.mod)

(Intercept): 2.4701377850663 speed: 0.913287614242585 I(speed^2): 0.0999593020698439

(d) Historicamente la solución ́ optima del vector β está dada por la expresión: β = (X
T
X)
−1
X
T
y . Estimar el vector β via la expresion anterior (método clásico) y comparar con los resultados obtenidos via qr y la función lm.

In [135… beta_clas = solve ( t(X) %*% X ) %*% t(X) %*% y

print(beta_clas)

[,1]
(Intercept) 2.4701378
speed 0.9132876
I(speed^2) 0.0999593

In [136… cars.mod$coefficients

(Intercept): 2.4701377850663 speed: 0.913287614242585 I(speed^2): 0.0999593020698439

(e) Grafique los residuales del modelo ajustado ¿Cumplen con los supuestos distribucionales? ¿Con esta información como estimaría la desviación estándar de cada elemento de β?

In [137… plot(fitted(cars.mod), residuals(cars.mod), xlab="valores ajustados", ylab="residuals")

observamos que se dispersan alrededor de 0 con cierta varianza no muy extrema


calcularía la desviacion estandar usando la distancia respecto al 0 en y

Ejercicio 2
Las 10 corporaciones industriales más grandes de Estados Unidos arrojan los datos mostrados en la figura 1 Resuelva los incisos (a),(b), (c), y (d) del ejercicio anterior con estos nuevos datos. En este caso considere profits como la variable dependiente y sales y
assets como la variable independiente. Los datos se anexan a la practica con el nombre de datos.txt

prof itsi = β0 + β1 salesi + β2 assetsi + ϵ

In [138… #corps_data <- read.table(file = 'datos/practica_2.txt')


#crosp_data

In [139… corps_data <- data.frame(


sales = c(108.28, 152.36, 95.04, 65.45, 62.97, 263.99, 265.19, 285.06, 92.01, 165.68),
profits = c(17.05, 16.59, 10.91, 14.14, 9.52, 25.33, 18.54, 15.73, 8.10, 11.13),
assets = c(1484.10, 750.33, 766.42, 1110.46, 1031.29, 195.26, 193.83, 191.11, 1175.16, 211.15)
)
corps_data

A data.frame: 10 × 3
sales profits assets

<dbl> <dbl> <dbl>

108.28 17.05 1484.10

152.36 16.59 750.33

95.04 10.91 766.42

65.45 14.14 1110.46

62.97 9.52 1031.29

263.99 25.33 195.26

265.19 18.54 193.83

285.06 15.73 191.11

92.01 8.10 1175.16

165.68 11.13 211.15

(a) Usar el metodo pairs para graficar los datos e interpretar.

In [140… pairs(corps_data)

(b) Graficar la matriz de covarianza de la matriz de diseño asociada X como un mapa de calor con la función heatmap.

In [141… X_2 <- model.matrix(profits ~ sales + assets, data=corps_data)


y_2 <- corps_data$profits

dim(X_2)
head(X_2)
tail(X_2)

10 · 3
A matrix: 6 × 3 of type dbl
(Intercept) sales assets

1 1 108.28 1484.10

2 1 152.36 750.33

3 1 95.04 766.42

4 1 65.45 1110.46

5 1 62.97 1031.29

6 1 263.99 195.26

A matrix: 6 × 3 of type dbl


(Intercept) sales assets

5 1 62.97 1031.29

6 1 263.99 195.26

7 1 265.19 193.83

8 1 285.06 191.11

9 1 92.01 1175.16

10 1 165.68 211.15

In [142… cov_X_2 <- cov(X_2)


cov_X_2

A matrix: 3 × 3 of type dbl


(Intercept) sales assets

(Intercept) 0 0.000 0.00

sales 0 7476.453 -35575.96

assets 0 -35575.960 237054.27

In [143… heatmap(cov_X_2)

(c) Estimar el vector β del modelo via la factorización QR y comparar con resultado de la función lm. Se puede apoyar de la función qr.

In [144… beta_qr_2 <- qr.solve(X_2, y_2)


beta_qr_2

(Intercept): 0.013325232272318 sales: 0.0680575978483058 assets: 0.00576824436495954

In [145… corps.mod <- lm(profits ~ sales + assets, data=corps_data)

#summary(cars.mod_1)
coef(corps.mod)

(Intercept): 0.013325232272318 sales: 0.0680575978483058 assets: 0.00576824436495954

(d) Historicamente la solución ́ optima del vector β está dada por la expresión: β = (X
T
X)
−1
X
T
y . Estimar el vector β via la expresion anterior (método clásico) y comparar con los resultados obtenidos via qr y la función lm.

In [146… beta_clas_2 = solve ( t(X_2) %*% X_2 ) %*% t(X_2) %*% y_2

print(beta_clas_2)

[,1]
(Intercept) 0.013325232
sales 0.068057598
assets 0.005768244

Ejercicio 3
Regresando al ejercicio 1, calcule lo siguiente:

In [147… summary(cars.mod)

Call:
lm(formula = dist ~ speed + I(speed^2), data = cars)

Residuals:
Min 1Q Median 3Q Max
-28.720 -9.184 -3.188 4.628 45.152

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.47014 14.81716 0.167 0.868
speed 0.91329 2.03422 0.449 0.656
I(speed^2) 0.09996 0.06597 1.515 0.136

Residual standard error: 15.18 on 47 degrees of freedom


Multiple R-squared: 0.6673, Adjusted R-squared: 0.6532
F-statistic: 47.14 on 2 and 47 DF, p-value: 5.852e-12

In [148… dim(X)
head(X)
#tail(X)

50 · 3

A matrix: 6 × 3 of type dbl


(Intercept) speed I(speed^2)

1 1 4 16

2 1 4 16

3 1 7 49

4 1 7 49

5 1 8 64

6 1 9 81

(a) Para cada β


^
estime σ
^ ^ . Compare su resultado que el que arroja la función lm
β

^2
^ = R−1 R−T σ
Σ ^
β

2
||r|| ||Y − Xβ||
^2
σ = =
n − p n − p

^ )
diag(√Σ ^ β

habíamos estimado:
^
β0 = 2.4701378 (Intercept)
^
β
1
= 0.9132876 speed
^
β 2
= 0.0999593 I(speed^2)

calculamos σ^2

In [149… y = as.matrix(y)
betas_qr = as.matrix(beta_qr) #los beta que sacamos con fact. QR

dim(y)
dim(X)
dim(b)

50 · 1

50 · 3

3·1

In [150… sigma_2_est = sum((y - X %*% betas_qr)^2)/(length(y) - length(betas_qr))


sigma_2_est

230.313104418511

comparamos con el σ^2 del modelo

In [151… #ESTE NO
sigma_2_mod <- sum(resid(cars.mod)^2) / cars.mod$df.residual
sigma_2_mod

230.313104418511

obtenemos Q y R

In [152… qr_X <- qr(X)


#qr_X
Q <- qr.Q(qr_X)
R <- qr.R(qr_X)
R

A matrix: 3 × 3 of type dbl


(Intercept) speed I(speed^2)

1 -7.071068 -108.89444 -1870.7217

2 0.000000 37.01351 1117.9377

3 0.000000 0.00000 -230.0513

sacamos Σ^β^

In [153… cov_matrix_beta = solve(R) %*% solve(t(R)) *sigma_2_est


cov_matrix_beta

A matrix: 3 × 3 of type dbl


(Intercept) speed I(speed^2)

(Intercept) 219.5483705 -28.9523122 0.872858710

speed -28.9523122 4.1380528 -0.131439753

I(speed^2) 0.8728587 -0.1314398 0.004351805

ahora diag(√Σ^β^ )

In [154… desv_beta_i = sqrt(diag(cov_matrix_beta))


desv_beta_i
desv_beta_i[1]

(Intercept): 14.8171647250236 speed: 2.03422044231195 I(speed^2): 0.0659682106823391

(Intercept): 14.8171647250236

comparamos con los resultados del modelo

In [155… summary(cars.mod)$coefficients[, "Std. Error"]

(Intercept): 14.8171647250236 speed: 2.03422044231195 I(speed^2): 0.0659682106823391

(b) Para cada β


^ estime el estadístico t y el p-value asociado bajo la hipótesis nula H 0 : βi = 0 . Compare su resultado que el que arroja la función lm. ¿Cuales regresores son estadísticamente significativos?

^ − β
β i i
∼ tn−p
σ^^
βi

mis β^i con qr:

In [156… beta_qr

(Intercept): 2.4701377850663 speed: 0.913287614242585 I(speed^2): 0.0999593020698439

mis σ^β^
i

In [157… desv_beta_i

(Intercept): 14.8171647250236 speed: 2.03422044231195 I(speed^2): 0.0659682106823391

sacamos los t stats

In [158… beta_null = 0

t_stats = (beta_qr[1:3] - beta_null) / desv_beta_i[1:3]

t_stats

(Intercept): 0.166707857468485 speed: 0.448961968548802 I(speed^2): 1.5152647166858

ahora los p values

In [159… #sacamos grados de libertad


deg_freedom = length(y) - length(betas_qr)
deg_freedom

#comparamos con modelo


cars.mod$df.residual

47
47

In [160… p_values <- 2 * pt(-abs(t_stats), df = deg_freedom)


p_values

(Intercept): 0.868315075848578 speed: 0.655522449402814 I(speed^2): 0.136402432803738

comparamos con lm:

In [161… summary(cars.mod)$coefficients[, c("Pr(>|t|)")]

(Intercept): 0.868315075848578 speed: 0.655522449402814 I(speed^2): 0.136402432803738

son iguales

(c) Estime los coeficientes β vía la factorización de Cholesky. Se puede apoyar de la función chol. Compare su resultado que el que arroja la función lm.

T T
X Xβ = X y

Factorización de Cholesky:

T T
X X = L L

In [162… #calculamos X^t * X


XTX = t(X) %*% X #factor de cholesky

#calculamos XTy
Xty = t(X) %*% y

#sacamos L con descomposicion de cholesky


L <- chol(XTX)
#L

#verificamos
#t(L) %*% L

#L %*% t(L) # no

In [163… #solve X^T * X * b= X^T * y for b


b = solve(L) %*% solve(t(L)) %*% Xty
b

A matrix: 3 × 1 of type dbl


(Intercept) 2.4701378

speed 0.9132876

I(speed^2) 0.0999593

:(
In [164… summary(cars.mod)$coefficients[, c("Estimate")]

(Intercept): 2.4701377850663 speed: 0.913287614242585 I(speed^2): 0.0999593020698439

(d) Estime el error estándar de los residuales. Compare su resultado que el que arroja la función lm.

2 2
RSS1 ||r|| ||Y − Xβ||
2
σϵ = = =
n − p n − p n − p

obtenemos RSS_1

In [165… RSS_1 = sum((y - X %*% beta_qr)^2)

In [166… residual_se = sqrt(RSS_1/(length(y) - length(betas_qr)))


residual_se

15.1760701243277

In [167… #error estandar de los residuales segun el modelo cars.mod


summary(cars.mod)$sigma

15.1760701243277

(e) Estime el estadístico F y el p-value asociado. Considere como modelo nulo: disti = β0 + ε . Compare su resultado que el que arroja la función lm. ¿Su modelo es estadísticamente significativo?

obtenemos RSS_0

In [168… null_model <- lm(dist ~ 1, data = cars)


beta_null = coef(null_model)
beta_null = c(beta_null, 0, 0)

RSS_0 = sum((y - X %*% beta_null)^2)

In [169… q = length(beta_qr) - 1
q

In [170… n = length(y)
q = length(beta_qr) - 1

#f stat
F_stat <- ((RSS_0 - RSS_1)/q ) / (RSS_1 / (n - q))
#p-value
p_value <- 1 - pf(F_stat, df1 = deg_freedom, df2 = deg_freedom)

#imprimir
print(c(F_value = F_stat, Pr = p_value))

#comparar
summary(cars.mod)

F_value Pr
48.14374 0.00000
Call:
lm(formula = dist ~ speed + I(speed^2), data = cars)

Residuals:
Min 1Q Median 3Q Max
-28.720 -9.184 -3.188 4.628 45.152

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.47014 14.81716 0.167 0.868
speed 0.91329 2.03422 0.449 0.656
I(speed^2) 0.09996 0.06597 1.515 0.136

Residual standard error: 15.18 on 47 degrees of freedom


Multiple R-squared: 0.6673, Adjusted R-squared: 0.6532
F-statistic: 47.14 on 2 and 47 DF, p-value: 5.852e-12

In [171… summary(null_model)

Call:
lm(formula = dist ~ 1, data = cars)

Residuals:
Min 1Q Median 3Q Max
-40.98 -16.98 -6.98 13.02 77.02

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 42.980 3.644 11.79 6.38e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 25.77 on 49 degrees of freedom

son muy similares,

modelo:
F-statistic: 47.14 on 2 and 47 DF, p-value: 5.852e − 12

nuestro resultado:
F-statistic: 48.14374 on 2 and 47 DF, p-value: 0.00000

No acabo de entender el por que de la diferencia en el F stat, pero supongo que nuestro p value es valido, solo que no alcanza a mostrar con precision hasta los digitos requeridos. Igual nos indica que es pequeño y no hay suficiente evidencia para rechazar
nuestra hipotesis.

(f) Calcule las métricas conocidas como R2 y R2 ajustado. Las expresiones matemáticas las puede encontrar en la solución de la práctica 1. Compare su resultado que el que arroja la función lm.

model$response = y

In [172… cars.mod$coefficients[]

length(cars.mod$coefficients[])

(Intercept): 2.4701377850663 speed: 0.913287614242585 I(speed^2): 0.0999593020698439

In [173… SSres = sum((y - X %*% beta_qr)^2)


SStot = sum((y - mean(y))^2)
n = length(y)
k = length(beta_qr)

R2 <- 1 - SSres / SStot

#calcular R^2 ajustado


R2_adj <- 1 - (1 - R2)*(n - 1)/(n - k - 1)

#imprimir R^2 y R^2 ajustado


print(c(R2 = R2, R2_adj = R2_adj))

#comparar con los resultados de lm()


print(c(R2 = summary(cars.mod)$r.squared, R2_adj = summary(cars.mod)$adj.r.squared))

R2 R2_adj
0.6673308 0.6456350
R2 R2_adj
0.6673308 0.6531747

son iguales

(g) Grafique en una sola figura lo siguiente:

1. residuales vs. valores ajustados


2. valores absolutos de los residuales estandarizados vs. valores ajustados Comparar sus resultados con lo que arroja el comando plot usando como argumento la salida del modelo ajustado. Hint: Se requiere calcular la matriz de influencia A.

In [174… summary(cars.mod)

Call:
lm(formula = dist ~ speed + I(speed^2), data = cars)

Residuals:
Min 1Q Median 3Q Max
-28.720 -9.184 -3.188 4.628 45.152

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.47014 14.81716 0.167 0.868
speed 0.91329 2.03422 0.449 0.656
I(speed^2) 0.09996 0.06597 1.515 0.136

Residual standard error: 15.18 on 47 degrees of freedom


Multiple R-squared: 0.6673, Adjusted R-squared: 0.6532
F-statistic: 47.14 on 2 and 47 DF, p-value: 5.852e-12

In [175… res_standard_error = summary(cars.mod)$sigma

In [176… res_standard_error

15.1760701243277

In [177… #=======///// GRAFICA 1 /////=======

# Graficar los residuales vs. los valores ajustados


plot(fitted(cars.mod), resid(cars.mod), xlab = "Valores ajustados", ylab = "Residuales", main = "Residuales vs. Valores ajustados")

#=======///// GRAFICA 2 /////=======

# Calcular los residuales estandarizados


stand_resid <- ( resid(cars.mod) - mean(resid(cars.mod)) ) / res_standard_error
#stand_resid <- ( resid(cars.mod) ) / summary(cars.mod)$sigma

# Graficar los valores absolutos de los residuales estandarizados vs. los valores ajustados
plot(fitted(cars.mod), abs(stand_resid), xlab = "Valores ajustados", ylab = "Valores absolutos de los residuales estandarizados", main = "Valores absolutos de los residuales estandarizados vs. Valores ajustados")

#=======///// GRAFICA 3 /////=======

# Comparar con los resultados de plot()


par(mfrow = c(1, 1))
plot(cars.mod)

son similares

También podría gustarte