Actividad 1. Análisis y aplicación de datos panel
Los ejercicios de esta actividad realizados en equipo fueron elaborados por Astrid Paola González Diaz, José Santiago González Padilla, y Ana Estefanía López Alanís.
Panel de Indicadores del Banco Mundial
Obtener información de varíos país
gdp_data <- wb_data(country=c("MX","EC","CA"),indicator="NY.GDP.PCAP.CD", start_date=2013, end_date=2023)
gdp_data## # A tibble: 30 × 9
## iso2c iso3c country date NY.GDP.PCAP.CD unit obs_status footnote
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 CA CAN Canada 2013 52635. <NA> <NA> <NA>
## 2 CA CAN Canada 2014 50956. <NA> <NA> <NA>
## 3 CA CAN Canada 2015 43596. <NA> <NA> <NA>
## 4 CA CAN Canada 2016 42316. <NA> <NA> <NA>
## 5 CA CAN Canada 2017 45129. <NA> <NA> <NA>
## 6 CA CAN Canada 2018 46549. <NA> <NA> <NA>
## 7 CA CAN Canada 2019 46374. <NA> <NA> <NA>
## 8 CA CAN Canada 2020 43562. <NA> <NA> <NA>
## 9 CA CAN Canada 2021 52515. <NA> <NA> <NA>
## 10 CA CAN Canada 2022 55522. <NA> <NA> <NA>
## # ℹ 20 more rows
## # ℹ 1 more variable: last_updated <date>
Ejercicio 2. Conjunto de Datos de Panel con Indicadores del Banco Mundial
Variable endógena:
- Life Expectancy Total (years). https://data.worldbank.org/indicator/SP.DYN.LE00.IN?view=chart
Parámetros:
Emisiones de CO2. https://data.worldbank.org/indicator/EN.ATM.CO2E.PC?view=chart
Inversión en agua y sanitización. https://data.worldbank.org/indicator/IE.PPI.WATR.CD?view=chart
PIB. https://data.worldbank.org/indicator/NY.GDP.PCAP.CD?view=chart
Densidad de población. https://data.worldbank.org/indicator/EN.POP.DNST?view=chart
Cantidad de camas disponibles. https://data.worldbank.org/indicator/SH.MED.BEDS.ZS?view=chart
Inmunización. Niños de 12 a 23 meses. https://data.worldbank.org/indicator/SH.IMM.IDPT?view=chart
Especialistas cirujanos por cada 1000 habitantes. https://data.worldbank.org/indicator/SH.MED.SAOP.P5?view=chart
Homicidios intencionales por 100,000. https://data.worldbank.org/indicator/VC.IHR.PSRC.P5?view=chart
Población viviendo en barrios marginados. https://data.worldbank.org/indicator/EN.POP.SLUM.UR.ZS?view=chart
Carga de archivo y transformación a panel
panel_salud <- wb_data(country = c("MX", "CA", "US","CH","CO","CN"),indicator=c("SP.DYN.LE00.IN", "EN.ATM.CO2E.PC", "IE.PPI.WATR.CD", "NY.GDP.PCAP.CD", "EN.POP.DNST", "SH.MED.BEDS.ZS", "SH.IMM.IDPT", "SH.MED.SAOP.P5", "VC.IHR.PSRC.P5", "EN.POP.SLUM.UR.ZS"), start_date = 1950, end_date=2023)
panel_salud <- pdata.frame(panel_salud, index = c("country", "date"))
head(panel_salud)## iso2c iso3c country date EN.ATM.CO2E.PC EN.POP.DNST
## Canada-1960 CA CAN Canada 1960 NA NA
## Canada-1961 CA CAN Canada 1961 NA 2.037903
## Canada-1962 CA CAN Canada 1962 NA 2.076160
## Canada-1963 CA CAN Canada 1963 NA 2.115198
## Canada-1964 CA CAN Canada 1964 NA 2.155463
## Canada-1965 CA CAN Canada 1965 NA 2.194836
## EN.POP.SLUM.UR.ZS IE.PPI.WATR.CD NY.GDP.PCAP.CD SH.IMM.IDPT
## Canada-1960 NA NA 2259.251 NA
## Canada-1961 NA NA 2240.433 NA
## Canada-1962 NA NA 2268.585 NA
## Canada-1963 NA NA 2374.498 NA
## Canada-1964 NA NA 2555.111 NA
## Canada-1965 NA NA 2770.362 NA
## SH.MED.BEDS.ZS SH.MED.SAOP.P5 SP.DYN.LE00.IN VC.IHR.PSRC.P5
## Canada-1960 6.2 NA 71.13317 NA
## Canada-1961 NA NA 71.34610 NA
## Canada-1962 NA NA 71.36707 NA
## Canada-1963 NA NA 71.38073 NA
## Canada-1964 NA NA 71.77634 NA
## Canada-1965 NA NA 71.87220 NA
Visualizar valores faltantes y seleccionar variables
Imputación de valores faltantes con MICE
##
## iter imp variable
## 1 1 VC.IHR.PSRC.P5
## 1 2 VC.IHR.PSRC.P5
## 1 3 VC.IHR.PSRC.P5
## 1 4 VC.IHR.PSRC.P5
## 1 5 VC.IHR.PSRC.P5
## 2 1 VC.IHR.PSRC.P5
## 2 2 VC.IHR.PSRC.P5
## 2 3 VC.IHR.PSRC.P5
## 2 4 VC.IHR.PSRC.P5
## 2 5 VC.IHR.PSRC.P5
## 3 1 VC.IHR.PSRC.P5
## 3 2 VC.IHR.PSRC.P5
## 3 3 VC.IHR.PSRC.P5
## 3 4 VC.IHR.PSRC.P5
## 3 5 VC.IHR.PSRC.P5
## 4 1 VC.IHR.PSRC.P5
## 4 2 VC.IHR.PSRC.P5
## 4 3 VC.IHR.PSRC.P5
## 4 4 VC.IHR.PSRC.P5
## 4 5 VC.IHR.PSRC.P5
## 5 1 VC.IHR.PSRC.P5
## 5 2 VC.IHR.PSRC.P5
## 5 3 VC.IHR.PSRC.P5
## 5 4 VC.IHR.PSRC.P5
## 5 5 VC.IHR.PSRC.P5
## 6 1 VC.IHR.PSRC.P5
## 6 2 VC.IHR.PSRC.P5
## 6 3 VC.IHR.PSRC.P5
## 6 4 VC.IHR.PSRC.P5
## 6 5 VC.IHR.PSRC.P5
## 7 1 VC.IHR.PSRC.P5
## 7 2 VC.IHR.PSRC.P5
## 7 3 VC.IHR.PSRC.P5
## 7 4 VC.IHR.PSRC.P5
## 7 5 VC.IHR.PSRC.P5
## 8 1 VC.IHR.PSRC.P5
## 8 2 VC.IHR.PSRC.P5
## 8 3 VC.IHR.PSRC.P5
## 8 4 VC.IHR.PSRC.P5
## 8 5 VC.IHR.PSRC.P5
## 9 1 VC.IHR.PSRC.P5
## 9 2 VC.IHR.PSRC.P5
## 9 3 VC.IHR.PSRC.P5
## 9 4 VC.IHR.PSRC.P5
## 9 5 VC.IHR.PSRC.P5
## 10 1 VC.IHR.PSRC.P5
## 10 2 VC.IHR.PSRC.P5
## 10 3 VC.IHR.PSRC.P5
## 10 4 VC.IHR.PSRC.P5
## 10 5 VC.IHR.PSRC.P5
Tarea 2. Gráficas de Heterogeneidad de Datos de Panel con Indicadores del Banco Mundial
Heterogeneidad entre países
plotmeans(SP.DYN.LE00.IN ~ country, data = panel_salud, n.label=FALSE, main= "Heterogeneidad entre países")- ¿La línea que une los promedios es horizontal, o tiene muchos picos?
- La gráfica tiene distintos picos entre los países, si tiene muchos picos.
- ¿Los intervalos de confianza no miden lo mismo, están muy
desfasados.
- Variabilidad inconsistente entre los países de la gráfica. En esta gráfica se puede decir que cuenta con heterogeneidad, es decir, una diferencia significativa en las medias o dispersión entre los grupos.
En términos de países si es deseable que se pueda contar con heterogeneidad entre los países para poder contar con una forma de comparación entre los grupos.
Heterogeneidad entre años
plotmeans(SP.DYN.LE00.IN ~ date, data = panel_salud, n.label=FALSE, main= "Heterogeneidad entre años")- ¿La línea que une los promedios es horizontal, o tiene muchos picos?
- La gráfica no tiene picos a lo largo de los años. Si cuenta con alguna disminución para 2020, pero puede ser explicado al ser un año atípico de manera general. Después se regulariza para 2021.
- ¿Los intervalos de confianza miden lo mismo, puede decirse que
tienen intervalos similares a lo largo del tiempo.
- En esta gráfica no se cuenta con heterogeneidad puesto que se observa poca variación entre los años.
Ejercicio 3. Modelos con Indicadores del Banco Mundial
Modelo 1. Regresión Agrupada (pooled)
pooled1 <- plm(SP.DYN.LE00.IN ~ NY.GDP.PCAP.CD + EN.POP.DNST + SH.IMM.IDPT + VC.IHR.PSRC.P5, data=panel_salud, model="pooling")
summary(pooled1)## Pooling Model
##
## Call:
## plm(formula = SP.DYN.LE00.IN ~ NY.GDP.PCAP.CD + EN.POP.DNST +
## SH.IMM.IDPT + VC.IHR.PSRC.P5, data = panel_salud, model = "pooling")
##
## Balanced Panel: n = 6, T = 4, N = 24
##
## Residuals:
## Min. 1st Qu. Median 3rd Qu. Max.
## -3.62176 -1.20012 -0.28878 1.53907 2.59486
##
## Coefficients:
## Estimate Std. Error t-value Pr(>|t|)
## (Intercept) 6.7399e+01 3.6945e+00 18.2431 1.682e-13 ***
## NY.GDP.PCAP.CD 8.6687e-05 1.9317e-05 4.4876 0.0002522 ***
## EN.POP.DNST -5.2865e-03 6.0208e-03 -0.8780 0.3908905
## SH.IMM.IDPT 9.0818e-02 4.1998e-02 2.1624 0.0435476 *
## VC.IHR.PSRC.P5 -8.6917e-02 2.0478e-02 -4.2444 0.0004386 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Total Sum of Squares: 427.34
## Residual Sum of Squares: 64.102
## R-Squared: 0.85
## Adj. R-Squared: 0.81842
## F-statistic: 26.9162 on 4 and 19 DF, p-value: 1.3514e-07
Modelo 2. Efectos Fijos (within)
within1 <- plm(SP.DYN.LE00.IN ~ NY.GDP.PCAP.CD + EN.POP.DNST + SH.IMM.IDPT + VC.IHR.PSRC.P5, data=panel_salud, model="within")
summary(within1)## Oneway (individual) effect Within Model
##
## Call:
## plm(formula = SP.DYN.LE00.IN ~ NY.GDP.PCAP.CD + EN.POP.DNST +
## SH.IMM.IDPT + VC.IHR.PSRC.P5, data = panel_salud, model = "within")
##
## Balanced Panel: n = 6, T = 4, N = 24
##
## Residuals:
## Min. 1st Qu. Median 3rd Qu. Max.
## -1.413690 -0.790085 0.058293 0.624367 1.399891
##
## Coefficients:
## Estimate Std. Error t-value Pr(>|t|)
## NY.GDP.PCAP.CD 6.8586e-05 2.8083e-05 2.4423 0.02846 *
## EN.POP.DNST 3.2852e-02 3.7551e-02 0.8749 0.39641
## SH.IMM.IDPT 8.0244e-02 2.8933e-02 2.7735 0.01494 *
## VC.IHR.PSRC.P5 -1.0369e-01 1.7975e-02 -5.7687 4.862e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Total Sum of Squares: 138.73
## Residual Sum of Squares: 16.816
## R-Squared: 0.87879
## Adj. R-Squared: 0.80086
## F-statistic: 25.3747 on 4 and 14 DF, p-value: 2.7495e-06
Prueba pF
##
## F test for individual effects
##
## data: SP.DYN.LE00.IN ~ NY.GDP.PCAP.CD + EN.POP.DNST + SH.IMM.IDPT + ...
## F = 7.8738, df1 = 5, df2 = 14, p-value = 0.00103
## alternative hypothesis: significant effects
Los resultados de esta prueba nos indican que las varianzas de los grupos son distintas. En base a esto, se seleccionó el método de efectos fijos, pooled.
Modelo 3. Efectos Aleatorios - Método Walhus
walhus1 <- plm(SP.DYN.LE00.IN ~ NY.GDP.PCAP.CD + EN.POP.DNST + SH.IMM.IDPT + VC.IHR.PSRC.P5, data=panel_salud, model="random", random.method = "walhus")
summary(walhus1)## Oneway (individual) effect Random Effect Model
## (Wallace-Hussain's transformation)
##
## Call:
## plm(formula = SP.DYN.LE00.IN ~ NY.GDP.PCAP.CD + EN.POP.DNST +
## SH.IMM.IDPT + VC.IHR.PSRC.P5, data = panel_salud, model = "random",
## random.method = "walhus")
##
## Balanced Panel: n = 6, T = 4, N = 24
##
## Effects:
## var std.dev share
## idiosyncratic 1.189 1.090 0.445
## individual 1.482 1.217 0.555
## theta: 0.5913
##
## Residuals:
## Min. 1st Qu. Median 3rd Qu. Max.
## -2.387377 -0.666700 -0.077692 0.778973 2.229363
##
## Coefficients:
## Estimate Std. Error z-value Pr(>|z|)
## (Intercept) 6.8123e+01 2.7480e+00 24.7905 < 2.2e-16 ***
## NY.GDP.PCAP.CD 8.3176e-05 1.8344e-05 4.5342 5.783e-06 ***
## EN.POP.DNST -3.4863e-03 9.1153e-03 -0.3825 0.702119
## SH.IMM.IDPT 8.5581e-02 3.0202e-02 2.8336 0.004602 **
## VC.IHR.PSRC.P5 -1.0488e-01 1.5925e-02 -6.5859 4.522e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Total Sum of Squares: 186.94
## Residual Sum of Squares: 26.555
## R-Squared: 0.85795
## Adj. R-Squared: 0.82804
## Chisq: 114.752 on 4 DF, p-value: < 2.22e-16
Modelo 4. Efectos Aleatorios - Método Amemiya
amemiya1 <- plm(SP.DYN.LE00.IN ~ NY.GDP.PCAP.CD + EN.POP.DNST + SH.IMM.IDPT + VC.IHR.PSRC.P5, data=panel_salud, model="random", random.method = "amemiya")
summary(amemiya1)## Oneway (individual) effect Random Effect Model
## (Amemiya's transformation)
##
## Call:
## plm(formula = SP.DYN.LE00.IN ~ NY.GDP.PCAP.CD + EN.POP.DNST +
## SH.IMM.IDPT + VC.IHR.PSRC.P5, data = panel_salud, model = "random",
## random.method = "amemiya")
##
## Balanced Panel: n = 6, T = 4, N = 24
##
## Effects:
## var std.dev share
## idiosyncratic 0.9342 0.9665 0.105
## individual 7.9514 2.8198 0.895
## theta: 0.8311
##
## Residuals:
## Min. 1st Qu. Median 3rd Qu. Max.
## -1.873254 -0.620849 -0.034069 0.692410 1.876291
##
## Coefficients:
## Estimate Std. Error z-value Pr(>|z|)
## (Intercept) 6.7868e+01 2.7739e+00 24.4669 < 2.2e-16 ***
## NY.GDP.PCAP.CD 8.2684e-05 1.9611e-05 4.2161 2.485e-05 ***
## EN.POP.DNST 3.6024e-03 1.6792e-02 0.2145 0.830138
## SH.IMM.IDPT 8.3333e-02 2.6346e-02 3.1630 0.001562 **
## VC.IHR.PSRC.P5 -1.0904e-01 1.4725e-02 -7.4054 1.308e-13 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Total Sum of Squares: 146.96
## Residual Sum of Squares: 19.304
## R-Squared: 0.86865
## Adj. R-Squared: 0.841
## Chisq: 125.652 on 4 DF, p-value: < 2.22e-16
Modelo 5. Efectos Aleatorios - Método Nerlove
nerlove1 <- plm(SP.DYN.LE00.IN ~ NY.GDP.PCAP.CD + EN.POP.DNST + SH.IMM.IDPT + VC.IHR.PSRC.P5, data=panel_salud, model="random", random.method = "nerlove")
summary(nerlove1)## Oneway (individual) effect Random Effect Model
## (Nerlove's transformation)
##
## Call:
## plm(formula = SP.DYN.LE00.IN ~ NY.GDP.PCAP.CD + EN.POP.DNST +
## SH.IMM.IDPT + VC.IHR.PSRC.P5, data = panel_salud, model = "random",
## random.method = "nerlove")
##
## Balanced Panel: n = 6, T = 4, N = 24
##
## Effects:
## var std.dev share
## idiosyncratic 0.7007 0.8370 0.067
## individual 9.8219 3.1340 0.933
## theta: 0.8676
##
## Residuals:
## Min. 1st Qu. Median 3rd Qu. Max.
## -1.7686210 -0.6370092 -0.0028386 0.7036508 1.7982399
##
## Coefficients:
## Estimate Std. Error z-value Pr(>|z|)
## (Intercept) 6.7659e+01 2.9520e+00 22.9197 < 2.2e-16 ***
## NY.GDP.PCAP.CD 8.1183e-05 2.0284e-05 4.0023 6.273e-05 ***
## EN.POP.DNST 7.3756e-03 1.9619e-02 0.3759 0.706965
## SH.IMM.IDPT 8.2828e-02 2.5922e-02 3.1953 0.001397 **
## VC.IHR.PSRC.P5 -1.0873e-01 1.4737e-02 -7.3779 1.608e-13 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Total Sum of Squares: 143.78
## Residual Sum of Squares: 18.594
## R-Squared: 0.87068
## Adj. R-Squared: 0.84346
## Chisq: 127.926 on 4 DF, p-value: < 2.22e-16
Prueba Hausman
##
## Hausman Test
##
## data: SP.DYN.LE00.IN ~ NY.GDP.PCAP.CD + EN.POP.DNST + SH.IMM.IDPT + ...
## chisq = 0.20979, df = 4, p-value = 0.9949
## alternative hypothesis: one model is inconsistent
Después de haber analizado el p-value de la prueba Hausman, se puede concluir que el Modelo de Efectos Aleatorios Walhus es consistente y eficiente, por lo cual será el seleccionado para llevar a cabo el análisis.
Los resultados del modelo indican que las variables que resultaron ser significativas al momento de predecir la expectativa de vida al nacer son el PIB, los homicidios intencionales y la inmunización de los niños de entre 12 y 23 meses.
Tarea 3. Patentes
Carga de archivo y transformación a panel
patent <- read.csv("PATENT 3 - CSV.csv")
patent <- pdata.frame(patent, index = c("cusip", "year"))
str(patent)## Classes 'pdata.frame' and 'data.frame': 2260 obs. of 13 variables:
## $ cusip : Factor w/ 226 levels "800","4626","4671",..: 1 1 1 1 1 1 1 1 1 1 ...
## ..- attr(*, "names")= chr [1:2260] "800-2012" "800-2013" "800-2014" "800-2015" ...
## ..- attr(*, "index")=Classes 'pindex' and 'data.frame': 2260 obs. of 2 variables:
## .. ..$ cusip: Factor w/ 226 levels "800","4626","4671",..: 1 1 1 1 1 1 1 1 1 1 ...
## .. ..$ year : Factor w/ 10 levels "2012","2013",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ merger : 'pseries' Named int 0 0 0 0 0 0 0 0 0 0 ...
## ..- attr(*, "names")= chr [1:2260] "800-2012" "800-2013" "800-2014" "800-2015" ...
## ..- attr(*, "index")=Classes 'pindex' and 'data.frame': 2260 obs. of 2 variables:
## .. ..$ cusip: Factor w/ 226 levels "800","4626","4671",..: 1 1 1 1 1 1 1 1 1 1 ...
## .. ..$ year : Factor w/ 10 levels "2012","2013",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ employ : 'pseries' Named int 10 12 12 12 13 13 14 14 13 12 ...
## ..- attr(*, "names")= chr [1:2260] "800-2012" "800-2013" "800-2014" "800-2015" ...
## ..- attr(*, "index")=Classes 'pindex' and 'data.frame': 2260 obs. of 2 variables:
## .. ..$ cusip: Factor w/ 226 levels "800","4626","4671",..: 1 1 1 1 1 1 1 1 1 1 ...
## .. ..$ year : Factor w/ 10 levels "2012","2013",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ return : 'pseries' Named int 6 6 4 5 5 5 5 5 4 5 ...
## ..- attr(*, "names")= chr [1:2260] "800-2012" "800-2013" "800-2014" "800-2015" ...
## ..- attr(*, "index")=Classes 'pindex' and 'data.frame': 2260 obs. of 2 variables:
## .. ..$ cusip: Factor w/ 226 levels "800","4626","4671",..: 1 1 1 1 1 1 1 1 1 1 ...
## .. ..$ year : Factor w/ 10 levels "2012","2013",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ patents : 'pseries' Named int 22 34 31 32 40 60 57 77 38 5 ...
## ..- attr(*, "names")= chr [1:2260] "800-2012" "800-2013" "800-2014" "800-2015" ...
## ..- attr(*, "index")=Classes 'pindex' and 'data.frame': 2260 obs. of 2 variables:
## .. ..$ cusip: Factor w/ 226 levels "800","4626","4671",..: 1 1 1 1 1 1 1 1 1 1 ...
## .. ..$ year : Factor w/ 10 levels "2012","2013",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ patentsg: 'pseries' Named int 24 32 30 34 28 33 53 47 64 70 ...
## ..- attr(*, "names")= chr [1:2260] "800-2012" "800-2013" "800-2014" "800-2015" ...
## ..- attr(*, "index")=Classes 'pindex' and 'data.frame': 2260 obs. of 2 variables:
## .. ..$ cusip: Factor w/ 226 levels "800","4626","4671",..: 1 1 1 1 1 1 1 1 1 1 ...
## .. ..$ year : Factor w/ 10 levels "2012","2013",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ stckpr : 'pseries' Named int 48 58 33 38 35 34 31 34 46 41 ...
## ..- attr(*, "names")= chr [1:2260] "800-2012" "800-2013" "800-2014" "800-2015" ...
## ..- attr(*, "index")=Classes 'pindex' and 'data.frame': 2260 obs. of 2 variables:
## .. ..$ cusip: Factor w/ 226 levels "800","4626","4671",..: 1 1 1 1 1 1 1 1 1 1 ...
## .. ..$ year : Factor w/ 10 levels "2012","2013",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ rnd : 'pseries' Named int 3 3 3 3 4 4 5 5 7 8 ...
## ..- attr(*, "names")= chr [1:2260] "800-2012" "800-2013" "800-2014" "800-2015" ...
## ..- attr(*, "index")=Classes 'pindex' and 'data.frame': 2260 obs. of 2 variables:
## .. ..$ cusip: Factor w/ 226 levels "800","4626","4671",..: 1 1 1 1 1 1 1 1 1 1 ...
## .. ..$ year : Factor w/ 10 levels "2012","2013",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ rndeflt : 'pseries' Named int 3 3 3 3 3 3 3 3 4 4 ...
## ..- attr(*, "names")= chr [1:2260] "800-2012" "800-2013" "800-2014" "800-2015" ...
## ..- attr(*, "index")=Classes 'pindex' and 'data.frame': 2260 obs. of 2 variables:
## .. ..$ cusip: Factor w/ 226 levels "800","4626","4671",..: 1 1 1 1 1 1 1 1 1 1 ...
## .. ..$ year : Factor w/ 10 levels "2012","2013",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ rndstck : 'pseries' Named int 16 17 20 22 23 25 27 30 34 38 ...
## ..- attr(*, "names")= chr [1:2260] "800-2012" "800-2013" "800-2014" "800-2015" ...
## ..- attr(*, "index")=Classes 'pindex' and 'data.frame': 2260 obs. of 2 variables:
## .. ..$ cusip: Factor w/ 226 levels "800","4626","4671",..: 1 1 1 1 1 1 1 1 1 1 ...
## .. ..$ year : Factor w/ 10 levels "2012","2013",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ sales : 'pseries' Named int 344 436 535 567 631 706 819 992 1045 939 ...
## ..- attr(*, "names")= chr [1:2260] "800-2012" "800-2013" "800-2014" "800-2015" ...
## ..- attr(*, "index")=Classes 'pindex' and 'data.frame': 2260 obs. of 2 variables:
## .. ..$ cusip: Factor w/ 226 levels "800","4626","4671",..: 1 1 1 1 1 1 1 1 1 1 ...
## .. ..$ year : Factor w/ 10 levels "2012","2013",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ sic : 'pseries' Named int 3740 3740 3740 3740 3740 3740 3740 3740 3740 3740 ...
## ..- attr(*, "names")= chr [1:2260] "800-2012" "800-2013" "800-2014" "800-2015" ...
## ..- attr(*, "index")=Classes 'pindex' and 'data.frame': 2260 obs. of 2 variables:
## .. ..$ cusip: Factor w/ 226 levels "800","4626","4671",..: 1 1 1 1 1 1 1 1 1 1 ...
## .. ..$ year : Factor w/ 10 levels "2012","2013",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ year : Factor w/ 10 levels "2012","2013",..: 1 2 3 4 5 6 7 8 9 10 ...
## ..- attr(*, "names")= chr [1:2260] "800-2012" "800-2013" "800-2014" "800-2015" ...
## ..- attr(*, "index")=Classes 'pindex' and 'data.frame': 2260 obs. of 2 variables:
## .. ..$ cusip: Factor w/ 226 levels "800","4626","4671",..: 1 1 1 1 1 1 1 1 1 1 ...
## .. ..$ year : Factor w/ 10 levels "2012","2013",..: 1 2 3 4 5 6 7 8 9 10 ...
## - attr(*, "index")=Classes 'pindex' and 'data.frame': 2260 obs. of 2 variables:
## ..$ cusip: Factor w/ 226 levels "800","4626","4671",..: 1 1 1 1 1 1 1 1 1 1 ...
## ..$ year : Factor w/ 10 levels "2012","2013",..: 1 2 3 4 5 6 7 8 9 10 ...
Transformación de variables e imputación
patent$year <- as.factor(patent$year)
patent$sic <- as.factor(patent$sic)
patent$merger <- as.factor(patent$merger)
patent$cusip <- as.factor(patent$cusip)## cusip merger employ return patents patentsg stckpr rnd
## 0 0 21 8 0 0 2 0
## rndeflt rndstck sales sic year
## 0 157 3 0 0
##
## iter imp variable
## 1 1 employ return stckpr rndstck sales
## 1 2 employ return stckpr rndstck sales
## 1 3 employ return stckpr rndstck sales
## 1 4 employ return stckpr rndstck sales
## 1 5 employ return stckpr rndstck sales
## 2 1 employ return stckpr rndstck sales
## 2 2 employ return stckpr rndstck sales
## 2 3 employ return stckpr rndstck sales
## 2 4 employ return stckpr rndstck sales
## 2 5 employ return stckpr rndstck sales
## 3 1 employ return stckpr rndstck sales
## 3 2 employ return stckpr rndstck sales
## 3 3 employ return stckpr rndstck sales
## 3 4 employ return stckpr rndstck sales
## 3 5 employ return stckpr rndstck sales
## 4 1 employ return stckpr rndstck sales
## 4 2 employ return stckpr rndstck sales
## 4 3 employ return stckpr rndstck sales
## 4 4 employ return stckpr rndstck sales
## 4 5 employ return stckpr rndstck sales
## 5 1 employ return stckpr rndstck sales
## 5 2 employ return stckpr rndstck sales
## 5 3 employ return stckpr rndstck sales
## 5 4 employ return stckpr rndstck sales
## 5 5 employ return stckpr rndstck sales
## cusip merger employ return patents patentsg stckpr rnd
## 0 0 0 0 0 0 0 0
## rndeflt rndstck sales sic year
## 0 0 0 0 0
Análisis de correlación
patent_num <- Filter(is.numeric, patent) %>% select(-employ)
patent_cor <- cor(patent_num)
corrplot(patent_cor,method = 'number')Selección de variables
patent_1 <- patent %>% select(c(patentsg,rnd, rndeflt, rndstck, sales, employees, patents, year, cusip))
patent_2 <- patent %>% select(c(patentsg, rnd, rndeflt, rndstck, sales, stckpr, employees, patents, year, cusip))
patent_3 <- patent %>% select(c(patentsg, rndeflt, rndstck, sales, patents, employees, year, cusip))Gráficas de Heterogeneidad
Heterogeneidad entre empresas
Heterogeneidad entre años
Al analizar las gráficas de heterogeneidad, se puede puede observar a través de las barras de error que existe una gran variabilidad dentro de los grupos graficados entre años, a diferencia de la variabilidad entre los grupos de empresas que refleja ser poca. Sin embargo, al prestar atención al gráfico entre empresas, se pueden percibir distintos picos, lo cual es una señal de variabilidad en las medias que refleja heterogeneidad. En cuanto al gráfico entre años, se puede concluir que durante los primeros cinco años se seguía una tendencia de homogeneidad, sin embargo a partir del 2018 esta cambió a un comportamiento de heterogeneidad dado los cambios en las medias.
Modelado
Modelo 1. Regresión Agrupada (pooled)
pooled2 <- plm(patentsg ~ rnd + rndeflt + rndstck + sales + stckpr + employees, data = patent, model = "pooling")
summary(pooled2)## Pooling Model
##
## Call:
## plm(formula = patentsg ~ rnd + rndeflt + rndstck + sales + stckpr +
## employees, data = patent, model = "pooling")
##
## Unbalanced Panel: n = 226, T = 10-10, N = 2260
##
## Residuals:
## Min. 1st Qu. Median 3rd Qu. Max.
## -351.2417 -10.6066 1.3246 7.8431 541.1633
##
## Coefficients:
## Estimate Std. Error t-value Pr(>|t|)
## (Intercept) -1.0577e+01 1.4787e+00 -7.1529 1.144e-12 ***
## rnd -5.9513e-01 9.1821e-02 -6.4814 1.113e-10 ***
## rndeflt 5.3283e-02 8.0030e-02 0.6658 0.5056
## rndstck 8.6966e-02 1.2883e-02 6.7507 1.865e-11 ***
## sales -2.5027e-03 5.2903e-04 -4.7308 2.375e-06 ***
## stckpr 7.5250e-01 4.7190e-02 15.9463 < 2.2e-16 ***
## employees 1.4344e+00 5.4527e-02 26.3064 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Total Sum of Squares: 14168000
## Residual Sum of Squares: 5441400
## R-Squared: 0.61594
## Adj. R-Squared: 0.61491
## F-statistic: 602.204 on 6 and 2253 DF, p-value: < 2.22e-16
Modelo 2. Efectos Fijos (within)
within2 <- plm(patentsg ~ rnd + rndeflt + rndstck + sales + stckpr + employees, data = patent, model ="within")
summary(within2)## Oneway (individual) effect Within Model
##
## Call:
## plm(formula = patentsg ~ rnd + rndeflt + rndstck + sales + stckpr +
## employees, data = patent, model = "within")
##
## Unbalanced Panel: n = 226, T = 10-10, N = 2260
##
## Residuals:
## Min. 1st Qu. Median 3rd Qu. Max.
## -215.44842 -1.99734 -0.31352 1.60894 270.53860
##
## Coefficients:
## Estimate Std. Error t-value Pr(>|t|)
## rnd -0.68238259 0.12553753 -5.4357 6.116e-08 ***
## rndeflt 0.98023786 0.18783907 5.2185 1.988e-07 ***
## rndstck 0.05684339 0.01514703 3.7528 0.0001798 ***
## sales -0.00125183 0.00035707 -3.5059 0.0004650 ***
## stckpr 0.03653503 0.02743834 1.3315 0.1831636
## employees -0.12894432 0.06871313 -1.8766 0.0607219 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Total Sum of Squares: 715640
## Residual Sum of Squares: 579320
## R-Squared: 0.19048
## Adj. R-Squared: 0.098274
## F-statistic: 79.5325 on 6 and 2028 DF, p-value: < 2.22e-16
Prueba pF
##
## F test for individual effects
##
## data: patentsg ~ rnd + rndeflt + rndstck + sales + stckpr + employees
## F = 75.646, df1 = 225, df2 = 2028, p-value < 2.2e-16
## alternative hypothesis: significant effects
Al observar los resultados de la prueba F, se puede inferir que existe suficiente evidencia que indica que uno de los modelos refleja una varianza distinta. Dado que la R Ajustada fue mayor en el modelo especificado con el método pooled, este será el seleccionado para ser comparado con los modelos de efectos aleatorios.
Modelo 3. Efectos Aleatorios - Método Walhus
walhus2 <- plm(patentsg ~ rnd + rndeflt + rndstck + sales + stckpr + employees, data = patent, model = "random", random.method = "walhus")
summary(walhus2)## Oneway (individual) effect Random Effect Model
## (Wallace-Hussain's transformation)
##
## Call:
## plm(formula = patentsg ~ rnd + rndeflt + rndstck + sales + stckpr +
## employees, data = patent, model = "random", random.method = "walhus")
##
## Unbalanced Panel: n = 226, T = 10-10, N = 2260
##
## Effects:
## var std.dev share
## idiosyncratic 428.37 20.70 0.175
## individual 2021.74 44.96 0.825
## theta:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.856 0.856 0.856 0.856 0.856 0.856
##
## Residuals:
## Min. 1st Qu. Median 3rd Qu. Max.
## -144.80625 -3.39788 -1.69754 0.57448 293.35880
##
## Coefficients:
## Estimate Std. Error z-value Pr(>|z|)
## (Intercept) 10.39911476 2.81410543 3.6954 0.0002196 ***
## rnd -0.94436220 0.05249658 -17.9890 < 2.2e-16 ***
## rndeflt 1.21657502 0.07252309 16.7750 < 2.2e-16 ***
## rndstck 0.09322105 0.00672427 13.8634 < 2.2e-16 ***
## sales -0.00109613 0.00036427 -3.0091 0.0026198 **
## stckpr 0.10336942 0.02807935 3.6813 0.0002320 ***
## employees 0.27634791 0.06142046 4.4993 6.818e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Total Sum of Squares: 994750
## Residual Sum of Squares: 724390
## R-Squared: 0.27179
## Adj. R-Squared: 0.26985
## Chisq: 840.9 on 6 DF, p-value: < 2.22e-16
Modelo 4. Efectos Aleatorios - Método Amemiya
amemiya2 <- plm(patentsg ~ rnd + rndeflt + rndstck + sales + stckpr + employees, data = patent, model = "random", random.method = "amemiya")
summary(amemiya2)## Oneway (individual) effect Random Effect Model
## (Amemiya's transformation)
##
## Call:
## plm(formula = patentsg ~ rnd + rndeflt + rndstck + sales + stckpr +
## employees, data = patent, model = "random", random.method = "amemiya")
##
## Unbalanced Panel: n = 226, T = 10-10, N = 2260
##
## Effects:
## var std.dev share
## idiosyncratic 285.7 16.9 0.064
## individual 4147.6 64.4 0.936
## theta:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.9173 0.9173 0.9173 0.9173 0.9173 0.9173
##
## Residuals:
## Min. 1st Qu. Median 3rd Qu. Max.
## -161.41146 -2.85443 -1.28379 0.88962 285.14854
##
## Coefficients:
## Estimate Std. Error z-value Pr(>|z|)
## (Intercept) 13.43106582 4.45508214 3.0148 0.002572 **
## rnd -0.96274424 0.06167614 -15.6097 < 2.2e-16 ***
## rndeflt 1.34138061 0.08956767 14.9762 < 2.2e-16 ***
## rndstck 0.09222972 0.00768642 11.9990 < 2.2e-16 ***
## sales -0.00110351 0.00034676 -3.1824 0.001461 **
## stckpr 0.06851836 0.02658462 2.5774 0.009956 **
## employees 0.06203179 0.06219800 0.9973 0.318605
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Total Sum of Squares: 807650
## Residual Sum of Squares: 630870
## R-Squared: 0.21889
## Adj. R-Squared: 0.21681
## Chisq: 631.354 on 6 DF, p-value: < 2.22e-16
Modelo 5. Efectos Aleatorios - Método Nerlove
nerlove2 <- plm(patentsg ~ rnd + rndeflt + rndstck + sales + stckpr + employees, data = patent, model = "random", random.method = "nerlove")
summary(nerlove2)## Oneway (individual) effect Random Effect Model
## (Nerlove's transformation)
##
## Call:
## plm(formula = patentsg ~ rnd + rndeflt + rndstck + sales + stckpr +
## employees, data = patent, model = "random", random.method = "nerlove")
##
## Unbalanced Panel: n = 226, T = 10-10, N = 2260
##
## Effects:
## var std.dev share
## idiosyncratic 256.34 16.01 0.057
## individual 4278.95 65.41 0.943
## theta:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.9228 0.9228 0.9228 0.9228 0.9228 0.9228
##
## Residuals:
## Min. 1st Qu. Median 3rd Qu. Max.
## -164.46257 -2.79495 -1.23851 0.91357 284.40339
##
## Coefficients:
## Estimate Std. Error z-value Pr(>|z|)
## (Intercept) 13.75953443 4.73993208 2.9029 0.003697 **
## rnd -0.95973769 0.06348396 -15.1178 < 2.2e-16 ***
## rndeflt 1.34416190 0.09252565 14.5275 < 2.2e-16 ***
## rndstck 0.09163857 0.00788895 11.6161 < 2.2e-16 ***
## sales -0.00110690 0.00034553 -3.2035 0.001358 **
## stckpr 0.06592701 0.02648316 2.4894 0.012796 *
## employees 0.04500187 0.06228622 0.7225 0.469986
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Total Sum of Squares: 795740
## Residual Sum of Squares: 624600
## R-Squared: 0.21508
## Adj. R-Squared: 0.21299
## Chisq: 617.355 on 6 DF, p-value: < 2.22e-16
Prueba Hausman
##
## Hausman Test
##
## data: patentsg ~ rnd + rndeflt + rndstck + sales + stckpr + employees
## chisq = 644.09, df = 6, p-value < 2.2e-16
## alternative hypothesis: one model is inconsistent
Dado que el método Walhus reflejó mejores resultados, fue seleccionado al igual que el modelo Pooled para realizar la prueba Hausman. Los resultados de la prueba indican que el modelo Walhus de efectos aleatorios es inconsistente a comparación del modelo Pooled de efectos fijos.
Al seleccionar el Modelo de Efectos Fijo Pooled, los resultados muestran que todas las variables seleccionadas para el modelo son significativas al momento de predecir el número de patentes otorgadas a las empresas, a excepción de la variable rndeflt (R&D expend, 1972 mill $).