Un escalar es un número, o una magnitud expresada en una sola
dimensión. Para asignar un escalar, por ejemplo el número
3, a un objeto, por ejemplo escalar1, se puede
utilizar el siguiente c[odigo:
escalar1<-3
Para conocer el valor del objeto escalar1, basta con
“invocarlo”, es decir, escribir su nombre, de la siguiente forma:
escalar1
## [1] 3
Con los objetos en R se pueden realizar operaciones, por ejemplo, operaciones aritm[eticas simples.] Para ello, crearemos un escalar m[as]:
escalar2<-4
Ahora podemos realizar operaciones entre estos dos escalares. Esas operaciones nos dar[an como resultado otros escalares que, a su vez, podremos asignarlos a nuevos objetos:
escalar1+escalar2
## [1] 7
escalar3<-escalar1+escalar2
escalar4<-escalar3*escalar2
escalar5<-escalar4/escalar1
escalar4
## [1] 28
escalar5
## [1] 9.333333
Para mostrar un resumen de las estad[isticas descriptivas de un
objeto se puede recurrir a la funci[on summary() y para ver
el objeto en formato tabular se puede usar la funci[on
table():
summary(escalar5)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 9.333 9.333 9.333 9.333 9.333 9.333
table(escalar5)
## escalar5
## 9.33333333333333
## 1
Un vector es una magnitud en varias dimensiones. Para crear un vector
y asignarlo a un objeto a partir de sus elementos, se puede utilizar la
funci[on c()(de concatenar), de la siguiente
forma:
vect1<-c(2,1.5,4)
vect2<-c("Juan","Pedro","Sara")
vect3<-c(5,6,2)
De esta forma, tenemos un vector1 formado por lo
elementos num[ericos 2, 1, 5y
4, un vector2formado por lo elementos
Juan, Pedroy Sara.
vect1
## [1] 2.0 1.5 4.0
vect2
## [1] "Juan" "Pedro" "Sara"
vect3
## [1] 5 6 2
Tambi[en se pueden realizar operaciones entre estos vectores y escalares, por ejemplo:
prd1<-vect1*escalar4
prd1
## [1] 56 42 112
Donde prd1no es otra cosa que cada elemento del
vect1multiplicado por el ``èscalar4```.
Cada elemento de un vector tiene asignada una ubicación, en el caso de un vector, para llamar un elemento del vector basta con usar el nombre del vector y la ubicación del elemento entre corchete. sí, por ejemplo:
vect1[2]
## [1] 1.5
vect1
## [1] 2.0 1.5 4.0
vect2[3]
## [1] "Sara"
vect2
## [1] "Juan" "Pedro" "Sara"
Y podemos crear objetos asignándoles estos elementos:
objeto1<-vect3[1]
objeto1
## [1] 5
Objetos que podrían ser otros vectores
objeto2<-vect2[2:3]
objeto2
## [1] "Pedro" "Sara"
objeto3<-vect2[1:2]
objeto3
## [1] "Juan" "Pedro"
Las siguientes expresiones generan dos objetos idénticos:
objeto4<-vect2[c(1,3)]
objeto4
## [1] "Juan" "Sara"
objeto4_2<-vect2[-2]
objeto4_2
## [1] "Juan" "Sara"
Las matrices son conjuntos de elementos dispuestos en filas (rows) y columnas (columns). Cada una de estas filas o de estas columnas pueden ser entendidas como vectores. De esta forma, suponiendo tres vectores:
vector1<-c(1,2,3)
vector2<-c(4,5,6)
vector3<-c(7,8,9)
Puedo generar una matriz en la que cada uno de estos vectores sea una columna:
matrizA<-cbind(vector1,vector2,vector3)
matrizA
## vector1 vector2 vector3
## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9
O una en la que cada uno de esos vectores sea una fila:
matrizB<-rbind(vector1,vector2,vector3)
matrizB
## [,1] [,2] [,3]
## vector1 1 2 3
## vector2 4 5 6
## vector3 7 8 9
Así como se pueden llamar elementos de vectores, se pueden llamar elementos (escalares o vectores) de otras matrices:
vectorB<-matrizA[3]
vectorC<-matrizB[,2]
vectorD<-matrizB[1,-2]
vectorB
## [1] 3
vectorC
## vector1 vector2 vector3
## 2 5 8
vectorD
## [1] 1 3
###Bases de datos a partir de matrices Se pueden convertir matrices en bases de datos, lo que puede facilitar su manejo:
base1<-as.data.frame(matrizA)
base2<-as.data.frame(matrizB)
$)En una base de datos, el acceso no se da por la ubicación de los
elementos, sino por lo campos (columnas) a través de $. Por
ejemplo,
base1$vector1
## [1] 1 2 3
Podemos saber cuáles son los nombres de los campos a través de la
función names():
names(base1)
## [1] "vector1" "vector2" "vector3"
Esto nos permite también sustituir los nombres de los campos, quizás para asignar algunos que nos sean más fáciles de manipular en líneas de código.
nombre_vectores<-c("variable1","variable2","variable3")
names(base1)<-nombre_vectores
Confirmemos que estén cambiados esos nombres:
names(base1)
## [1] "variable1" "variable2" "variable3"
R cuenta con algunas bases de datos precargadas. Podemos trabajar con
ellas. Por ejemplo, ahora podemos utilizar la base mtcars.
Para facilitar su manejo dentro de nuestro código, vamos crear el objeto
base que sea la base mtcars.
base<-mtcars
dim(base)
## [1] 32 11
Por las dimensiones de la base (dim(base)), sabemos que
tiene 32 observaciones (filas) de las cuales recoge 11 variables
(columnas).
Pero ¿qué contiene esta base? R también contiene ayuda acerca de sus
distintos objetos. Se puede invocar la ayuda a través de
??, por ejemplo ??mtcars. Esta ayuda nos dará
una dscripción general, fuente, dimensiones, diccionario de variables y
otros detalles.
Creemos una base de datos que parta de mtcars, pero que
sólo incluya a los vehículos con más de cuatro cilindros.
##1 forma
base1<-subset(base,base$cyl>4)
##2 forma (matricial)
base1_2<-base[base$cyl>4,]
dim(base1)
## [1] 21 11
dim(base1_2)
## [1] 21 11
Como ambas formas dan la misma base, vemos que tiene las mismas
dimensiones. Como era de esperarse, mantiene las mismas 11 variables,
pero ahora sólo 21 observaciones (por lo que deducimos que 11 registros,
32 - 21, contenían autos con 4 cilindros o más).
Existe una tercera forma de generar la misma base, a través de la
librería dplyr. Pero para ello primero tenemos que instalar
el paquete:
install.packages('dplyr')
Una vez que se cuenta instalado el paquete, invocamos la librería
library(dplyr)
Y apliquemos
base1_3<-base%>%
filter(cyl>4)
dim(base1_3)
## [1] 21 11
De la misma forma podemos usar filtros para generar distintas bases a partir de la base original. Por ejemplo: * Vehículos con cuatro cilindros o más
base2<-subset(base,base$cyl>=4)
base2_2<-base[base$cyl>=4,]
base2_3<-base%>%
filter(cyl>=4)
base3<-subset(base,base$cyl<4|base$cyl>6)
base3_2<-base[base$cyl<4|base$cyl>6,]
base3_3<-base%>%
filter(cyl<4|cyl>6)
base4<-subset(base,base$cyl>4&base$cyl<6)
base4_2<-base[base$cyl>4&base$cyl<6,]
base4_3<-base%>%
filter(cyl>4&cyl<6)
Esto nos es útil porque nos permite aplicar operaciones a subconjuntos de una base original. Por ejemplo, con los veh[iculos que tienen menos de cuatro o más de seis cilindros calcule la media (promedio) de la variable wt:
mean(base3$wt)
## [1] 3.999214
base_deber<-base[base$hp>100&base$hp<200,]
mean(base_deber$mpg)
## [1] 19.21875
base_deber2<-base[base$hp<100|base$hp>200,]
mean(base_deber2$mpg)
## [1] 20.9625
Lo más probable es que debamos trabajar con bases de datos que no se encuentran precargadas en R. Para que este trabajo sea replicable, es recomendable trabajar con proyectos.
En este caso puntual, vamos a cargar una pequeña base de datos que se
encuentra en formato xlsx. Para ello, requerimos del paquete
readxl.
install.packages('readxl')
library(readxl)
Este paquete contiene la función read_excel() que
requiere exclusivamente la dirección en la que se encuentra la base,
dentro de la carpeta del proyecto. En este caso, se encuentra dentro de
la carpeta “insumos”.
base.clase3<-read_excel("insumos/pib_can_anual.xlsx")
## New names:
## • `` -> `...20`
dim(base.clase3)
## [1] 2210 20
También se puede utilizar las opciones de RStudio para ’‘’importar’’’ bases externas, mediante la opción ’‘’File/Import dataset’’’:
{}
Como se mencionó previamente, puede resultar útil modificar los nombres de algunos campos. Por ejemplo:
names(base.clase3)[6]<-'agricultura'
O se puede reemplazar los datos no disponibles (NA) por ceros (0):
base.clase3[is.na(base.clase3)]<-0
Para describir la base, para hacer una estadística básica o, inclusive, para mantener un seguimiento de la base, puede resultar útil saber cuántas observaciones tengo por variable, por ejemplo, para las variables año y provincia:
table(base.clase3$year)
##
## 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020
## 221 221 221 221 221 221 221 221 221 221
table(base.clase3$prov)
##
## AZUAY BOLÍVAR CAÑAR CARCHI
## 150 70 70 60
## CHIMBORAZO COTOPAXI EL ORO ESMERALDAS
## 100 70 140 71
## GALÁPAGOS GUAYAS IMBABURA LOJA
## 30 250 60 160
## LOS RÍOS MANABÍ MORONA SANTIAGO NAPO
## 130 220 120 50
## ORELLANA PASTAZA PICHINCHA SANTA ELENA
## 40 40 80 30
## SANTO DOMINGO SUCUMBÍOS TUNGURAHUA ZAMORA CHINCHIPE
## 19 70 90 90
Y también la podemos filtrar. Por ejemplo, podemos crar una base más pequeña que sólo incluya a la provincia de Santo Domingo:
base_stodgo<-base.clase3 %>%
filter(dpa_prov=="23")
dim(base_stodgo)
## [1] 19 20
O a la provincia de Manabí:
base_manabi<-base.clase3 %>%
filter(prov=="MANABÍ")
dim(base_manabi)
## [1] 220 20
Además, podemos quedarnos sólo con las variables necesarias:
names(base_manabi)
## [1] "year"
## [2] "prov"
## [3] "dpa_prov"
## [4] "canton"
## [5] "dpa_can"
## [6] "agricultura"
## [7] "Explotacion de minas y canteras"
## [8] "Manufactura\r\n\r\n"
## [9] "Suministro de electricidad y de agua"
## [10] "Construccion\r\n\r\n"
## [11] "comercio\r\n\r\n"
## [12] "Alojamiento y servicios de comida"
## [13] "Transporte, informacion y comunicaciones"
## [14] "Actividades financieras\r\n"
## [15] "Actividades profesionales e inmobiliarias"
## [16] "Administracion publica \r\n"
## [17] "Enseñanza\r\n\r\n"
## [18] "Salud\r\n\r\n"
## [19] "Otros servicios\r\n\r\n"
## [20] "...20"
base_manabi1<-base_manabi %>%
select(year, prov, dpa_prov, canton, dpa_can, agricultura, 'Explotacion de minas y canteras')
dim(base_manabi1)
## [1] 220 7
A través de la metodología de mínimos cuadrados ordinarios, se puede estimar la relación lineal existente entre dos o más variables, y determinar si esta es estadísticamente significativa.
Por ejemplo, contamos con una base de datos utilizada por un profesor de economía:
base.clase4<-read.csv("insumos/base_final.csv")
names(base.clase4)
## [1] "anio" "pib" "consumo" "inversion"
## [5] "gasto" "exportaciones" "importaciones" "impuestos"
## [9] "oferta_monetaria" "interes_real"
De los nombres de la base vemos que esta incluye 10 variables.
base.clase4$anio
## [1] 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974
## [16] 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989
## [31] 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004
## [46] 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019
## [61] 2020 2021 2022 2023 2024
Al invocar el elemento ``ànio``` observamos que este va de 1960 a 2024, por tanto, podemos deducir que esta base de datos incluye 65 observaciones.
dim(base.clase4)
## [1] 65 10
De hecho, tiene 65 observaciones para 10 variables (incluyendo
anio).
Ahora bien, podemos plantearnos la siguiente instrucción: estime la propensión marginal al consumo para el Ecuador desde 1980 hasta 2024.
Conviene recordar dos cosas: * Al momento, tenemos intalado el
paquete dplyr e invocada la librería dplyr. Si
ha empezado una nueva sesión en R, no olvide invocar esta librería. * La
propensión marginal al consumo se refiere al aumento en el consumo
producto de un aumento del ingreso disponible en la ecuación keynesiana
del consumo: \[ C= A + cYd \] donde
Ces el consumo, À es el consumo autónomo, que
no depende del ingreso disponible, Ydes el ingreso
disponible, y ces la propensión marginal al consumo.
Primero debemos filtrar la base para que incluya sólo los años correspondientes, esto se puede hacer de la siguiente forma:
base_cl41980_2024<-base.clase4 %>%
filter(base.clase4$anio>=1980&base.clase4$anio<=2024)
dim(base_cl41980_2024)
## [1] 45 10
Como era de esperarse, en esta nueva base sólo tenemos 45 observaciones.
Nótese que bien pudimos utilizar sólo el siguiente código para filtrar la base, porque 2024 es el año límite de nuestra base original:
base_cl41980_2024<-base.clase4 %>%
filter(base.clase4$anio>=1980)
dim(base_cl41980_2024)
## [1] 45 10
Sucede que nuestra base no incluye el ingreso disponible
(Yd), pero la podemos calcular sabiendo que el ingreso
disponible es el ingreso total menos impuestos:
Yd=PIB-impuestos:
base_cl41980_2024$yd<-base_cl41980_2024$pib-base_cl41980_2024$impuestos
O, de otra forma:
base_cl41980_2024<-base_cl41980_2024%>%
mutate(yd2=pib-impuestos)
Note que hemos creado dos nuevas variables (yd y
yd2), lo cual debería verse reflejado en las dimensiones de
nuestra base:
dim(base_cl41980_2024)
## [1] 45 12
¿Son yd y yd2 iguales?
base_cl41980_2024$yd==base_cl41980_2024$yd2
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [16] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [31] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
Sí, son iguales en todos y cada uno de sus elementos. (La operación
==, no es un operador de asignación, sino de comprobación
lógica)
Partimos de la ecuación del consumo keynesiano que describimos anteriormente (C= A + cYd), pero la ajustamos a aquello que vamos a estimar mediante el modelo:
\[ Consumo = \beta_0 + \beta_1*Yd + \mu \]
Ahora llega el momento de correr esa regresión lineal en R con la
función lm(). Para facilitar la lectura, vamos a utilizar
nomenclatura científica, así que incluimos la opción
scipen.
modelo<-lm(consumo~yd,data=base_cl41980_2024)
modelo
##
## Call:
## lm(formula = consumo ~ yd, data = base_cl41980_2024)
##
## Coefficients:
## (Intercept) yd
## 1.417e+10 6.847e-01
summary(modelo)
##
## Call:
## lm(formula = consumo ~ yd, data = base_cl41980_2024)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.901e+09 -1.070e+09 -1.952e+08 1.233e+09 6.870e+09
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.417e+10 9.352e+08 15.15 <2e-16 ***
## yd 6.847e-01 1.397e-02 49.01 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.45e+09 on 43 degrees of freedom
## Multiple R-squared: 0.9824, Adjusted R-squared: 0.982
## F-statistic: 2402 on 1 and 43 DF, p-value: < 2.2e-16
Para nuestra siguiente instrucción podríamos plantearnos cuál es la elasticidad del consumo frente al ingreso disponible, utilizando el logaritmo natural de las variables, para ello creamos las nuevas variables de logaritmo natural y corremos el modelo de mínimos cuadrados ordinarios:
base_cl41980_2024<-base_cl41980_2024%>%
mutate(ln_consumo=log(consumo),
ln_yd=log(yd))
modelo2<-lm(ln_consumo~ln_yd,data=base_cl41980_2024)
summary(modelo2)
##
## Call:
## lm(formula = ln_consumo ~ ln_yd, data = base_cl41980_2024)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.113225 -0.021156 0.005125 0.031844 0.124035
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.70498 0.45862 14.62 <2e-16 ***
## ln_yd 0.72715 0.01852 39.26 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.05187 on 43 degrees of freedom
## Multiple R-squared: 0.9729, Adjusted R-squared: 0.9722
## F-statistic: 1541 on 1 and 43 DF, p-value: < 2.2e-16
En el caso ecuatoriano, puede ser de utilidad empezar por el paso 5, como una especie de paso 0.
Por ejemplo, se nos ha provisto con una base que incluye algunos indicadores del país.
base<-read.csv('insumos/datos_ecuador.csv')
Los indicadores son:
names(base)
## [1] "anio" "trim"
## [3] "RiesgoPais" "PIB_MillonesUSD"
## [5] "TasaDesempleo_Porcentaje" "IED_MillonesUSD"
Al incluir la variable trim, parecen ser datos
trimestrales que se encuentran entre:
base$anio[1]
## [1] 2010
base$anio[63]
## [1] 2025
Contando con estos datos, nos podemos preguntar si el empleo se encuentra relacionado con el PIB.
Hipótesis: el desempleo tiene una relación negativa con el PIB
Esta hipótesis puede surgir de haber observado un gráfico de mabs variables:
plot(base$PIB_MillonesUSD,base$TasaDesempleo_Porcentaje)
Para demostrar esta hipótesis, podemos plantear el siguiente modelo: Modelo1: \[ Desempleo = \beta_0 + \beta_1 * PIB \]
Que puede responder al siguiente código (se presentan dos formas diferentes de llegar a lo mismo, compruebe que se obtengan los mismos resultados):
modelo_desempleo<-lm(TasaDesempleo_Porcentaje~PIB_MillonesUSD,data=base)
modelo_desempleo2<-lm(base$TasaDesempleo_Porcentaje~base$PIB_MillonesUSD)
summary(modelo_desempleo)
##
## Call:
## lm(formula = TasaDesempleo_Porcentaje ~ PIB_MillonesUSD, data = base)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.6369 -0.8933 -0.1452 0.4323 7.6118
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 8.373e+00 9.208e-01 9.093 5.95e-13 ***
## PIB_MillonesUSD -1.072e-04 3.556e-05 -3.014 0.00376 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.377 on 61 degrees of freedom
## Multiple R-squared: 0.1296, Adjusted R-squared: 0.1153
## F-statistic: 9.081 on 1 and 61 DF, p-value: 0.003758
summary(modelo_desempleo2)
##
## Call:
## lm(formula = base$TasaDesempleo_Porcentaje ~ base$PIB_MillonesUSD)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.6369 -0.8933 -0.1452 0.4323 7.6118
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 8.373e+00 9.208e-01 9.093 5.95e-13 ***
## base$PIB_MillonesUSD -1.072e-04 3.556e-05 -3.014 0.00376 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.377 on 61 degrees of freedom
## Multiple R-squared: 0.1296, Adjusted R-squared: 0.1153
## F-statistic: 9.081 on 1 and 61 DF, p-value: 0.003758
Debemos considerar el significado de estos resultados:
En la misma base, contamos con datos de la inversión extranjera
directa (IED_MillonesUSD) y del Riesgo País
(RiesgoPais).
Podemos partir de la idea generalizada de que la IED depende del riesgo país, y nos generamos la hipótesis de que a un mayor Riesgo País, una menor IED, es decir, tienen una relación inversa.
plot(base$RiesgoPais,base$IED_MillonesUSD)
Comprobemos con el método de mínimos cuadrados ordinarios:
modelo_ied<-lm(base$IED_MillonesUSD~base$RiesgoPais)
summary(modelo_ied)
##
## Call:
## lm(formula = base$IED_MillonesUSD ~ base$RiesgoPais)
##
## Residuals:
## Min 1Q Median 3Q Max
## -317.37 -55.76 -16.82 54.14 279.09
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 229.89653 29.74552 7.729 1.29e-10 ***
## base$RiesgoPais -0.04321 0.02458 -1.758 0.0838 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 107.9 on 61 degrees of freedom
## Multiple R-squared: 0.04821, Adjusted R-squared: 0.0326
## F-statistic: 3.089 on 1 and 61 DF, p-value: 0.08382
Se observa que el signo es negativo, pero…la variable es significativa sólo al 80% de confianza.
Esto significa que, al 90% de confianza, la variable puede adoptar el valor de cero (0):
confint(modelo_ied)
## 2.5 % 97.5 %
## (Intercept) 170.41669562 289.37637141
## base$RiesgoPais -0.09236639 0.00594765
Pero al 80% de confianza, no:
confint(modelo_ied, level = 0.8)
## 10 % 90 %
## (Intercept) 191.3587003 268.43436676
## base$RiesgoPais -0.0750589 -0.01135984
Alguno podría plantear que quizás el Riesgo País toma un poco de tiempo para atraer a la IED, así que quizás convenga relacionar el Riesgo País con la IED atraída 1 ó 2 trimestres después, sí que creamos esas variables rezagadas y corramos los modelos correspondientes:
# Creamos el riesgo país rezagado a un periodo
base<-base%>%
mutate(RP_tminus1=lag(RiesgoPais,n=1))
# modelo rezagado
modelo_iedlag1<-lm(base$IED_MillonesUSD~base$RP_tminus1)
summary(modelo_iedlag1)
##
## Call:
## lm(formula = base$IED_MillonesUSD ~ base$RP_tminus1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -319.35 -55.08 -20.33 52.81 271.41
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 208.40204 30.70883 6.786 5.78e-09 ***
## base$RP_tminus1 -0.02284 0.02527 -0.904 0.37
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 110.7 on 60 degrees of freedom
## (1 observation deleted due to missingness)
## Multiple R-squared: 0.01343, Adjusted R-squared: -0.003015
## F-statistic: 0.8167 on 1 and 60 DF, p-value: 0.3698
# Creamos el riesgo país rezagado a dos periodos, y realizamos el modelo
base<-base%>%
mutate(RP_tminus2=lag(RiesgoPais,n=2))
modelo_iedlag2<-lm(base$IED_MillonesUSD~base$RP_tminus2)
summary(modelo_iedlag2)
##
## Call:
## lm(formula = base$IED_MillonesUSD ~ base$RP_tminus2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -320.59 -53.15 -14.34 49.29 266.92
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 214.06880 30.81112 6.948 3.32e-09 ***
## base$RP_tminus2 -0.02707 0.02533 -1.069 0.29
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 111 on 59 degrees of freedom
## (2 observations deleted due to missingness)
## Multiple R-squared: 0.01899, Adjusted R-squared: 0.002358
## F-statistic: 1.142 on 1 and 59 DF, p-value: 0.2896
Nótese que, si bien se mantiene el signo, los coeficientes tienen magnitudes menores y son menos significativos. De hecho, no son significativos, por lo que no parece que exista una relación entre el Riesgo País y la entrada de Inversión Extranjera Directa uno o dos trimestres después.
Noten que hemos realizado estas dos estimaciones manualmente, pero los modelos ARMA (Auto Regressive Mobile Average) permiten realizarlo para un número indefinido de regos automáticamente. Ello será revisado, si es posible, en una próxima oportunidad.
#) antes del
código de instalación (install.packages())