Está en la página 1de 24

Monitoria 1: Rmarkdown y autocorrelación

Carolina Arrieta

2023-02-02

Rmarkdown
• Con “#” puedo colocar títulos y a medida que añado más “##” agrego subtítulos
• Si deseo escribir texto de corrido, en el caso de Rmarkdown puedo hacerlo fuera de un chunk (parte
donde puedo incluir código, como lo haría en R)

1. Algunos formatos de escritura útiles a la hora de escribir en markdown son:

• Con un asterisco a cada lado uso la letra cursiva


• Con dos asteriscos a cada lado uso la letra negrilla
• Con el signo habitual de exponente antes y después del número que quiero que sea el exponente agrego
un superíndice 2
• Con una viguriña agrego texto tachado
• Si coloco el nombre de la dirección web entre corchetes y entre parentesis el url, me aparece un
hipervínculo BanRep (puedo hacer énfasis en el hipervínculo agregando negrilla)

2. Puedo añadir fórmulas con casi el mismo formato utilizado en latex con algunas modifica-
ciones

• En las ecuaciones antes y después de comenzarlas coloco el signo pesos “$”, si deseo que la ecuación
esté centrada coloco dos signo pesos, para añadir símbolos o letras extrañas para markdown, agrego \

Y
P IBp =
L

A = π ∗ r2

ˆ
P
− X̄)(µi − µ̄)
j=1 (Xi
β̂1 = β1 + P
j=1 (Xj − X̄)2

∂ 2 lnf (y | x, θ) ∂lnf (y | x, θ) ∂lnf (y | x, θ)


−Ef [ ′
]=[ ]=0
∂θ∂θ ∂θ ∂θ′

• Para ecuaciones dentro de un texto de corrido escribo yt = β1 Xt − ut siendo parte del párrafo

1
3. Puedo insertar imágenes de la siguiente manera:
Colocando ![] y añadiendo la ubicación dentro del computador de la imagen se agrega la imagen

• Ejemplo imagen 1

Interpretación de modelos si son en nivel o en logaritmo


Puedo hacer tablas de la siguiente manera:
Ejemplo tabla 1

Código estudiante Nombre estudiante Pregrado Curso


00000000001 estudiante 1 economía econometría 2
00000000002 estudiante 2 economía econometría 2
00000000003 estudiante 3 economía econometría 2

4. Citar y enumerar

• Si deseo agregar una cita en bloque que necesita tener una sangría especial, añado > antes de la cita,
añado varios para tener mayor tabulación

Cita en bloque

Para el caso de viñetas, con * o + puedo añadir items a la lista, también puedo iniciar numeraciones

• Enumeración
– Elemento 1
– Elemento 2

1. Lista ordenada
2. Segundo

• Primero
• Segundo

Si deseo añadir líneas de código puedo agregar un chunk, esto lo hago colocando ´´ al inicio y al final de
cada bloque de código, puedo definir con {r echo = TRUE} si deseo que las líneas de código aparezcan en el
documento o {r echo = FALSE} si no deseo que aparezcan en el documento (cuando selecciono esta opción,
las salidas de código seguirán apareciendo en el documento) Puedo nombrar cada chunk para ubicarlo más
rápido con varios numerales, después de abrir el bloque

2
Autocorrelación

1. Caso de la clase

Puedo colocar todo el código en un solo chunk o colocarlo en varios chunks e ir interpretando o hablando
de él. Si alguno de los chunks anteriores no corre o tiene error en el código, el Rmarkdown no podrá ser
ejecutado hasta generar un pdf o documento esperado.
En este ejemplo vamos analizar la relación entre salarios y productividad en el sector de negocios de Estados
Unidos entre 1960 y 2005.

• Y: Índice de remuneración real por hora


• X: Producción por hora
Base del índice 1992 = 100

## Loading required package: sandwich

## Loading required package: pcse

##
## Attaching package: ’pcse’

## The following object is masked from ’package:sandwich’:


##
## vcovPC

## -- Attaching packages --------------------------------------- tidyverse 1.3.2 --


## v ggplot2 3.4.0 v purrr 1.0.1
## v tibble 3.1.8 v dplyr 1.1.0
## v tidyr 1.3.0 v stringr 1.5.0
## v readr 2.1.3 v forcats 1.0.0
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
## Loading required package: lattice
##
## Loading required package: survival
##
## Loading required package: Formula
##
##
## Attaching package: ’Hmisc’
##
##
## The following objects are masked from ’package:dplyr’:
##
## src, summarize
##
##
## The following objects are masked from ’package:base’:
##

3
## format.pval, units
##
##
## Registered S3 method overwritten by ’quantmod’:
## method from
## as.zoo.data.frame zoo
##
## Loading required package: zoo
##
##
## Attaching package: ’zoo’
##
##
## The following objects are masked from ’package:base’:
##
## as.Date, as.Date.numeric

Cargamos los datos basados en la base de datos del ejemplo tomado del texto de Guajarati (tabla 12.4)

#### Cargar base de datos ####

setwd("C:/Users/Usuario/OneDrive - Universidad EAFIT/Universidad/Semestre_09/Monitoria/Feb02")


data <- read_excel("data.xls", range = "A4:C50")

Gráfico Y contra X, revisar la relación entre la remuneración y la productividad

#### Gráficas ####

{plot(data$X, data$Y, main = "",


xlab = "Productividad", ylab = "Remuneraciones",
pch = 19)
abline(lm(Y ~ X, data = data), col = "blue")}

4
120
Remuneraciones

100
90
80
70
60

60 80 100 120

Productividad

Podemos cambiar las variables a logaritmo natural con el fin de tenerlas en la misma escala de valores y
disminuir variación entre los datos. La interpretación si ambas están en ln es como una elasticidad “un
incremento de 1% en X está asociado a un cambio de β% en Y”

#### Modelo de regresión log-log ####

data$lY <- log(data$Y)


data$lX <- log(data$X)
modelo1 <- lm(lY~lX, data=data)
summary(modelo1)

##
## Call:
## lm(formula = lY ~ lX, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.041164 -0.017041 0.001037 0.018077 0.038719
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.60668 0.05471 29.37 <2e-16 ***
## lX 0.65222 0.01235 52.80 <2e-16 ***
## ---
## Signif. codes: 0 ’***’ 0.001 ’**’ 0.01 ’*’ 0.05 ’.’ 0.1 ’ ’ 1
##

5
## Residual standard error: 0.02208 on 44 degrees of freedom
## Multiple R-squared: 0.9845, Adjusted R-squared: 0.9841
## F-statistic: 2788 on 1 and 44 DF, p-value: < 2.2e-16

{plot(data$lX, data$lY, main = "",


xlab = "Productividad ln", ylab = "Remuneraciones ln",
pch = 19)
abline(modelo1, col = "blue")}
4.7
Remuneraciones ln

4.5
4.3
4.1

4.0 4.2 4.4 4.6 4.8

Productividad ln

Evaluando los residuales del modelo

Para detectar si existe autocorrelación entre los residuales del modelo de regresión los graficaré respecto al
tiempo, esto me permite ver si los valores que toma y, pueden estar afectados por los residuales de los y
pasados incluidos en el residual de y en el presente.

#### Evaluando los residuales del modelo ####

data$u <- modelo1$residuals


data$std_u <- rstandard(modelo1)

{plot(data$Year, data$u,
ylab="",
xlab="", type="l", xaxt="none")
axis(1, seq(1960,2005,2))

6
mtext(side=1, line=3, "year",cex=1.1)
mtext(side=2, line=3, "u",cex=1.1)
abline(0, 0, col="red")}
0.04
0.02
0.00
u

−0.02
−0.04

1960 1966 1972 1978 1984 1990 1996 2002

year

{plot(data$Year, data$std_u,
ylab="",
xlab="", type="l", xaxt="none")
axis(1, seq(1960,2005,2))
mtext(side=1, line=3, "year",cex=1.1)
mtext(side=2, line=3, "u estandarizados",cex=1.1)
abline(0, 0, col="red")}

7
1
u estandarizados

0
−1
−2

1960 1966 1972 1978 1984 1990 1996 2002

year

En los residuales tanto los normales como los estandarizados (se encuentran entre -1 y 1) se pueden observar
formas que pueden darnos indicios de comportamientos de autocorrelación, no parecen ser generados de
forma aleatoria.
Evaluando ut contra ut−1

#### Graficando los residuales del presente frente a los residuales del pasado ####

data$u_1 <- Lag(data$u)

{plot(data$u_1, data$u,
ylab="",
xlab="", type = "p", pch = 16, col = "blue")
mtext(side=1, line=3, "u(t-1)",cex=1.1)
mtext(side=2, line=3, "ut",cex=1.1)
abline(h=0, v=0, col="black", lty=2)
abline(lm(data$u ~ data$u_1, data = data), col = "green", lty=2)}

8
0.04
0.02
0.00
ut

−0.02
−0.04

−0.04 −0.02 0.00 0.02 0.04

u(t−1)

Podemos observar patrones con cierta correlación.

Realizando algunos test para observar autocorrelación**

• Test de Durbin Watson

Ho : No existe autocorrelación entre los residuales


Si p value < 0.05 rechazo la Ho
Toma el coeficiente estimado de Yt−1 como ρ

#### Test de Durbun Watson ####

dwtest(modelo1)

##
## Durbin-Watson test
##
## data: modelo1
## DW = 0.21756, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0

• Test de Breusch - Godfrey

9
El test de correlación serial de Breusch–Godfrey LM es un test de autocorrelación en los errores y residuos
estadísticos en un modelo de regresión. Hace uso de los errores generados en el modelo de regresión y un
test de hipótesis derivado de éste.
Ho : No existe correlación serial de cualquier orden sobre ρ.

#### Test de Breusch - Godfrey con correlación serial de orden 1 ####

bg1 <- bgtest(modelo1, order = 1)


bg1

##
## Breusch-Godfrey test for serial correlation of order up to 1
##
## data: modelo1
## LM test = 34.02, df = 1, p-value = 5.456e-09

coeftest(bg1)

##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.0062584 0.0282482 0.2216 0.8247
## lX -0.0015019 0.0063783 -0.2355 0.8138
## lag(resid)_1 0.8686522 0.0786108 11.0500 <2e-16 ***
## ---
## Signif. codes: 0 ’***’ 0.001 ’**’ 0.01 ’*’ 0.05 ’.’ 0.1 ’ ’ 1

Correlogramas

#### Test basados en el correlograma ####

#Con código
{acf(data$u, 20, xlim=c(1,20), main = "", ylab = "", xlab = "", xaxt="none")
axis(1, 1:20)
mtext(side=1, line=3, "Rezagos",cex=1.1)
mtext(side=2, line=3, "Autocorrelation (AC)",cex=1.1)}

10
1.0
Autocorrelation (AC)

0.5
0.0
−0.5

1 2 3 4 5 6 7 8 9 11 13 15 17 19

Rezagos

{pacf(data$u, 20, main = "", ylab = "", xlab = "", xaxt="none")


axis(1, 1:20)
mtext(side=1, line=3, "Rezagos",cex=1.1)
mtext(side=2, line=3, "Partial autocorrelation (PAC)",cex=1.1)}

11
0.8
Partial autocorrelation (PAC)

0.6
0.4
0.2
−0.2 0.0

1 2 3 4 5 6 7 8 9 11 13 15 17 19

Rezagos

#Con función
ggAcf(data$u,main="ACF de los residuales")

## Warning in ggplot2::geom_segment(lineend = "butt", ...): Ignoring unknown


## parameters: ‘main‘

12
ACF de los residuales

0.5
ACF

0.0

−0.5
5 10 15
Lag

ggPacf(data$u,main="PAC de los residuales", ylab="PAC")

## Warning in ggplot2::geom_segment(lineend = "butt", ...): Ignoring unknown


## parameters: ‘main‘ and ‘ylab‘

13
PAC de los residuales
0.9

0.6
PAC

0.3

0.0

−0.3

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Lag

Podemos observar un problema de autocorrelación en los residuales y puede ser de orden AR(1) ACF con
decaimiento exponencial, PACF con caida abrupta, propio de un AR

• Test de Ljung Box

H0 : Los datos se distribuyen de forma independiente (es decir, las correlaciones en la población de la que
se toma la muestra son 0, de modo que cualquier correlación observada en los datos es el resultado de la
aleatoriedad del proceso de muestreo
#### Test Ljung Box ####

Box.test(data$u, lag = 1, type = "Ljung-Box")

##
## Box-Ljung test
##
## data: data$u
## X-squared = 35.566, df = 1, p-value = 2.465e-09

Correción de la autocorrelación por mínimos cuadrados generalizados factibles

#### Métodos de corrección ####

# El método de Prais-Winsten: corrige AR(1)


pw <- prais_winsten(lY~lX, data = data, index = data$Year)

14
## Iteration 0: rho = 0
## Iteration 1: rho = 0.8679
## Iteration 2: rho = 0.8912
## Iteration 3: rho = 0.8953
## Iteration 4: rho = 0.8962
## Iteration 5: rho = 0.8964
## Iteration 6: rho = 0.8964
## Iteration 7: rho = 0.8964
## Iteration 8: rho = 0.8964
## Iteration 9: rho = 0.8964

summary(pw)

##
## Call:
## prais_winsten(formula = lY ~ lX, data = data, index = data$Year)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.03546 -0.01079 0.00693 0.02630 0.04666
##
## AR(1) coefficient rho after 9 iterations: 0.8964
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.56421 0.13458 11.62 5.3e-15 ***
## lX 0.66009 0.03035 21.75 < 2e-16 ***
## ---
## Signif. codes: 0 ’***’ 0.001 ’**’ 0.01 ’*’ 0.05 ’.’ 0.1 ’ ’ 1
##
## Residual standard error: 0.01014 on 44 degrees of freedom
## Multiple R-squared: 0.9974, Adjusted R-squared: 0.9974
## F-statistic: 1.721e+04 on 1 and 44 DF, p-value: < 2.2e-16
##
## Durbin-Watson statistic (original): 0.2176
## Durbin-Watson statistic (transformed): 1.67

# El método Cochrane-Orcutt: corrige AR(1)


coch <- cochrane.orcutt(modelo1)
summary(coch)

## Call:
## lm(formula = lY ~ lX, data = data)
##
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.955389 0.192416 10.162 5.283e-13 ***
## lX 0.576819 0.041914 13.762 < 2.2e-16 ***
## ---
## Signif. codes: 0 ’***’ 0.001 ’**’ 0.01 ’*’ 0.05 ’.’ 0.1 ’ ’ 1
##
## Residual standard error: 0.0096 on 43 degrees of freedom
## Multiple R-squared: 0.815 , Adjusted R-squared: 0.8107
## F-statistic: 189.4 on 1 and 43 DF, p-value: < 2.349e-17

15
##
## Durbin-Watson statistic
## (original): 0.21756 , p-value: 5.098e-19
## (transformed): 1.70388 , p-value: 1.253e-01

# El método Newey-West: corrige con orden de rezago mas alto


coeftest(modelo1,vcov=NeweyWest(modelo1,lag=1,verbose=T))

##
## Lag truncation parameter chosen: 1

##
## t test of coefficients:
##
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.606680 0.171168 9.3865 4.536e-12 ***
## lX 0.652216 0.039821 16.3787 < 2.2e-16 ***
## ---
## Signif. codes: 0 ’***’ 0.001 ’**’ 0.01 ’*’ 0.05 ’.’ 0.1 ’ ’ 1

library(nlme)

##
## Attaching package: ’nlme’

## The following object is masked from ’package:forecast’:


##
## getResponse

## The following object is masked from ’package:dplyr’:


##
## collapse

library(EnvStats)

##
## Attaching package: ’EnvStats’

## The following object is masked from ’package:Hmisc’:


##
## stripChart

## The following objects are masked from ’package:stats’:


##
## predict, predict.lm

## The following object is masked from ’package:base’:


##
## print.default

16
2. Simulando con datos y revisando autocorrelación de los errores.

Ejemplo basado en las ecuaciones:

yt = β1 Xt + ut
ut = ρut−1 + ϵt
Crearé un vector X que distribuye normal con tamaño 10.000,media 3 y desviación estándar 1

Tamano <- 10000


#Modelo con un solo regresor
beta <- 0.5
X <- rnorm(Tamano, mean = 3,sd = 1)
summary(X)

## Min. 1st Qu. Median Mean 3rd Qu. Max.


## -1.253 2.343 3.022 3.010 3.677 6.518

Simulando errores, para este caso la correlación los residuales ut con los ut−1 será de ρ = 0.7 Asumiré que
el error entre los residuales será ruido blanco. Los residuales siguen un proceso AR (1)

#Simulando errores

rho <- 0.75


e <- rnorm(Tamano,mean = 0,sd = 1)
u <- rep(NA,Tamano)
#Se le asigna el mismo valor a u de e para el primer dato, dado que
#no se tiene dato para ese valor, por causa de que no es posible calcularlo
u[1] <- e[1]
#Comienza en 2 porque tengo un rezago de 1
for (t in 2: Tamano) u[t] <- rho*u[t-1] + e[t]
plot(u)

17
6
4
2
u

0
−2
−4

0 2000 4000 6000 8000 10000

Index

y <- X*beta + u

y_mco <- lm(y ~ X)


summary(y_mco)

##
## Call:
## lm(formula = y ~ X)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.4047 -1.0421 0.0198 1.0379 5.8663
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.07746 0.04897 1.582 0.114
## X 0.46913 0.01546 30.345 <2e-16 ***
## ---
## Signif. codes: 0 ’***’ 0.001 ’**’ 0.01 ’*’ 0.05 ’.’ 0.1 ’ ’ 1
##
## Residual standard error: 1.525 on 9998 degrees of freedom
## Multiple R-squared: 0.08433, Adjusted R-squared: 0.08424
## F-statistic: 920.8 on 1 and 9998 DF, p-value: < 2.2e-16

18
u_tilde <- y_mco$residuals
u_tilde_rezagado <- rep(NA,Tamano)
for (t in 2:Tamano) u_tilde_rezagado[t] <- u_tilde[t-1]

u_tilde_mco <- lm(u_tilde ~ X + u_tilde_rezagado)


summary(u_tilde_mco)

##
## Call:
## lm(formula = u_tilde ~ X + u_tilde_rezagado)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.6143 -0.6650 0.0058 0.6762 3.8509
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.032448 0.031811 -1.020 0.308
## X 0.010733 0.010043 1.069 0.285
## u_tilde_rezagado 0.760395 0.006497 117.041 <2e-16 ***
## ---
## Signif. codes: 0 ’***’ 0.001 ’**’ 0.01 ’*’ 0.05 ’.’ 0.1 ’ ’ 1
##
## Residual standard error: 0.9908 on 9996 degrees of freedom
## (1 observation deleted due to missingness)
## Multiple R-squared: 0.5781, Adjusted R-squared: 0.578
## F-statistic: 6849 on 2 and 9996 DF, p-value: < 2.2e-16

Graficando la regresión

#### Modelo de regresión

{plot(X, y, main = "",


xlab = "X", ylab = "Y",
pch = 19)
abline(y_mco, col = "blue")}

19
8
6
4
2
Y

0
−2
−4

0 2 4 6

Graficando los residuales del modelo

#### Evaluando los residuales del modelo ####

{plot(u_tilde_rezagado, u_tilde,
ylab="",
xlab="", type = "p", pch = 16, col = "blue")
mtext(side=1, line=3, "u(t-1)",cex=1.1)
mtext(side=2, line=3, "ut",cex=1.1)
abline(lm(u_tilde ~ u_tilde_rezagado), col = "red", lty=2)}

20
6
4
2
ut

0
−2
−4

−4 −2 0 2 4 6

u(t−1)

#### Test de Durbun Watson ####

dwtest(y_mco)

##
## Durbin-Watson test
##
## data: y_mco
## DW = 0.47935, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0

#### Test de Breusch - Godfrey con correlación serial de orden 1 ####

bg1 <- bgtest(modelo1, order = 1)


bg1

##
## Breusch-Godfrey test for serial correlation of order up to 1
##
## data: modelo1
## LM test = 34.02, df = 1, p-value = 5.456e-09

coeftest(bg1)

21
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.0062584 0.0282482 0.2216 0.8247
## lX -0.0015019 0.0063783 -0.2355 0.8138
## lag(resid)_1 0.8686522 0.0786108 11.0500 <2e-16 ***
## ---
## Signif. codes: 0 ’***’ 0.001 ’**’ 0.01 ’*’ 0.05 ’.’ 0.1 ’ ’ 1

Correlogramas

#### Test basados en el correlograma ####

ggAcf(u_tilde,main="ACF de los residuales")

## Warning in ggplot2::geom_segment(lineend = "butt", ...): Ignoring unknown


## parameters: ‘main‘

ACF de los residuales

0.6

0.4
ACF

0.2

0.0

0 10 20 30 40
Lag

ggPacf(u_tilde,main="PAC de los residuales", ylab="PAC")

## Warning in ggplot2::geom_segment(lineend = "butt", ...): Ignoring unknown


## parameters: ‘main‘ and ‘ylab‘

22
PAC de los residuales

0.6

0.4
PAC

0.2

0.0

0 10 20 30 40
Lag

• Test de Ljung Box

#### Test Ljung Box ####

Box.test(u_tilde, lag = 1, type = "Ljung-Box")

##
## Box-Ljung test
##
## data: u_tilde
## X-squared = 5782.2, df = 1, p-value < 2.2e-16

#### Métodos de corrección ####

# El método Cochrane-Orcutt: corrige AR(1)


coch1 <- cochrane.orcutt(y_mco)
summary(coch1)

## Call:
## lm(formula = y ~ X)
##
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.0302462 0.0477663 0.633 0.5266
## X 0.4846220 0.0079411 61.027 <2e-16 ***

23
## ---
## Signif. codes: 0 ’***’ 0.001 ’**’ 0.01 ’*’ 0.05 ’.’ 0.1 ’ ’ 1
##
## Residual standard error: 0.9906 on 9997 degrees of freedom
## Multiple R-squared: 0.2714 , Adjusted R-squared: 0.2714
## F-statistic: 3724.3 on 1 and 9997 DF, p-value: < 0e+00
##
## Durbin-Watson statistic
## (original): 0.47935 , p-value: 0e+00
## (transformed): 2.02412 , p-value: 8.87e-01

# El método Newey-West: corrige con orden de rezago mas alto


coeftest(y_mco,vcov=NeweyWest(y_mco,lag=1,verbose=T))

##
## Lag truncation parameter chosen: 1

##
## t test of coefficients:
##
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.077463 0.062451 1.2404 0.2149
## X 0.469129 0.015454 30.3572 <2e-16 ***
## ---
## Signif. codes: 0 ’***’ 0.001 ’**’ 0.01 ’*’ 0.05 ’.’ 0.1 ’ ’ 1

24

También podría gustarte