R y RStudio constituyen herramientas muy populares tanto para el manejo de bases de datos como para el análisis de las mismas, sin embargo la presente guía abarca únicamente las operaciones y comandos básicos que a manera de introducción pueden guiar en los primeros pasos de un estudiante de Econometría.
Utilizar siempre letras minúsculas, sin tildes, ni caracteres especiales. Determinar separaciones con comas (,). Determinar decimales con puntos (.).
En el contexto de RStudio se entiende por objeto cualquier elemento que sea “cargado” en la interfaz para su uso. Los objetos por tanto, podrían ser elementos numéricos tales como escalares o mejor aún elementos más “extensos” como bases de datos.
Entendemos por escalares aquellos números caracterizados únicamente por su valor numérico y su unidad. Para “crearlos” dentro de RStudio podemos utilizar los siguientes comandos:
escalar1 <- 3
escalar2 <- 5
En el ejemplo mostrado se ha asignado al objeto escalar1 eln valor de 3 y al escalar2 el valor de 5.
escalar1
## [1] 3
Otra de las ventajas de RStudio es su capacidad de trabajar como calculadora.
escalar1 + escalar2
## [1] 8
escalar3 <- escalar1 + escalar2
escalar3 <- escalar1 + escalar2
escalar4 <- escalar3 * escalar2
escalar5 <- escalar4 / escalar1
Para conocer el valor de cada objeto basta con “llamarlo”.
escalar1
## [1] 3
Aunque también se puede usar los siguientes comandos:
escalar5
## [1] 13.33333
summary(escalar5)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 13.33 13.33 13.33 13.33 13.33 13.33
table(escalar5)
## escalar5
## 13.3333333333333
## 1
Para configurar un vector se requiere usar la siguiente estructura:
vect1 <- c(2,1.5,4) #vector numérico
vect2 <- c("Juan","Pedro","Sara") #vector de caracteres
vect3 <- c(7,6,2) #vector numérico
Para realizar operaciones con vectores se pueden emplear operaciones algebraicas.
prd1 <- vect1 *escalar4 #multiplica el vector1 por el escalar4
Para realizar cambios en los vectores se pueden usar los siguientes comandos:
vect1[2] #devuelve el valor de la posición 2 del vector1
## [1] 1.5
vect2[3] #devuelve el valor de la posición 3 del vector2
## [1] "Sara"
objeto1 <- vect3[1] #crea el objeto1 con el valor de la posición 1 del vector3
objeto2 <- vect2[2:3] #crea el objeto2 con los valores de las posiciones 2 y 3 del vector2
objeto3 <- vect2[1:2] #crea el objeto3 con los valores de las posiciones 1 y 2 del vector2
objeto4 <- vect2[c(1,3)] #crea el objeto4 solo con los valores de las posiciones 1 y 3 del vector2
objeto4
## [1] "Juan" "Sara"
objeto4_f2 <- vect2[-2] #crea el objeto4_f2 excluyendo el valor de las posición 2 del vector2
objeto4_f2
## [1] "Juan" "Sara"
Para conformar matrices se pueden organizar sus respectivos vectores. Primero se establecen los vectores:
vector1 <- c(1,2,3)
vector2 <- c(4,5,6)
vector3 <- c(7,8,9)
Para armar columnas en matrices se las puede “unir” así:
matrizA <- cbind(vector1,vector2,vector3) #crea una matriz donde cada columna es un vector.
matrizA
## vector1 vector2 vector3
## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9
Para armar filas en matrices se las puede “unir” de esta manera:
matrizB <- rbind(vector1,vector2,vector3) #crea una matriz donde cada fila es un vector.
matrizB
## [,1] [,2] [,3]
## vector1 1 2 3
## vector2 4 5 6
## vector3 7 8 9
Para crear bases de datos se puede emplear la siguiente forma:
base1 <- as.data.frame(matrizA)
base1
## vector1 vector2 vector3
## 1 1 4 7
## 2 2 5 8
## 3 3 6 9
base2 <- as.data.frame(matrizB)
base2
## V1 V2 V3
## vector1 1 2 3
## vector2 4 5 6
## vector3 7 8 9
Para seleccionar objetos en bases de datos se puede seleccionar las variables antecediendo el símbolo $.
base1$vector1
## [1] 1 2 3
Para cambiar de nombre a las variables se puede usar el comando name.
nombre_vectores <- c("variable1","variable2","variable3") #cambia los nombres de los Vx por "variablex"
names(base1) <- nombre_vectores #asigna los nombres de de las variables a la base1
base1
## variable1 variable2 variable3
## 1 1 4 7
## 2 2 5 8
## 3 3 6 9
Antes de iniciar un nuevo ejercicio se recomienda “limpiar” la consola.
rm(list = ls()) #limpia la consola
Para la ejecución de código, en muchos casos se requiere instalar y cargar las librerías necesarias. La instalación de librerías se realiza de la siguiente forma:
install.packages('readxl') #instala la librería readxl que permite importar datos desde Microsoft Excel
La carga de librerías se ejecuta con el comando library
library(readxl) #carga la librería readxl
library(dplyr) #carga la librería dplyr
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
Para cargar bases de datos incorporadas en RStudio, es decir bases de datos internas se realiza lo siguiente:
base <- mtcars #carga la base de datos de datos interna mtcars y la asigna a base
base
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
## Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
## Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
## Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
## Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
## Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
## Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
## AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
## Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
## Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
A continuación se mostrarán 3 formas de filtrar bases de datos:
Utiliza la estructura: subset(base, columna_de_la_base + operador_condicional + valor_para_filtrar)
base1_f1 <- subset(base, base$cyl > 4) #filtra los datos menores a 4 de la columna cyl
base1_f1
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
## Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
## Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
## Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
## Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
## Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
## Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
## AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
## Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
## Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
Utiliza la estructura: base(columna_de_la_base + operador_condicional + valor_para_filtrar, dejar en blanco apra aplicar a todas las columnas)
base1_f2 <- base[base$cyl>4,] #elimina
base1_f2
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
## Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
## Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
## Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
## Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
## Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
## Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
## AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
## Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
## Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
Utiliza la estructura: base Ctrl+Shif+M filter(columna_de_la_base + operador_condicional + valor_para_filtrar)
base1_f3 <- base %>% #el sìmbolo %>% se condigue con Ctrl+Shift+M
filter(cyl>4) #filtra la columna cyl para valores mayores a 4
base1_f3
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
## Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
## Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
## Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
## Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
## Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
## Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
## AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
## Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
## Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
Quédese con los vehículos que tienen menos de 4 y más de 6 cilindros.
base_ejemplo1 <- base[base$cyl < 4 | base$cyl > 6,]
base_ejemplo1
## mpg cyl disp hp drat wt qsec vs am gear carb
## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
## Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
## Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
## Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
## Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
## AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
## Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
## Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
Quédese con los vehiculos que tienen una potencia entre 100 y 200 Hp.
base_ejemplo2 <- subset(base, base$hp>100 & base$hp<200)
base_ejemplo2
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
## Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
## Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
## Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
## Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
## Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
## Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
## AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
## Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
Quédese con los vehiculos que tienen una potencia menor a 100 y mayor a 200 Hp.
base_ejemplo3 <- base[base$hp<100 | base$hp >200,]
base_ejemplo3
## mpg cyl disp hp drat wt qsec vs am gear carb
## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
## Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
Se utiliza el comando mean y se puede asignar la columna con los datos a promediar.
mean(base_ejemplo3$wt) #calcula el promedio de la columna wt
## [1] 3.188687
names(base_ejemplo3)[2] <- 'cilindros' #cambia el nombre de la columna 6 por "cilindros"
base_ejemplo3
## mpg cilindros disp hp drat wt qsec vs am gear carb
## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
## Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
Algunas bases de datos registran los valores faltantes con las letras “na”. Para evitar errores se recomienda reemplazar estas siglas por ceros.
base_ejemplo3[is.na(base_ejemplo3)]<- 0
base_ejemplo3
## mpg cilindros disp hp drat wt qsec vs am gear carb
## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
## Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
table(base_ejemplo3$hp) #genera una tabla ordenada de los datos de la variable solicitada
##
## 52 62 65 66 91 93 95 97 205 215 230 245 264 335
## 1 1 1 2 1 1 1 1 1 1 1 2 1 1
Para utilizar otras bases de datos en formato .xlsx o en formato .csv podemos emplear los comandos siguientes:
base <- read_excel('insumos/pib_can_anual.xlsx') #para archivos excel
base <- read.csv('insumos/base_final.csv') #para valores separados por comas
Para seleccionar solo una variable se puede emplear:
base_santo <- base %>%
filter(dpa_prov == "23") #indica la variable para el filtro
Para trabajar solamente con los valores de la variable filtrada:
base_manabi <- base %>%
filter(prov == "MANABÍ") #selecciona solo los valores de la variable filtrada
Para mantener únicamente las variables necesarias para el análisis
names(base_manabi)
base_manabi <- base_manabi %>%
select(year, prov, dpa_prov, canton, dpa_can, agricultura,`Explotacion de minas y canteras`) #selecciona solo las variables deseadas
Con el comando summary se obtiene la vista resumen de una variable.
summary(base_manabi$ agricultura)
Para eliminar una variable que se encuentre en la última columna de la base, se puede eliminar su respectiva columna. En el siguiente ejemplo se dejará en blanco el espacio antes de la coma para dejar sin cambios las columnas anteriores a la última.
base_manabi1 <- base_manabi[,-7]
Se lleva a cabo mediante el comando mutate
base_manabi1 <- base_manabi1 %>%
mutate(tipo_pib = ifelse(agricultura > 29351, "pib_alto","pib_bajo"))
Adicionalmente se puede agregar otro formato binario para la variable dicotómica
base_manabi1 <- base_manabi1 %>%
mutate(tipo = ifelse(agricultura > 29351, "1","0"))
También es posible crear variables que filtren los periodos deseados. Para el ejemplo se creará una nueva variable pre terremoto y post terremoto de Manabí 2016.
base_manabi1 <- base_manabi1 %>%
mutate(periodo = ifelse(year < 2016, "pre","post"))
De esta manera se puede separar la base de datos por periodos.
base_manabi_pre <-base_manabi1 %>%
filter(periodo == "pre")
base_manabi_post <-base_manabi1 %>%
filter(periodo == "post")
Para el ejemplo procederemos a sumar el PIB de agricultura por Cantón teniendo en cuenta los periodos pre y post evento de Manabí.
b_m_pre_agg <- base_manabi_pre %>%
group_by(canton) %>%
summarise(total_agricultura_pre = sum(agricultura))
b_m_post_agg <- base_manabi_post %>%
group_by(canton) %>%
summarise(total_agricultura_post = sum(agricultura))
Las regresiones lineales tienen pora base la Ecuación de la recta y su finalidad es encontrar el modelo que mejor la satisface con respecto a un conjunto de datos. Adicionalmente para la ecuación buscada se tendrán en cuenta los errores en las distancias desde cada punto (dato) a la recta. En resumen: mediante la resgresión lineal se busca el modelo que mejor explica la base de datos.
Para prevenir la aparición de resultados en notación científica, previamente ejecutaremos el comando options.
options(scipen = 999)
Ecuación de la recta como modelo de regresión lineal: \(y = B1 + B2*x + u\)
A modo de ejemplo buscaremos la regresión lineal como relación entre las variables consumo e ingreso disponible: \(C = B1 + B2*Y + u\)
Si llamamos modelo a la regresión lineal entre la variable “consumo” (C) y la variable “ingreso_disponible” (Y), se realizará de la siguiente forma:
modelo <- lm(consumo ~ ingreso_disponible, data = base)
El resultado obtenido con el comando summary(modelo) sería:
lm(formula = consumo ~ ingreso_disponible, data = base)
Residuals:
Min 1Q Median 3Q Max
-4901431887 -1069569495 -195228251 1233327995 6870277166
Coefficients:
Estimate Std. Error t value
(Intercept) 14165415645.32893 935246532.56462 15.15
ingreso_disponible 0.68472 0.01397 49.01
Pr(>|t|)
(Intercept) <0.0000000000000002 ***
ingreso_disponible <0.0000000000000002 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 2450000000 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: < 0.00000000000000022
Para aplicar variables logarítmicas podemos utilizar las funciones mutate y log.
base <- base %>%
mutate(ln_consumo = log(consumo),
ln_ingreso_disponible = log(ingreso_disponible2))
Obteniendo los siguientes resultados:
Call:
lm(formula = ln_consumo ~ ln_ingreso_disponible, data = base)
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 <0.0000000000000002 ***
ln_ingreso_disponible 0.72715 0.01852 39.26 <0.0000000000000002 ***
---
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: < 0.00000000000000022
Para determinar los intervalos de confianza se puede usar la función confint obteniendo el resultado siguiente:
confint(modelo)
2.5 % 97.5 %
(Intercept) 12279311258.7509937 16051520031.9068737
ingreso_disponible 0.6565423 0.7128939
La lógica de cualquier indicador es una proporción o porcentaje. Un indicador se puede ejemplificar como:
\(I = (cantidad de observaciones con cierta caracteristica ) / (total de poblacon de interes)\)
Si y solo si tenemos el total de la población o la muestra provenga de un muestreo aleatorio simple. Un Muestreo Aleatorio Simple (MAS) al menos requiere: 1. Un listado de todos los elementos de la población; 2. Que la probabilidad de selección sea la misma para todos los individuos, y 3. Que el resultado sea representativo de la población.
Se consideran rezagadas aquellas variables cuyos efectos se observan en periodos posteriores a su ocurrencia. Para implementarlas se puede usar el comando lag.
Supongamos un modelo con la hipótesis de que el aumento del Riesgo país disminuye la inversión extranjera directa. \(Modelo: IED = B1 + B2*RP + u\)
names(base)
modelo_ied <- lm(IED_MillonesUSD ~ RiesgoPais, data = base)
summary(modelo_ied)
Resultando en:
Call:
lm(formula = IED_MillonesUSD ~ RiesgoPais, data = base)
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 0.000000000129 ***
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
Considerando que la Inversión extranjera directa no se efectúa de manera inmediata, entonces se vuelve necesario incluir un rezago en la acción de la variable Riesgo país.
Hipótesis: RP de (t-1) afecta la IED en un (t)
base<- base %>%
mutate(ied_rezagado1 = lag(IED_MillonesUSD, n=1),
rp_rezagado1 = lag(RiesgoPais, n=1))
names(base)
model_ied_lag1 <- lm(IED_MillonesUSD ~ rp_rezagado1, data = base)
Obteniéndose:
Call:
lm(formula = IED_MillonesUSD ~ rp_rezagado1, data = base)
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 0.00000000578 ***
rp_rezagado1 -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
Para el manejo de encuestas será necesarias la instalación de las siguientes librerías:
library("dplyr")
library("srvyr")
library("rio")
library("import") #para archivos de spss o .dta
Luego de la carga de la base, se procede a realizar el diseño muestral dm. Para el ejemplo se utilizará una base con datos oficiales sobre desnutrición crónica infantil en Ecuador para el año 2018.
dm <- personas %>% #diseño muestral de la base personas
as_survey_design(ids = upm, #unidad primaria de muestreo, viene del diccionario de variables de la base
strata = estrato, #el estrato a usar, viene de la base
weights = fexp) #el factor de expansion, viene de la base
options(survey.lonely.psu = "certainty") #para forzar que las observaciones sean unicas e individuales
Una vez realizado el diseño muestral se puede determinar la prevalencia de la variable requerida.
prev_nac_dci2 <- dm %>%
summarise(survey_mean(dcronica_2, vartype = c("se", "cv"), na.rm = T),
n_muestra =sum(!is.na(dcronica_2))) %>%
mutate(dominio = "Nacional") %>%
select(dominio, porcentaje = coef, se = `_se`, cv =`_cv`, n_muestra) %>%
mutate(porcentaje = round((porcentaje*100), digits = 1))
Como resultado se obtendría la siguiente tabla:
dominio | porcentaje | se | cv | n_muestra |
---|---|---|---|---|
Nacional | 27.2 | 0.009166789 | 0.03373667 | 7801 |
Para replicar indicadores podemos utilizar las librerías:
library(haven)
library(tidyverse)
Como ejemplo realizaremos la evaluación de la tasa de desempleo a nivel nacional con los datos del estudio ENEMDU del II trimestre de 2025
tasa_desempleo_nac <- dm %>%
filter(p03 >= 15) %>% #filtra para que aplique en la población de 15 años en adelante
summarise(
tasa_desempleo = survey_ratio(
numerator=(condact == 7 | condact == 8), #utilizando el diccionario de la base de datos se aplican los códigos que pertenezcan al desempleo
denominator=(condact %in% 1:8), #para que la condicion actual se encuentre entre 1 y 8
vartype = c("se", "ci") #configuran el error estandar y el intervalo de confianza
)
)
print(tasa_desempleo_nac)
Como resultado se obtiene:
tasa_desempleo | tasa_desempleo_se | tasa_desempleo_low | tasa_desempleo_upp |
---|---|---|---|
0.0388 | 0.00239 | 0.0341 | 0.0435 |
Para obtener el resultado como porcentaje con 1 decimal se emplea el comando round
tasa_desempleo_nac$tasa_desempleo <- round((tasa_desempleo_nac$tasa_desempleo*100), digits =1)
tasa_desempleo |
---|
3.9 |
Para el caso de la tasa de empleo adecuado, se puede realizar lo siguiente:
library(haven)
library(tidyverse)
tasa_empleo_adecuado <- dm %>%
filter(p03 >= 15) %>% #se filtra para que aplique en la población de 15 en adelante
summarise(
tasa_empleo_adecuado = survey_ratio(
numerator=(condact == 1), #que pertenezcan al desempleo abierto o que la condicion actual sea igual a 8
denominator=(condact %in% 1:8), #que la condicion actual este entre 1 y 8
vartype = c("se", "ci") #se coloca el error estandar y el intervalo de confianza
)
)
print(tasa_empleo_adecuado)
tasa_empleo_adecuado$tasa_empleo <- round((tasa_empleo_adecuado$tasa_empleo_adecuado*100), digits =1)
tasa_de empleo |
---|
36.2 |
Con las mismas consideraciones se puede encontrar otras variables como las tasas de subempleo o de empleo no remunerado.