library(dplyr) # работа с данными
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2) # для построения графиков
library(modelsummary) # для вывода красивых таблиц
library(flextable) # для вывода красивых таблиц
library(corrplot) # матрица корреляций
## corrplot 0.95 loaded
library(tseries) # тест на стационарность
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(strucchange) # тест на наличие разрыва
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
## Loading required package: sandwich
library(lmtest) # диагностика регрессий: автокорреляция, гетероскедастичность, RESET
library(car) # диагностика мультиколлинеарности
## Loading required package: carData
##
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
##
## recode
# Загружаем данные
data_CHN <- read.csv("CHN.csv")
data_DEU <- read.csv("DEU.csv")
# Логарифм TFP
data_CHN$ln_tfp <- log(data_CHN$tfp)
data_DEU$ln_tfp <- log(data_DEU$tfp)
# Графики TFP и FDI
data_CHN$country <- "China"
data_DEU$country <- "Germany"
data <- rbind(data_CHN, data_DEU)
# TFP
ggplot(data, aes(x = year, y = tfp, color = country)) +
geom_line(linewidth = 1) +
geom_point(size = 2) +
labs(title = "TFP Dynamics: China and Germany", x = "Year", y = "TFP", color = "Country") +
theme_minimal()
# FDI
ggplot(data, aes(x = year, y = fdi, color = country)) +
geom_line(linewidth = 1) +
geom_point(size = 2) +
labs(title = "FDI Dynamics: China and Germany", x = "Year", y = "FDI (% of GDP)", color = "Country") +
theme_minimal()
Китай демонстрирует устойчивый рост производительности на протяжении всего периода и к 2021-2023 гг. достигает уровня Германии. В Германии TFP остается относительно стабильным, колеблясь около единицы. В Китае наблюдается общий нисходящий тренд притока FDI относительно ВВП. Особенно выделяется высокий уровень FDI в Германии в 2000 г., после чего значения существенно снижаются и колеблются в более узком диапазоне. Рост TFP не сопровождается одинаковой динамикой FDI в двух странах.
# Описательные статистики
data$country <- factor(data$country, levels = c("China", "Germany"))
fmt_e <- fmt_decimal(2)
tab_desc <- datasummary(
(`Total factor productivity` = tfp) +
(`FDI, net inflows (% of GDP)` = fdi) +
(`Gross capital formation (% of GDP)` = gcf) +
(`Human capital index` = hc) +
(`Trade (% of GDP)` = trade) +
(`R&D expenditure (% of GDP)` = rd) +
(`Manufacturing value added (% of GDP)` = manuf) ~
country * (N + Mean + SD + Median + Min + Max),
data = data,
fmt = fmt_e,
output = "flextable")
tab_desc %>% vline(j = 7, border = fp_border_default(width = 2), part = "all") %>% fontsize(size = 9, part = "all") %>% autofit()
| China | Germany | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| N | Mean | SD | Median | Min | Max | N | Mean | SD | Median | Min | Max |
Total factor productivity | 24 | 0.77 | 0.16 | 0.79 | 0.51 | 1.01 | 24 | 0.96 | 0.03 | 0.96 | 0.92 | 1.00 |
FDI, net inflows (% of GDP) | 24 | 2.73 | 1.19 | 2.88 | 0.28 | 4.49 | 24 | 2.55 | 2.39 | 2.03 | -0.72 | 12.61 |
Gross capital formation (% of GDP) | 24 | 41.87 | 3.33 | 42.45 | 33.63 | 46.27 | 24 | 20.69 | 1.51 | 20.42 | 18.01 | 23.96 |
Human capital index | 24 | 2.52 | 0.15 | 2.49 | 2.31 | 2.75 | 24 | 3.64 | 0.04 | 3.66 | 3.57 | 3.71 |
Trade (% of GDP) | 24 | 45.13 | 9.40 | 43.13 | 34.34 | 63.57 | 24 | 73.12 | 8.32 | 76.06 | 58.33 | 88.79 |
R&D expenditure (% of GDP) | 24 | 1.74 | 0.51 | 1.82 | 0.88 | 2.58 | 24 | 2.74 | 0.28 | 2.77 | 2.38 | 3.15 |
Manufacturing value added (% of GDP) | 20 | 29.18 | 2.46 | 29.98 | 25.01 | 31.99 | 24 | 19.60 | 0.77 | 19.78 | 17.34 | 20.53 |
Средний уровень TFP выше в Германии (0.96 против 0.77), как и показатели человеческого капитала, открытости торговли и расходов на R&D. Китай, напротив, характеризуется значительно более высокой долей валового накопления капитала и обрабатывающей промышленности в ВВП. Средний уровень FDI в странах близок, однако в Германии он существенно более волатилен. Для Manufacturing в Китае доступно только 20 наблюдений, поэтому эта переменная используется как дополнительная в моделях для Германии.
# Матрица корреляций
vars <- c("tfp", "fdi", "gcf", "hc", "trade", "rd", "manuf")
# Цветовая палитра
col_corr <- colorRampPalette(c("white", "#e3f0ff", "#a9cffa", "#4a90e2"))(200)
corr_CHN <- cor(data_CHN[, vars], use = "pairwise.complete.obs")
corrplot(
corr_CHN,
method = "color",
type = "upper",
col = col_corr,
tl.col = "black",
tl.srt = 45,
addCoef.col = "black",
number.cex = 0.7,
title = "Correlation Matrix: China",
mar = c(0, 0, 2, 0))
corr_DEU <- cor(data_DEU[, vars], use = "pairwise.complete.obs")
corrplot(
corr_DEU,
method = "color",
type = "upper",
col = col_corr,
tl.col = "black",
tl.srt = 45,
addCoef.col = "black",
number.cex = 0.7,
title = "Correlation Matrix: Germany",
mar = c(0, 0, 2, 0))
В Китае TFP сильно положительно связан с HC и R&D и отрицательно — с
FDI и Manufacturing. При этом между HC, R&D и Manufacturing
наблюдается очень высокая корреляция, из-за чего может возникнуть
проблема мультиколлинеарности. В Германии TFP наиболее тесно связан с
HC, Trade и R&D, тогда как корреляция с FDI слабая. Между HC, Trade
и R&D также наблюдается высокая взаимосвязь, поэтому модели с HC и
R&D оцениваются отдельно.
# m1: ln_tfp ~ fdi + gcf + rd + trade
# m2: ln_tfp ~ fdi + gcf + hc + trade
# Включаем один из факторов rd/hc, так как они сильно коррелируют между собой - возникнет проблема мультиколлинеарности
m1_CHN <- lm(ln_tfp ~ fdi + gcf + rd + trade, data = data_CHN)
m2_CHN <- lm(ln_tfp ~ fdi + gcf + hc + trade, data = data_CHN)
m1_DEU <- lm(ln_tfp ~ fdi + gcf + rd + trade, data = data_DEU)
m2_DEU <- lm(ln_tfp ~ fdi + gcf + hc + trade, data = data_DEU)
summary(m1_CHN)
##
## Call:
## lm(formula = ln_tfp ~ fdi + gcf + rd + trade, data = data_CHN)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.057653 -0.029172 -0.003818 0.015609 0.096952
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.2456007 0.1247146 -9.988 5.37e-09 ***
## fdi 0.0043217 0.0227866 0.190 0.852
## gcf 0.0060762 0.0043542 1.395 0.179
## rd 0.4069239 0.0494615 8.227 1.10e-07 ***
## trade -0.0001516 0.0018251 -0.083 0.935
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.04317 on 19 degrees of freedom
## Multiple R-squared: 0.9686, Adjusted R-squared: 0.962
## F-statistic: 146.4 on 4 and 19 DF, p-value: 5.397e-14
summary(m2_CHN)
##
## Call:
## lm(formula = ln_tfp ~ fdi + gcf + hc + trade, data = data_CHN)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.085728 -0.015634 -0.000399 0.016749 0.090271
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -4.2344855 0.3962392 -10.687 1.79e-09 ***
## fdi 0.0026466 0.0238844 0.111 0.913
## gcf 0.0187309 0.0035852 5.225 4.83e-05 ***
## hc 1.2521282 0.1615492 7.751 2.67e-07 ***
## trade 0.0001377 0.0019062 0.072 0.943
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.0452 on 19 degrees of freedom
## Multiple R-squared: 0.9656, Adjusted R-squared: 0.9583
## F-statistic: 133.2 on 4 and 19 DF, p-value: 1.289e-13
summary(m1_DEU)
##
## Call:
## lm(formula = ln_tfp ~ fdi + gcf + rd + trade, data = data_DEU)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.024847 -0.005887 0.001669 0.006614 0.019376
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.3572790 0.0403099 -8.863 3.54e-08 ***
## fdi -0.0017894 0.0014574 -1.228 0.23450
## gcf 0.0055798 0.0022408 2.490 0.02220 *
## rd 0.0458239 0.0148447 3.087 0.00607 **
## trade 0.0011545 0.0005292 2.182 0.04190 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.01177 on 19 degrees of freedom
## Multiple R-squared: 0.8453, Adjusted R-squared: 0.8127
## F-statistic: 25.95 on 4 and 19 DF, p-value: 1.806e-07
summary(m2_DEU)
##
## Call:
## lm(formula = ln_tfp ~ fdi + gcf + hc + trade, data = data_DEU)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.025375 -0.006250 0.001700 0.007077 0.022835
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.5538749 0.5812119 -2.674 0.0150 *
## fdi -0.0013979 0.0016008 -0.873 0.3934
## gcf 0.0070347 0.0024888 2.827 0.0108 *
## hc 0.3613424 0.1721142 2.099 0.0494 *
## trade 0.0008002 0.0008470 0.945 0.3566
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.01299 on 19 degrees of freedom
## Multiple R-squared: 0.8114, Adjusted R-squared: 0.7717
## F-statistic: 20.44 on 4 and 19 DF, p-value: 1.141e-06
В моделях в уровнях влияние FDI на TFP не обнаружено ни в Китае, ни в Германии. В Китае основными значимыми факторами являются R&D, HC и GCF, а в Германии — GCF, R&D, Trade и HC. При этом из-за нестационарности рядов (проверка будет далее) эти результаты рассматриваются как предварительные.
# m1_manuf: m1 + manuf
# m2_manuf: m2 + manuf
# Для DEU добавим переменную manuf, для CHN этого не делаем, так как она сильно коррелирует с другими Х, поэтому может возникнуть проблема мультиколлинеарности
m1_manuf_DEU <- lm(ln_tfp ~ fdi + gcf + rd + trade + manuf, data = data_DEU)
m2_manuf_DEU <- lm(ln_tfp ~ fdi + gcf + hc + trade + manuf, data = data_DEU)
summary(m1_manuf_DEU)
##
## Call:
## lm(formula = ln_tfp ~ fdi + gcf + rd + trade + manuf, data = data_DEU)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.016093 -0.005672 0.001185 0.005557 0.012894
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.5820304 0.0750723 -7.753 3.82e-07 ***
## fdi -0.0025162 0.0011988 -2.099 0.05019 .
## gcf 0.0057617 0.0018131 3.178 0.00521 **
## rd 0.0707801 0.0141609 4.998 9.32e-05 ***
## trade 0.0005339 0.0004670 1.143 0.26783
## manuf 0.0101970 0.0030681 3.324 0.00378 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.009518 on 18 degrees of freedom
## Multiple R-squared: 0.9041, Adjusted R-squared: 0.8775
## F-statistic: 33.94 on 5 and 18 DF, p-value: 1.477e-08
summary(m2_manuf_DEU)
##
## Call:
## lm(formula = ln_tfp ~ fdi + gcf + hc + trade + manuf, data = data_DEU)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.020152 -0.006288 0.001650 0.007265 0.014323
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -3.0586636 0.6905727 -4.429 0.000324 ***
## fdi -0.0020237 0.0013499 -1.499 0.151152
## gcf 0.0084756 0.0021272 3.984 0.000870 ***
## hc 0.7342789 0.1882996 3.900 0.001051 **
## trade -0.0007776 0.0008744 -0.889 0.385601
## manuf 0.0118775 0.0038846 3.058 0.006779 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.01083 on 18 degrees of freedom
## Multiple R-squared: 0.8759, Adjusted R-squared: 0.8414
## F-statistic: 25.4 on 5 and 18 DF, p-value: 1.444e-07
В расширенных моделях для Германии с Manufacturing появляются первые признаки связи FDI с TFP: в спецификации с R&D коэффициент FDI отрицательный и значимый на 5% уровне, тогда как в модели с HC он остается незначимым. При этом GCF и Manufacturing положительно значимы в обеих моделях, а R&D и HC - в соответствующих спецификациях.
# CHN
# ADF-тест
# H0: ряд имеет единичный корень, то есть нестационарен
# H1: ряд стационарен
# ADF p < 0.05 -> отвергаем H0, есть признаки стационарности
adf.test(data_CHN$ln_tfp)
##
## Augmented Dickey-Fuller Test
##
## data: data_CHN$ln_tfp
## Dickey-Fuller = -1.3794, Lag order = 2, p-value = 0.8088
## alternative hypothesis: stationary
adf.test(data_CHN$fdi)
##
## Augmented Dickey-Fuller Test
##
## data: data_CHN$fdi
## Dickey-Fuller = -2.2696, Lag order = 2, p-value = 0.4697
## alternative hypothesis: stationary
adf.test(data_CHN$gcf)
##
## Augmented Dickey-Fuller Test
##
## data: data_CHN$gcf
## Dickey-Fuller = -2.054, Lag order = 2, p-value = 0.5518
## alternative hypothesis: stationary
adf.test(data_CHN$rd)
##
## Augmented Dickey-Fuller Test
##
## data: data_CHN$rd
## Dickey-Fuller = -1.7355, Lag order = 2, p-value = 0.6731
## alternative hypothesis: stationary
adf.test(data_CHN$hc)
##
## Augmented Dickey-Fuller Test
##
## data: data_CHN$hc
## Dickey-Fuller = -2.4405, Lag order = 2, p-value = 0.4046
## alternative hypothesis: stationary
adf.test(data_CHN$trade)
##
## Augmented Dickey-Fuller Test
##
## data: data_CHN$trade
## Dickey-Fuller = -4.1364, Lag order = 2, p-value = 0.0185
## alternative hypothesis: stationary
# KPSS-тест
# H0: ряд стационарен относительно детерминированного тренда
# H1: ряд нестационарен
# KPSS p < 0.05 -> отвергаем H0, есть признаки нестационарности
kpss.test(data_CHN$ln_tfp, null = "Trend")
##
## KPSS Test for Trend Stationarity
##
## data: data_CHN$ln_tfp
## KPSS Trend = 0.19586, Truncation lag parameter = 2, p-value = 0.01755
kpss.test(data_CHN$fdi, null = "Trend")
##
## KPSS Test for Trend Stationarity
##
## data: data_CHN$fdi
## KPSS Trend = 0.14918, Truncation lag parameter = 2, p-value = 0.04735
kpss.test(data_CHN$gcf, null = "Trend")
##
## KPSS Test for Trend Stationarity
##
## data: data_CHN$gcf
## KPSS Trend = 0.20952, Truncation lag parameter = 2, p-value = 0.01243
kpss.test(data_CHN$rd, null = "Trend")
##
## KPSS Test for Trend Stationarity
##
## data: data_CHN$rd
## KPSS Trend = 0.12481, Truncation lag parameter = 2, p-value = 0.08924
kpss.test(data_CHN$hc, null = "Trend")
##
## KPSS Test for Trend Stationarity
##
## data: data_CHN$hc
## KPSS Trend = 0.16785, Truncation lag parameter = 2, p-value = 0.03179
kpss.test(data_CHN$trade, null = "Trend")
##
## KPSS Test for Trend Stationarity
##
## data: data_CHN$trade
## KPSS Trend = 0.13104, Truncation lag parameter = 2, p-value = 0.0777
# DEU
# ADF-тест
# H0: ряд имеет единичный корень, то есть нестационарен
# H1: ряд стационарен
# ADF p < 0.05 -> отвергаем H0, есть признаки стационарности
adf.test(data_DEU$ln_tfp)
##
## Augmented Dickey-Fuller Test
##
## data: data_DEU$ln_tfp
## Dickey-Fuller = -2.5771, Lag order = 2, p-value = 0.3525
## alternative hypothesis: stationary
adf.test(data_DEU$fdi)
##
## Augmented Dickey-Fuller Test
##
## data: data_DEU$fdi
## Dickey-Fuller = -3.6303, Lag order = 2, p-value = 0.04784
## alternative hypothesis: stationary
adf.test(data_DEU$gcf)
##
## Augmented Dickey-Fuller Test
##
## data: data_DEU$gcf
## Dickey-Fuller = -2.8768, Lag order = 2, p-value = 0.2384
## alternative hypothesis: stationary
adf.test(data_DEU$rd)
##
## Augmented Dickey-Fuller Test
##
## data: data_DEU$rd
## Dickey-Fuller = -2.6857, Lag order = 2, p-value = 0.3112
## alternative hypothesis: stationary
adf.test(data_DEU$hc)
##
## Augmented Dickey-Fuller Test
##
## data: data_DEU$hc
## Dickey-Fuller = -2.6001, Lag order = 2, p-value = 0.3438
## alternative hypothesis: stationary
adf.test(data_DEU$trade)
##
## Augmented Dickey-Fuller Test
##
## data: data_DEU$trade
## Dickey-Fuller = -2.0584, Lag order = 2, p-value = 0.5501
## alternative hypothesis: stationary
adf.test(data_DEU$manuf)
##
## Augmented Dickey-Fuller Test
##
## data: data_DEU$manuf
## Dickey-Fuller = -2.3549, Lag order = 2, p-value = 0.4372
## alternative hypothesis: stationary
# KPSS-тест
# H0: ряд стационарен относительно детерминированного тренда
# H1: ряд нестационарен
# KPSS p < 0.05 -> отвергаем H0, есть признаки нестационарности
kpss.test(data_DEU$ln_tfp, null = "Trend")
## Warning in kpss.test(data_DEU$ln_tfp, null = "Trend"): p-value greater than
## printed p-value
##
## KPSS Test for Trend Stationarity
##
## data: data_DEU$ln_tfp
## KPSS Trend = 0.081035, Truncation lag parameter = 2, p-value = 0.1
kpss.test(data_DEU$fdi, null = "Trend")
##
## KPSS Test for Trend Stationarity
##
## data: data_DEU$fdi
## KPSS Trend = 0.14191, Truncation lag parameter = 2, p-value = 0.05757
kpss.test(data_DEU$gcf, null = "Trend")
##
## KPSS Test for Trend Stationarity
##
## data: data_DEU$gcf
## KPSS Trend = 0.17577, Truncation lag parameter = 2, p-value = 0.02519
kpss.test(data_DEU$rd, null = "Trend")
## Warning in kpss.test(data_DEU$rd, null = "Trend"): p-value greater than printed
## p-value
##
## KPSS Test for Trend Stationarity
##
## data: data_DEU$rd
## KPSS Trend = 0.085492, Truncation lag parameter = 2, p-value = 0.1
kpss.test(data_DEU$hc, null = "Trend")
##
## KPSS Test for Trend Stationarity
##
## data: data_DEU$hc
## KPSS Trend = 0.20287, Truncation lag parameter = 2, p-value = 0.01492
kpss.test(data_DEU$trade, null = "Trend")
##
## KPSS Test for Trend Stationarity
##
## data: data_DEU$trade
## KPSS Trend = 0.14993, Truncation lag parameter = 2, p-value = 0.04672
kpss.test(data_DEU$manuf, null = "Trend")
## Warning in kpss.test(data_DEU$manuf, null = "Trend"): p-value greater than
## printed p-value
##
## KPSS Test for Trend Stationarity
##
## data: data_DEU$manuf
## KPSS Trend = 0.090947, Truncation lag parameter = 2, p-value = 0.1
Китай: ln(TFP), FDI, GCF и HC - non-stationary; Trade - stationary; для R&D результаты неоднозначны. Германия: FDI — stationary; GCF, Trade и HC - non-stationary. Для ln(TFP), R&D и Manufacturing результаты ADF и KPSS неоднозначны. Поскольку в обеих странах несколько ключевых рядов нестационарны, для дальнейшего анализа используем first differences.
# first differences
# Первые разности для China
data_CHN$d_ln_tfp <- c(NA, diff(data_CHN$ln_tfp))
data_CHN$d_fdi <- c(NA, diff(data_CHN$fdi))
data_CHN$d_gcf <- c(NA, diff(data_CHN$gcf))
data_CHN$d_rd <- c(NA, diff(data_CHN$rd))
data_CHN$d_hc <- c(NA, diff(data_CHN$hc))
data_CHN$d_trade <- c(NA, diff(data_CHN$trade))
# Первые разности для Germany
data_DEU$d_ln_tfp <- c(NA, diff(data_DEU$ln_tfp))
data_DEU$d_fdi <- c(NA, diff(data_DEU$fdi))
data_DEU$d_gcf <- c(NA, diff(data_DEU$gcf))
data_DEU$d_rd <- c(NA, diff(data_DEU$rd))
data_DEU$d_hc <- c(NA, diff(data_DEU$hc))
data_DEU$d_trade <- c(NA, diff(data_DEU$trade))
data_DEU$d_manuf <- c(NA, diff(data_DEU$manuf))
# Проверка стационарности первых разностей
# ADF: H0 - ряд нестационарен, H1 - ряд стационарен
# KPSS: H0 - ряд стационарен, H1 - ряд нестационарен
# China: ADF
adf.test(na.omit(data_CHN$d_ln_tfp))
##
## Augmented Dickey-Fuller Test
##
## data: na.omit(data_CHN$d_ln_tfp)
## Dickey-Fuller = -2.7854, Lag order = 2, p-value = 0.2732
## alternative hypothesis: stationary
adf.test(na.omit(data_CHN$d_fdi))
##
## Augmented Dickey-Fuller Test
##
## data: na.omit(data_CHN$d_fdi)
## Dickey-Fuller = -2.8325, Lag order = 2, p-value = 0.2552
## alternative hypothesis: stationary
adf.test(na.omit(data_CHN$d_gcf))
##
## Augmented Dickey-Fuller Test
##
## data: na.omit(data_CHN$d_gcf)
## Dickey-Fuller = -3.1455, Lag order = 2, p-value = 0.136
## alternative hypothesis: stationary
adf.test(na.omit(data_CHN$d_rd))
##
## Augmented Dickey-Fuller Test
##
## data: na.omit(data_CHN$d_rd)
## Dickey-Fuller = -2.2851, Lag order = 2, p-value = 0.4638
## alternative hypothesis: stationary
adf.test(na.omit(data_CHN$d_hc))
##
## Augmented Dickey-Fuller Test
##
## data: na.omit(data_CHN$d_hc)
## Dickey-Fuller = -1.81, Lag order = 2, p-value = 0.6448
## alternative hypothesis: stationary
adf.test(na.omit(data_CHN$d_trade))
##
## Augmented Dickey-Fuller Test
##
## data: na.omit(data_CHN$d_trade)
## Dickey-Fuller = -2.2773, Lag order = 2, p-value = 0.4667
## alternative hypothesis: stationary
# China: KPSS
kpss.test(na.omit(data_CHN$d_ln_tfp), null = "Level")
## Warning in kpss.test(na.omit(data_CHN$d_ln_tfp), null = "Level"): p-value
## greater than printed p-value
##
## KPSS Test for Level Stationarity
##
## data: na.omit(data_CHN$d_ln_tfp)
## KPSS Level = 0.28938, Truncation lag parameter = 2, p-value = 0.1
kpss.test(na.omit(data_CHN$d_fdi), null = "Level")
## Warning in kpss.test(na.omit(data_CHN$d_fdi), null = "Level"): p-value greater
## than printed p-value
##
## KPSS Test for Level Stationarity
##
## data: na.omit(data_CHN$d_fdi)
## KPSS Level = 0.22303, Truncation lag parameter = 2, p-value = 0.1
kpss.test(na.omit(data_CHN$d_gcf), null = "Level")
##
## KPSS Test for Level Stationarity
##
## data: na.omit(data_CHN$d_gcf)
## KPSS Level = 0.42755, Truncation lag parameter = 2, p-value = 0.06528
kpss.test(na.omit(data_CHN$d_rd), null = "Level")
## Warning in kpss.test(na.omit(data_CHN$d_rd), null = "Level"): p-value greater
## than printed p-value
##
## KPSS Test for Level Stationarity
##
## data: na.omit(data_CHN$d_rd)
## KPSS Level = 0.083207, Truncation lag parameter = 2, p-value = 0.1
kpss.test(na.omit(data_CHN$d_hc), null = "Level")
## Warning in kpss.test(na.omit(data_CHN$d_hc), null = "Level"): p-value greater
## than printed p-value
##
## KPSS Test for Level Stationarity
##
## data: na.omit(data_CHN$d_hc)
## KPSS Level = 0.17024, Truncation lag parameter = 2, p-value = 0.1
kpss.test(na.omit(data_CHN$d_trade), null = "Level")
## Warning in kpss.test(na.omit(data_CHN$d_trade), null = "Level"): p-value
## greater than printed p-value
##
## KPSS Test for Level Stationarity
##
## data: na.omit(data_CHN$d_trade)
## KPSS Level = 0.20661, Truncation lag parameter = 2, p-value = 0.1
# Germany: ADF
adf.test(na.omit(data_DEU$d_ln_tfp))
##
## Augmented Dickey-Fuller Test
##
## data: na.omit(data_DEU$d_ln_tfp)
## Dickey-Fuller = -3.856, Lag order = 2, p-value = 0.03172
## alternative hypothesis: stationary
adf.test(na.omit(data_DEU$d_fdi))
##
## Augmented Dickey-Fuller Test
##
## data: na.omit(data_DEU$d_fdi)
## Dickey-Fuller = -3.0093, Lag order = 2, p-value = 0.1879
## alternative hypothesis: stationary
adf.test(na.omit(data_DEU$d_gcf))
##
## Augmented Dickey-Fuller Test
##
## data: na.omit(data_DEU$d_gcf)
## Dickey-Fuller = -3.0396, Lag order = 2, p-value = 0.1763
## alternative hypothesis: stationary
adf.test(na.omit(data_DEU$d_rd))
##
## Augmented Dickey-Fuller Test
##
## data: na.omit(data_DEU$d_rd)
## Dickey-Fuller = -2.0557, Lag order = 2, p-value = 0.5511
## alternative hypothesis: stationary
adf.test(na.omit(data_DEU$d_hc))
##
## Augmented Dickey-Fuller Test
##
## data: na.omit(data_DEU$d_hc)
## Dickey-Fuller = -0.78031, Lag order = 2, p-value = 0.9516
## alternative hypothesis: stationary
adf.test(na.omit(data_DEU$d_trade))
##
## Augmented Dickey-Fuller Test
##
## data: na.omit(data_DEU$d_trade)
## Dickey-Fuller = -4.154, Lag order = 2, p-value = 0.01788
## alternative hypothesis: stationary
adf.test(na.omit(data_DEU$d_manuf))
##
## Augmented Dickey-Fuller Test
##
## data: na.omit(data_DEU$d_manuf)
## Dickey-Fuller = -3.8114, Lag order = 2, p-value = 0.0349
## alternative hypothesis: stationary
# Germany: KPSS
kpss.test(na.omit(data_DEU$d_ln_tfp), null = "Level")
## Warning in kpss.test(na.omit(data_DEU$d_ln_tfp), null = "Level"): p-value
## greater than printed p-value
##
## KPSS Test for Level Stationarity
##
## data: na.omit(data_DEU$d_ln_tfp)
## KPSS Level = 0.060129, Truncation lag parameter = 2, p-value = 0.1
kpss.test(na.omit(data_DEU$d_fdi), null = "Level")
## Warning in kpss.test(na.omit(data_DEU$d_fdi), null = "Level"): p-value greater
## than printed p-value
##
## KPSS Test for Level Stationarity
##
## data: na.omit(data_DEU$d_fdi)
## KPSS Level = 0.33144, Truncation lag parameter = 2, p-value = 0.1
kpss.test(na.omit(data_DEU$d_gcf), null = "Level")
## Warning in kpss.test(na.omit(data_DEU$d_gcf), null = "Level"): p-value greater
## than printed p-value
##
## KPSS Test for Level Stationarity
##
## data: na.omit(data_DEU$d_gcf)
## KPSS Level = 0.30758, Truncation lag parameter = 2, p-value = 0.1
kpss.test(na.omit(data_DEU$d_rd), null = "Level")
## Warning in kpss.test(na.omit(data_DEU$d_rd), null = "Level"): p-value greater
## than printed p-value
##
## KPSS Test for Level Stationarity
##
## data: na.omit(data_DEU$d_rd)
## KPSS Level = 0.11109, Truncation lag parameter = 2, p-value = 0.1
kpss.test(na.omit(data_DEU$d_hc), null = "Level")
## Warning in kpss.test(na.omit(data_DEU$d_hc), null = "Level"): p-value greater
## than printed p-value
##
## KPSS Test for Level Stationarity
##
## data: na.omit(data_DEU$d_hc)
## KPSS Level = 0.33696, Truncation lag parameter = 2, p-value = 0.1
kpss.test(na.omit(data_DEU$d_trade), null = "Level")
## Warning in kpss.test(na.omit(data_DEU$d_trade), null = "Level"): p-value
## greater than printed p-value
##
## KPSS Test for Level Stationarity
##
## data: na.omit(data_DEU$d_trade)
## KPSS Level = 0.096198, Truncation lag parameter = 2, p-value = 0.1
kpss.test(na.omit(data_DEU$d_manuf), null = "Level")
## Warning in kpss.test(na.omit(data_DEU$d_manuf), null = "Level"): p-value
## greater than printed p-value
##
## KPSS Test for Level Stationarity
##
## data: na.omit(data_DEU$d_manuf)
## KPSS Level = 0.058306, Truncation lag parameter = 2, p-value = 0.1
Китай: для всех first differences результаты ADF и KPSS неоднозначны, при этом KPSS не отвергает стационарность ни для одного ряда. Германия: Δln(TFP), ΔTrade и ΔManufacturing - stationary; для ΔFDI, ΔGCF, ΔR&D и ΔHC результаты ADF и KPSS неоднозначны. В целом переход к first differences существенно улучшает свойства рядов, KPSS подтверждает их стационарность, поэтому далее используем модели в первых разностях.
# China
m_diff1_CHN <- lm(d_ln_tfp ~ d_fdi + d_gcf + d_rd + d_trade, data = data_CHN)
m_diff2_CHN <- lm(d_ln_tfp ~ d_fdi + d_gcf + d_hc + d_trade, data = data_CHN)
# Germany
m_diff1_DEU <- lm(d_ln_tfp ~ d_fdi + d_gcf + d_rd + d_trade, data = data_DEU)
m_diff2_DEU <- lm(d_ln_tfp ~ d_fdi + d_gcf + d_hc + d_trade, data = data_DEU)
# Germany + Manufacturing
m_diff1_manuf_DEU <- lm(d_ln_tfp ~ d_fdi + d_gcf + d_rd + d_trade + d_manuf, data = data_DEU)
m_diff2_manuf_DEU <- lm(d_ln_tfp ~ d_fdi + d_gcf + d_hc + d_trade + d_manuf, data = data_DEU)
# Вывод результатов
modelsummary(
list(
"China: R&D" = m_diff1_CHN,
"China: HC" = m_diff2_CHN,
"Germany: R&D" = m_diff1_DEU,
"Germany: HC" = m_diff2_DEU,
"Germany: R&D + Manuf." = m_diff1_manuf_DEU,
"Germany: HC + Manuf." = m_diff2_manuf_DEU),
statistic = "std.error",
stars = c("*" = 0.1, "**" = 0.05, "***" = 0.01),
coef_map = c(
"(Intercept)" = "Constant",
"d_fdi" = "Δ FDI",
"d_gcf" = "Δ GCF",
"d_rd" = "Δ R&D",
"d_hc" = "Δ HC",
"d_trade" = "Δ Trade",
"d_manuf" = "Δ Manufacturing"),
gof_omit = "IC|Log|Adj|RMSE|Std.Errors", output = "flextable", fmt = 3) %>%
fontsize(size = 8, part = "all") %>% autofit()
| China: R&D | China: HC | Germany: R&D | Germany: HC | Germany: R&D + Manuf. | Germany: HC + Manuf. |
|---|---|---|---|---|---|---|
Constant | 0.045*** | 0.041*** | 0.002 | 0.007* | 0.002 | 0.008*** |
(0.008) | (0.012) | (0.002) | (0.004) | (0.002) | (0.003) | |
Δ FDI | -0.002 | -0.000 | -0.001 | -0.001 | -0.001* | -0.001** |
(0.009) | (0.010) | (0.001) | (0.001) | (0.001) | (0.000) | |
Δ GCF | 0.004 | 0.001 | 0.005** | 0.004* | 0.003* | 0.002 |
(0.003) | (0.004) | (0.002) | (0.002) | (0.002) | (0.001) | |
Δ R&D | -0.227** | -0.011 | 0.013 | |||
(0.095) | (0.038) | (0.029) | ||||
Δ HC | -0.634 | -0.976 | -1.055** | |||
(0.533) | (0.607) | (0.411) | ||||
Δ Trade | -0.001 | -0.000 | 0.001** | 0.002*** | 0.001* | 0.001*** |
(0.001) | (0.001) | (0.001) | (0.001) | (0.000) | (0.000) | |
Δ Manufacturing | 0.009*** | 0.009*** | ||||
(0.002) | (0.002) | |||||
Num.Obs. | 23 | 23 | 23 | 23 | 23 | 23 |
R2 | 0.256 | 0.092 | 0.696 | 0.733 | 0.842 | 0.885 |
F | 1.548 | 0.455 | 10.316 | 12.368 | 18.077 | 26.056 |
* p < 0.1, ** p < 0.05, *** p < 0.01 | ||||||
Китай: FDI статистически незначим в обеих моделях. R&D имеет значимый отрицательный коэффициент, остальные факторы незначимы. Германия: без Manufacturing FDI незначим, а GCF и Trade положительно значимы. После добавления Manufacturing качество моделей заметно растет: Manufacturing значим и положителен, а FDI становится отрицательно значимым только в модели с HC.
# Лаг изменения FDI на 1 год
data_CHN$d_fdi_lag1 <- c(NA, head(data_CHN$d_fdi, -1))
data_DEU$d_fdi_lag1 <- c(NA, head(data_DEU$d_fdi, -1))
# China
m_lag1_rd_CHN <- lm(d_ln_tfp ~ d_fdi_lag1 + d_gcf + d_rd + d_trade, data = data_CHN)
m_lag1_hc_CHN <- lm(d_ln_tfp ~ d_fdi_lag1 + d_gcf + d_hc + d_trade, data = data_CHN)
# Germany
m_lag1_rd_DEU <- lm(d_ln_tfp ~ d_fdi_lag1 + d_gcf + d_rd + d_trade, data = data_DEU)
m_lag1_hc_DEU <- lm(d_ln_tfp ~ d_fdi_lag1 + d_gcf + d_hc + d_trade, data = data_DEU)
# Germany + Manufacturing
m_lag1_rd_manuf_DEU <- lm(d_ln_tfp ~ d_fdi_lag1 + d_gcf + d_rd + d_trade + d_manuf, data = data_DEU)
m_lag1_hc_manuf_DEU <- lm(d_ln_tfp ~ d_fdi_lag1 + d_gcf + d_hc + d_trade + d_manuf, data = data_DEU)
# Вывод результатов
modelsummary(
list(
"China: R&D" = m_lag1_rd_CHN,
"China: HC" = m_lag1_hc_CHN,
"Germany: R&D" = m_lag1_rd_DEU,
"Germany: HC" = m_lag1_hc_DEU,
"Germany: R&D + Manuf." = m_lag1_rd_manuf_DEU,
"Germany: HC + Manuf." = m_lag1_hc_manuf_DEU),
statistic = "std.error",
stars = c("*" = 0.1, "**" = 0.05, "***" = 0.01),
coef_map = c(
"(Intercept)" = "Constant",
"d_fdi_lag1" = "Δ FDI (t-1)",
"d_gcf" = "Δ GCF",
"d_rd" = "Δ R&D",
"d_hc" = "Δ HC",
"d_trade" = "Δ Trade",
"d_manuf" = "Δ Manufacturing"),
gof_omit = "IC|Log|Adj|RMSE|Std.Errors", output = "flextable", fmt = 3) %>%
fontsize(size = 8, part = "all") %>% autofit()
| China: R&D | China: HC | Germany: R&D | Germany: HC | Germany: R&D + Manuf. | Germany: HC + Manuf. |
|---|---|---|---|---|---|---|
Constant | 0.048*** | 0.044*** | 0.001 | 0.007 | 0.001 | 0.008*** |
(0.007) | (0.010) | (0.002) | (0.004) | (0.002) | (0.003) | |
Δ FDI (t-1) | 0.015** | 0.016** | -0.000 | -0.000 | -0.001 | -0.001 |
(0.007) | (0.008) | (0.001) | (0.001) | (0.001) | (0.001) | |
Δ GCF | 0.006* | 0.002 | 0.005** | 0.004* | 0.004* | 0.002 |
(0.003) | (0.003) | (0.002) | (0.002) | (0.002) | (0.002) | |
Δ R&D | -0.241** | -0.008 | 0.017 | |||
(0.085) | (0.039) | (0.029) | ||||
Δ HC | -0.688 | -1.011 | -1.089** | |||
(0.484) | (0.611) | (0.402) | ||||
Δ Trade | -0.002 | -0.001 | 0.001** | 0.002*** | 0.001** | 0.001*** |
(0.001) | (0.001) | (0.001) | (0.001) | (0.000) | (0.000) | |
Δ Manufacturing | 0.009*** | 0.009*** | ||||
(0.002) | (0.002) | |||||
Num.Obs. | 22 | 22 | 22 | 22 | 22 | 22 |
R2 | 0.461 | 0.290 | 0.702 | 0.743 | 0.851 | 0.896 |
F | 3.632 | 1.739 | 10.002 | 12.260 | 18.231 | 27.428 |
* p < 0.1, ** p < 0.05, *** p < 0.01 | ||||||
Китай: лаг FDI на 1 год положительный и статистически значимый в обеих моделях. R&D имеет значимый отрицательный эффект, остальные факторы в основном незначимы. Германия: лаг FDI на 1 год статистически незначим во всех моделях. GCF и Trade дают положительный эффект, а после добавления Manufacturing, Manufacturing становится сильно положительно значимым. То есть отложенный эффект FDI через 1 год проявляется для Китая, но не для Германии.
# Лаг изменения FDI на 2 года
data_CHN$d_fdi_lag2 <- c(NA, NA, head(data_CHN$d_fdi, -2))
data_DEU$d_fdi_lag2 <- c(NA, NA, head(data_DEU$d_fdi, -2))
# China
m_lag2_rd_CHN <- lm(d_ln_tfp ~ d_fdi_lag2 + d_gcf + d_rd + d_trade, data = data_CHN)
m_lag2_hc_CHN <- lm(d_ln_tfp ~ d_fdi_lag2 + d_gcf + d_hc + d_trade, data = data_CHN)
# Germany
m_lag2_rd_DEU <- lm(d_ln_tfp ~ d_fdi_lag2 + d_gcf + d_rd + d_trade, data = data_DEU)
m_lag2_hc_DEU <- lm(d_ln_tfp ~ d_fdi_lag2 + d_gcf + d_hc + d_trade, data = data_DEU)
# Germany + Manufacturing
m_lag2_rd_manuf_DEU <- lm(d_ln_tfp ~ d_fdi_lag2 + d_gcf + d_rd + d_trade + d_manuf, data = data_DEU)
m_lag2_hc_manuf_DEU <- lm(d_ln_tfp ~ d_fdi_lag2 + d_gcf + d_hc + d_trade + d_manuf, data = data_DEU)
# Вывод результатов
modelsummary(
list(
"China: R&D" = m_lag2_rd_CHN,
"China: HC" = m_lag2_hc_CHN,
"Germany: R&D" = m_lag2_rd_DEU,
"Germany: HC" = m_lag2_hc_DEU,
"Germany: R&D + Manuf." = m_lag2_rd_manuf_DEU,
"Germany: HC + Manuf." = m_lag2_hc_manuf_DEU),
statistic = "std.error",
stars = c("*" = 0.1, "**" = 0.05, "***" = 0.01),
coef_map = c(
"(Intercept)" = "Constant",
"d_fdi_lag2" = "Δ FDI (t-2)",
"d_gcf" = "Δ GCF",
"d_rd" = "Δ R&D",
"d_hc" = "Δ HC",
"d_trade" = "Δ Trade",
"d_manuf" = "Δ Manufacturing"),
gof_omit = "IC|Log|Adj|RMSE|Std.Errors", output = "flextable", fmt = 3) %>%
fontsize(size = 8, part = "all") %>% autofit()
| China: R&D | China: HC | Germany: R&D | Germany: HC | Germany: R&D + Manuf. | Germany: HC + Manuf. |
|---|---|---|---|---|---|---|
Constant | 0.053*** | 0.041*** | 0.001 | 0.007* | 0.001 | 0.008*** |
(0.008) | (0.012) | (0.002) | (0.004) | (0.002) | (0.002) | |
Δ FDI (t-2) | 0.015* | 0.006 | -0.000 | -0.001 | 0.000 | -0.000 |
(0.007) | (0.009) | (0.001) | (0.001) | (0.001) | (0.000) | |
Δ GCF | 0.006* | 0.002 | 0.006** | 0.005** | 0.004** | 0.003* |
(0.003) | (0.004) | (0.002) | (0.002) | (0.002) | (0.001) | |
Δ R&D | -0.324*** | -0.002 | 0.019 | |||
(0.095) | (0.038) | (0.027) | ||||
Δ HC | -0.560 | -1.155* | -1.083** | |||
(0.567) | (0.603) | (0.393) | ||||
Δ Trade | -0.001 | -0.000 | 0.001** | 0.002*** | 0.001* | 0.001*** |
(0.001) | (0.001) | (0.001) | (0.001) | (0.000) | (0.000) | |
Δ Manufacturing | 0.009*** | 0.009*** | ||||
(0.002) | (0.002) | |||||
Num.Obs. | 21 | 21 | 21 | 21 | 21 | 21 |
R2 | 0.461 | 0.122 | 0.730 | 0.780 | 0.872 | 0.913 |
F | 3.419 | 0.554 | 10.788 | 14.166 | 20.526 | 31.335 |
* p < 0.1, ** p < 0.05, *** p < 0.01 | ||||||
Китай: лаг FDI на 2 года положителен, но не незначим. R&D сохраняет значимый отрицательный эффект. Германия: лаг FDI на 2 года незначим во всех моделях. GCF и Trade положительно значимы, а Manufacturing остается сильным положительным фактором. Устойчивого двухлетнего эффекта FDI на TFP не наблюдается, наиболее заметный отложенный эффект FDI остается у Китая на лаге 1.
# Включаем в модель одновременно d_fdi, d_fdi_lag1, d_fdi_lag2
# China
m_dl_rd_CHN <- lm(d_ln_tfp ~ d_fdi + d_fdi_lag1 + d_fdi_lag2 + d_gcf + d_rd + d_trade, data = data_CHN)
m_dl_hc_CHN <- lm(d_ln_tfp ~ d_fdi + d_fdi_lag1 + d_fdi_lag2 + d_gcf + d_hc + d_trade, data = data_CHN)
# Germany
m_dl_rd_DEU <- lm(d_ln_tfp ~ d_fdi + d_fdi_lag1 + d_fdi_lag2 + d_gcf + d_rd + d_trade, data = data_DEU)
m_dl_hc_DEU <- lm(d_ln_tfp ~ d_fdi + d_fdi_lag1 + d_fdi_lag2 + d_gcf + d_hc + d_trade, data = data_DEU)
# Germany + Manufacturing
m_dl_rd_manuf_DEU <- lm(d_ln_tfp ~ d_fdi + d_fdi_lag1 + d_fdi_lag2 + d_gcf + d_rd + d_trade + d_manuf, data = data_DEU)
m_dl_hc_manuf_DEU <- lm(d_ln_tfp ~ d_fdi + d_fdi_lag1 + d_fdi_lag2 + d_gcf + d_hc + d_trade + d_manuf, data = data_DEU)
# Вывод результатов
modelsummary(
list(
"China: R&D" = m_dl_rd_CHN,
"China: HC" = m_dl_hc_CHN,
"Germany: R&D" = m_dl_rd_DEU,
"Germany: HC" = m_dl_hc_DEU,
"Germany: R&D + Manuf." = m_dl_rd_manuf_DEU,
"Germany: HC + Manuf." = m_dl_hc_manuf_DEU),
statistic = "std.error",
stars = c("*" = 0.1, "**" = 0.05, "***" = 0.01),
coef_map = c(
"(Intercept)" = "Constant",
"d_fdi" = "Δ FDI",
"d_fdi_lag1" = "Δ FDI (t-1)",
"d_fdi_lag2" = "Δ FDI (t-2)",
"d_gcf" = "Δ GCF",
"d_rd" = "Δ R&D",
"d_hc" = "Δ HC",
"d_trade" = "Δ Trade",
"d_manuf" = "Δ Manufacturing"),
gof_omit = "IC|Log|Adj|RMSE|Std.Errors", output = "flextable", fmt = 3) %>%
fontsize(size = 8, part = "all") %>% autofit()
| China: R&D | China: HC | Germany: R&D | Germany: HC | Germany: R&D + Manuf. | Germany: HC + Manuf. |
|---|---|---|---|---|---|---|
Constant | 0.057*** | 0.044*** | 0.001 | 0.007 | 0.002 | 0.008*** |
(0.006) | (0.011) | (0.003) | (0.004) | (0.002) | (0.003) | |
Δ FDI | 0.014* | 0.012 | 0.000 | -0.000 | 0.000 | -0.000 |
(0.006) | (0.010) | (0.002) | (0.002) | (0.001) | (0.001) | |
Δ FDI (t-1) | 0.022*** | 0.022** | 0.001 | 0.001 | 0.001 | 0.001 |
(0.005) | (0.008) | (0.002) | (0.002) | (0.001) | (0.001) | |
Δ FDI (t-2) | 0.022*** | 0.013 | -0.000 | -0.001 | 0.000 | 0.000 |
(0.006) | (0.009) | (0.001) | (0.001) | (0.001) | (0.001) | |
Δ GCF | 0.009*** | 0.004 | 0.006* | 0.005* | 0.004 | 0.003 |
(0.002) | (0.004) | (0.003) | (0.003) | (0.002) | (0.002) | |
Δ R&D | -0.329*** | -0.006 | 0.016 | |||
(0.068) | (0.040) | (0.029) | ||||
Δ HC | -0.530 | -1.120 | -1.044** | |||
(0.501) | (0.648) | (0.419) | ||||
Δ Trade | -0.003*** | -0.002 | 0.001** | 0.002** | 0.001* | 0.001*** |
(0.001) | (0.001) | (0.001) | (0.001) | (0.000) | (0.000) | |
Δ Manufacturing | 0.009*** | 0.009*** | ||||
(0.002) | (0.002) | |||||
Num.Obs. | 21 | 21 | 21 | 21 | 21 | 21 |
R2 | 0.761 | 0.405 | 0.740 | 0.786 | 0.880 | 0.917 |
F | 7.445 | 1.588 | 6.652 | 8.554 | 13.592 | 20.484 |
* p < 0.1, ** p < 0.05, *** p < 0.01 | ||||||
Китай: в distributed lag модели эффект FDI наиболее выражен с лагом 1 года, а в модели с R&D также значим лаг 2. R&D и Trade отрицательно значимы, GCF положительно значим. Германия: текущий FDI и оба лага статистически незначимы во всех спецификациях. Основные факторы - положительный Trade и положительный Manufacturing. Таким образом, для Китая есть отложенный положительный эффект FDI, особенно через 1 год, тогда как для Германии значимого текущего или лагового эффекта FDI не выявлено.
# 1) Автокорреляция: Breusch-Godfrey
bgtest(m_lag1_rd_CHN, order = 1)
##
## Breusch-Godfrey test for serial correlation of order up to 1
##
## data: m_lag1_rd_CHN
## LM test = 3.0067, df = 1, p-value = 0.08292
bgtest(m_lag1_rd_DEU, order = 1)
##
## Breusch-Godfrey test for serial correlation of order up to 1
##
## data: m_lag1_rd_DEU
## LM test = 0.1204, df = 1, p-value = 0.7286
# 2) Гетероскедастичность: Breusch-Pagan
bptest(m_lag1_rd_CHN)
##
## studentized Breusch-Pagan test
##
## data: m_lag1_rd_CHN
## BP = 4.5371, df = 4, p-value = 0.3382
bptest(m_lag1_rd_DEU)
##
## studentized Breusch-Pagan test
##
## data: m_lag1_rd_DEU
## BP = 3.0905, df = 4, p-value = 0.5428
# 3) Мультиколлинеарность
vif(m_lag1_rd_CHN)
## d_fdi_lag1 d_gcf d_rd d_trade
## 1.056300 1.159612 1.226990 1.240316
vif(m_lag1_rd_DEU)
## d_fdi_lag1 d_gcf d_rd d_trade
## 1.585198 2.420224 1.168883 1.738877
# 4) RESET-тест Рамсея
resettest(m_lag1_rd_CHN, power = 2:3, type = "fitted")
##
## RESET test
##
## data: m_lag1_rd_CHN
## RESET = 1.069, df1 = 2, df2 = 15, p-value = 0.3681
resettest(m_lag1_rd_DEU, power = 2:3, type = "fitted")
##
## RESET test
##
## data: m_lag1_rd_DEU
## RESET = 4.2938, df1 = 2, df2 = 15, p-value = 0.03354
# 5) Нормальность остатков: Shapiro-Wilk
shapiro.test(residuals(m_lag1_rd_CHN))
##
## Shapiro-Wilk normality test
##
## data: residuals(m_lag1_rd_CHN)
## W = 0.9216, p-value = 0.08207
shapiro.test(residuals(m_lag1_rd_DEU))
##
## Shapiro-Wilk normality test
##
## data: residuals(m_lag1_rd_DEU)
## W = 0.93143, p-value = 0.1314
Диагностика основной спецификации показывает, что сильных нарушений предпосылок модели не выявлено. Тест Бреуша-Пагана не обнаружил гетероскедастичности ни для Китая, ни для Германии, а значения VIF - низкие, поэтому проблема мультиколлинеарности отсутствует. Тест Шапиро-Уилка не позволяет отвергнуть нормальность распределения остатков. Для Китая тест Бреуша-Годфрея дает p-value около 0.083, поэтому на 5%-м уровне автокорреляция не подтверждается, хотя на 10%-м уровне можно говорить о слабых признаках существующей зависимости. Для Германии автокорреляция не выявлена. При этом RESET-тест для Германии оказался статистически значимым, что может указывать на неполную спецификацию модели, например на пропущенную нелинейность или дополнительные динамические эффекты.
data_pool <- bind_rows(
data_CHN %>% select(d_ln_tfp, d_fdi_lag1, d_gcf, d_rd, d_trade) %>% mutate(country = "China"),
data_DEU %>% select(d_ln_tfp, d_fdi_lag1, d_gcf, d_rd, d_trade) %>% mutate(country = "Germany"))
data_pool$country <- factor(data_pool$country, levels = c("China", "Germany"))
m_pool <- lm(d_ln_tfp ~ country * (d_fdi_lag1 + d_gcf + d_rd + d_trade), data = data_pool)
# Вывод результатов
modelsummary(
list(
"Pooled model: China vs Germany" = m_pool),
statistic = "std.error",
stars = c("*" = 0.1, "**" = 0.05, "***" = 0.01),
coef_map = c(
"(Intercept)" = "Constant",
"countryGermany" = "Germany",
"d_fdi_lag1" = "Δ FDI (t-1)",
"d_gcf" = "Δ GCF",
"d_rd" = "Δ R&D",
"d_trade" = "Δ Trade",
"countryGermany:d_fdi_lag1" = "Germany × Δ FDI (t-1)",
"countryGermany:d_gcf" = "Germany × Δ GCF",
"countryGermany:d_rd" = "Germany × Δ R&D",
"countryGermany:d_trade" = "Germany × Δ Trade"),
gof_omit = "IC|Log|Adj|RMSE|Std.Errors",
output = "flextable",
fmt = 3) %>%
fontsize(size = 8, part = "all") %>% autofit()
| Pooled model: China vs Germany |
|---|---|
Constant | 0.048*** |
(0.006) | |
Germany | -0.047*** |
(0.007) | |
Δ FDI (t-1) | 0.015*** |
(0.005) | |
Δ GCF | 0.006** |
(0.002) | |
Δ R&D | -0.241*** |
(0.067) | |
Δ Trade | -0.002** |
(0.001) | |
Germany × Δ FDI (t-1) | -0.015*** |
(0.005) | |
Germany × Δ GCF | -0.001 |
(0.004) | |
Germany × Δ R&D | 0.233** |
(0.091) | |
Germany × Δ Trade | 0.003** |
(0.001) | |
Num.Obs. | 44 |
R2 | 0.705 |
F | 9.038 |
* p < 0.1, ** p < 0.05, *** p < 0.01 | |
Формальная проверка подтверждает статистически значимое различие эффекта FDI между Китаем и Германией. В pooled-модели с одинаковым набором контрольных переменных для обеих стран коэффициент ΔFDI(t−1) для Китая положителен и статистически значим (β = 0.015, p < 0.01), тогда как для Германии соответствующий эффект практически равен нулю: 0.015 - 0.0154 = -0.0004. Коэффициент взаимодействия Germany × ΔFDI(t−1) отрицателен и статистически значим (β = −0.015, p < 0.01), поэтому нулевая гипотеза о равенстве коэффициентов FDI между странами отвергается. Это означает, что выявленное различие не сводится только к тому, что коэффициент значим в Китае и незначим в Германии: сами оценки эффекта статистически различаются. Это подтверждает основной вывод работы о том, что лагированная связь FDI с динамикой TFP выражена в Китае значительно сильнее, чем в Германии, при сопоставимой спецификации модели.
# Проверка стационарности FDI stock
adf.test(data_CHN$fdi_stock)
##
## Augmented Dickey-Fuller Test
##
## data: data_CHN$fdi_stock
## Dickey-Fuller = -0.16073, Lag order = 2, p-value = 0.9895
## alternative hypothesis: stationary
kpss.test(data_CHN$fdi_stock, null = "Trend")
## Warning in kpss.test(data_CHN$fdi_stock, null = "Trend"): p-value smaller than
## printed p-value
##
## KPSS Test for Trend Stationarity
##
## data: data_CHN$fdi_stock
## KPSS Trend = 0.2167, Truncation lag parameter = 2, p-value = 0.01
adf.test(data_DEU$fdi_stock)
##
## Augmented Dickey-Fuller Test
##
## data: data_DEU$fdi_stock
## Dickey-Fuller = -2.0519, Lag order = 2, p-value = 0.5526
## alternative hypothesis: stationary
kpss.test(data_DEU$fdi_stock, null = "Trend")
## Warning in kpss.test(data_DEU$fdi_stock, null = "Trend"): p-value greater than
## printed p-value
##
## KPSS Test for Trend Stationarity
##
## data: data_DEU$fdi_stock
## KPSS Trend = 0.08792, Truncation lag parameter = 2, p-value = 0.1
FDI inward stock для Китая является нестационарным, для Германии результаты ADF и KPSS неоднозначны. Для сопоставимости с основной спецификацией проверка робастности проводится в первых разностях FDI stock
# Первые разности
data_CHN$d_fdi_stock <- c(NA, diff(data_CHN$fdi_stock))
data_DEU$d_fdi_stock <- c(NA, diff(data_DEU$fdi_stock))
# Проверка стационарности
adf.test(na.omit(data_CHN$d_fdi_stock))
##
## Augmented Dickey-Fuller Test
##
## data: na.omit(data_CHN$d_fdi_stock)
## Dickey-Fuller = -4.0019, Lag order = 2, p-value = 0.02319
## alternative hypothesis: stationary
kpss.test(na.omit(data_CHN$d_fdi_stock), null = "Level")
##
## KPSS Test for Level Stationarity
##
## data: na.omit(data_CHN$d_fdi_stock)
## KPSS Level = 0.50856, Truncation lag parameter = 2, p-value = 0.03974
adf.test(na.omit(data_DEU$d_fdi_stock))
##
## Augmented Dickey-Fuller Test
##
## data: na.omit(data_DEU$d_fdi_stock)
## Dickey-Fuller = -2.9684, Lag order = 2, p-value = 0.2034
## alternative hypothesis: stationary
kpss.test(na.omit(data_DEU$d_fdi_stock), null = "Level")
## Warning in kpss.test(na.omit(data_DEU$d_fdi_stock), null = "Level"): p-value
## greater than printed p-value
##
## KPSS Test for Level Stationarity
##
## data: na.omit(data_DEU$d_fdi_stock)
## KPSS Level = 0.082429, Truncation lag parameter = 2, p-value = 0.1
После перехода к первым разностям свойства FDI stock улучшаются, однако результаты ADF и KPSS остаются неоднозначными для обеих стран.
# Лаг 1 для FDI stock
data_CHN$d_fdi_stock_lag1 <- c(NA, head(data_CHN$d_fdi_stock, -1))
data_DEU$d_fdi_stock_lag1 <- c(NA, head(data_DEU$d_fdi_stock, -1))
# R&D
m_stock_rd_CHN <- lm(d_ln_tfp ~ d_fdi_stock_lag1 + d_gcf + d_rd + d_trade, data = data_CHN)
m_stock_rd_DEU <- lm(d_ln_tfp ~ d_fdi_stock_lag1 + d_gcf + d_rd + d_trade, data = data_DEU)
# HC
m_stock_hc_CHN <- lm(d_ln_tfp ~ d_fdi_stock_lag1 + d_gcf + d_hc + d_trade, data = data_CHN)
m_stock_hc_DEU <- lm(d_ln_tfp ~ d_fdi_stock_lag1 + d_gcf + d_hc + d_trade, data = data_DEU)
# Вывод результатов
modelsummary(
list(
"China: R&D" = m_stock_rd_CHN,
"China: HC" = m_stock_hc_CHN,
"Germany: R&D" = m_stock_rd_DEU,
"Germany: HC" = m_stock_hc_DEU),
statistic = "std.error",
stars = c("*" = 0.1, "**" = 0.05, "***" = 0.01),
coef_map = c(
"(Intercept)" = "Constant",
"d_fdi_stock_lag1" = "Δ FDI Stock (t-1)",
"d_gcf" = "Δ GCF",
"d_rd" = "Δ R&D",
"d_hc" = "Δ HC",
"d_trade" = "Δ Trade"),
gof_omit = "IC|Log|Adj|RMSE|Std.Errors",
output = "flextable",
fmt = 3) %>%
fontsize(size = 8, part = "all") %>% autofit()
| China: R&D | China: HC | Germany: R&D | Germany: HC |
|---|---|---|---|---|
Constant | 0.047*** | 0.045*** | 0.002 | 0.007* |
(0.007) | (0.010) | (0.002) | (0.004) | |
Δ FDI Stock (t-1) | -0.005** | -0.006** | -0.000 | 0.000 |
(0.002) | (0.002) | (0.001) | (0.001) | |
Δ GCF | 0.004 | -0.000 | 0.005** | 0.003 |
(0.003) | (0.003) | (0.002) | (0.002) | |
Δ R&D | -0.224** | -0.012 | ||
(0.084) | (0.040) | |||
Δ HC | -0.718 | -1.092 | ||
(0.462) | (0.644) | |||
Δ Trade | -0.001 | 0.000 | 0.001** | 0.002*** |
(0.001) | (0.001) | (0.001) | (0.001) | |
Num.Obs. | 22 | 22 | 22 | 22 |
R2 | 0.481 | 0.354 | 0.699 | 0.741 |
F | 3.941 | 2.334 | 9.869 | 12.169 |
* p < 0.1, ** p < 0.05, *** p < 0.01 | ||||
Использование FDI inward stock как альтернативной меры FDI подтверждает различие между Китаем и Германией, однако не подтверждает устойчивость знака эффекта для Китая. В отличие от основной модели с FDI inflows, где лагированный эффект положителен, изменение FDI stock с лагом в один год связано с изменением TFP отрицательно и статистически значимо. Для Германии эффект остается близким к нулю и незначимым. Вывод о наличии связи FDI с TFP в Китае сохраняется, но ее направление чувствительно к используемой мере FDI.
# Данные для основной модели
chn_break <- na.omit(data_CHN[, c("year", "d_ln_tfp", "d_fdi_lag1", "d_gcf", "d_rd", "d_trade", "d_hc")])
# Возможные точки структурного разрыва
bp30 <- breakpoints(d_ln_tfp ~ d_fdi_lag1 + d_gcf + d_rd + d_trade, data = chn_break, h = 0.3, breaks = 1)
bp35 <- breakpoints(d_ln_tfp ~ d_fdi_lag1 + d_gcf + d_rd + d_trade, data = chn_break, h = 0.35, breaks = 1)
bp40 <- breakpoints(d_ln_tfp ~ d_fdi_lag1 + d_gcf + d_rd + d_trade, data = chn_break, h = 0.4, breaks = 1)
# Год разрыва
chn_break$year[bp30$breakpoints]
## [1] 2007
chn_break$year[bp35$breakpoints]
## [1] 2008
chn_break$year[bp40$breakpoints]
## [1] 2009
# Тоже самое проделаем для модели с HC вместо R&D для проверки стабильности результатов:
# Возможные точки структурного разрыва
bp30_hc <- breakpoints(d_ln_tfp ~ d_fdi_lag1 + d_gcf + d_hc + d_trade, data = chn_break, h = 0.3, breaks = 1)
bp35_hc <- breakpoints(d_ln_tfp ~ d_fdi_lag1 + d_gcf + d_hc + d_trade, data = chn_break, h = 0.35, breaks = 1)
bp40_hc <- breakpoints(d_ln_tfp ~ d_fdi_lag1 + d_gcf + d_hc + d_trade, data = chn_break, h = 0.4, breaks = 1)
# Год разрыва
chn_break$year[bp30_hc$breakpoints]
## [1] 2008
chn_break$year[bp35_hc$breakpoints]
## [1] 2008
chn_break$year[bp40_hc$breakpoints]
## [1] 2009
# Тест наличия структурного разрыва
fs <- Fstats(d_ln_tfp ~ d_fdi_lag1 + d_gcf + d_rd + d_trade, data = chn_break, from = 0.35, to = 0.7)
sctest(fs)
##
## supF test
##
## data: fs
## sup.F = 31.849, p-value = 0.000105
plot(fs)
fs_hc <- Fstats(d_ln_tfp ~ d_fdi_lag1 + d_gcf + d_hc + d_trade, data = chn_break, from = 0.35, to = 0.7)
sctest(fs_hc)
##
## supF test
##
## data: fs_hc
## sup.F = 34.751, p-value = 3.036e-05
plot(fs_hc)
Формальный тест структурного разрыва подтверждает наличие значимого изменения параметров модели. В зависимости от минимальной длины сегмента точка разрыва приходится на 2007–2009 гг. В качестве репрезентативной даты выбран 2008 год, находящийся в центре выявленного диапазона и совпадающий с глобальным финансовым кризисом, который существенно изменил условия международных потоков капитала и динамику иностранных инвестиций.
break_year <- 2008
data_CHN$post <- ifelse(data_CHN$year >= break_year, 1, 0)
# Гетерогенность эффекта FDI lag 1 до и после 2008 года
m_het_rd_CHN <- lm(d_ln_tfp ~ d_fdi_lag1 * post + d_gcf + d_rd + d_trade, data = data_CHN)
m_het_hc_CHN <- lm(d_ln_tfp ~ d_fdi_lag1 * post + d_gcf + d_hc + d_trade, data = data_CHN)
modelsummary(
list(
"China: R&D" = m_het_rd_CHN,
"China: HC" = m_het_hc_CHN),
statistic = "std.error",
stars = c("*" = 0.1, "**" = 0.05, "***" = 0.01),
coef_map = c(
"(Intercept)" = "Constant",
"d_fdi_lag1" = "Δ FDI (t-1)",
"post" = "Post-2008",
"d_fdi_lag1:post" = "Δ FDI (t-1) × Post",
"d_gcf" = "Δ GCF",
"d_rd" = "Δ R&D",
"d_hc" = "Δ HC",
"d_trade" = "Δ Trade"),
gof_omit = "IC|Log|Adj|RMSE|Std.Errors",
output = "flextable",
fmt = 3) %>%
fontsize(size = 8, part = "all") %>%
autofit()
| China: R&D | China: HC |
|---|---|---|
Constant | 0.074*** | 0.056*** |
(0.007) | (0.012) | |
Δ FDI (t-1) | 0.017 | 0.016 |
(0.012) | (0.019) | |
Post-2008 | -0.034*** | -0.028** |
(0.007) | (0.012) | |
Δ FDI (t-1) × Post | -0.008 | -0.005 |
(0.012) | (0.021) | |
Δ GCF | 0.005** | 0.001 |
(0.002) | (0.003) | |
Δ R&D | -0.272*** | |
(0.054) | ||
Δ HC | -0.297 | |
(0.469) | ||
Δ Trade | -0.003*** | -0.002* |
(0.001) | (0.001) | |
Num.Obs. | 22 | 22 |
R2 | 0.809 | 0.502 |
F | 10.585 | 2.517 |
* p < 0.1, ** p < 0.05, *** p < 0.01 | ||
До 2008 года коэффициент FDI с лагом 1 года положителен в обеих моделях, однако статистически незначим. После 2008 года сам уровень изменения TFP становится ниже: коэффициент Post-2008 отрицателен и значим в обеих спецификациях. При этом взаимодействие Δ FDI(t−1) x Post отрицательно, но статистически незначимо, поэтому формальных доказательств изменения именно эффекта FDI после 2008 года нет. Таким образом, структурный разрыв после 2008 года подтверждается прежде всего изменением общей динамики TFP, а не устойчивым изменением влияния FDI.