使用年資料(1982–2018,共37筆)。 目標重現:C = -13.20,LPM = -0.259,LGDP = 2.299,R² = 0.9956,DW = 0.6769。 三變數取對數得 LM、LGDP、LPM,執行 OLS,觀察 R² 與 DW 統計量,確認殘差存在序列相關問題。
從 BLS 下載的進口物價指數原始檔案中,篩選出代碼為 EIUIR 的序列(All
Imports
整體進口物價指數),並只保留月份資料(排除年度合計列)。接著限縮時間範圍在
1982 到 2018
年之間,將數值欄位轉為數字格式,最後把每年的月份資料取平均,得到每年一筆的年平均進口物價指數,存成
pm_raw。
簡單說就是:把原始月資料清理並壓縮成年資料。
library(tsDyn)
library(tidyverse)
library(lmtest)
# 讀取資料
m_raw <- read_csv("IMPGS.csv") %>%
mutate(year = as.integer(format(observation_date, "%Y"))) %>%
filter(year >= 1982, year <= 2018) %>%
group_by(year) %>%
summarise(M = mean(IMPGS, na.rm = TRUE))
gdp_raw <- read_csv("GDPC1.csv") %>%
mutate(year = as.integer(format(observation_date, "%Y"))) %>%
filter(year >= 1982, year <= 2018) %>%
group_by(year) %>%
summarise(GDP = mean(GDPC1, na.rm = TRUE))
pm_raw <- read_tsv("C:/Users/VivoBook/OneDrive/Desktop/計量經濟期末實證報告/ei.data.01.BEAImport.txt",
trim_ws = TRUE) %>%
filter(str_trim(series_id) == "EIUIR",
str_starts(period, "M"),
year >= 1982, year <= 2018) %>%
mutate(value = as.numeric(value)) %>%
group_by(year) %>%
summarise(PM = mean(value, na.rm = TRUE))
# 合併並取對數
df <- tibble(
year = 1982:2018,
LM = log(m_raw$M),
LGDP = log(gdp_raw$GDP),
LPM = log(pm_raw$PM)
)
# 敘述統計
summary(df)
## year LM LGDP LPM
## Min. :1982 Min. :5.714 Min. :8.897 Min. :4.333
## 1st Qu.:1991 1st Qu.:6.445 1st Qu.:9.216 1st Qu.:4.542
## Median :2000 Median :7.247 Median :9.554 Median :4.596
## Mean :2000 Mean :7.099 Mean :9.478 Mean :4.636
## 3rd Qu.:2009 3rd Qu.:7.781 3rd Qu.:9.728 3rd Qu.:4.789
## Max. :2018 Max. :8.037 Max. :9.906 Max. :4.949
# OLS
ols <- lm(LM ~ LGDP + LPM, data = df)
summary(ols)
##
## Call:
## lm(formula = LM ~ LGDP + LPM, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.090770 -0.041398 0.003083 0.028042 0.071774
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -15.70228 0.25611 -61.311 < 2e-16 ***
## LGDP 2.11872 0.06041 35.075 < 2e-16 ***
## LPM 0.58668 0.09654 6.077 6.85e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.04624 on 34 degrees of freedom
## Multiple R-squared: 0.9962, Adjusted R-squared: 0.996
## F-statistic: 4457 on 2 and 34 DF, p-value: < 2.2e-16
dwtest(ols)
##
## Durbin-Watson test
##
## data: ols
## DW = 0.60597, p-value = 4.13e-08
## alternative hypothesis: true autocorrelation is greater than 0
# 殘差圖
plot(df$year, resid(ols), type = "l",
main = "OLS 殘差折線圖",
xlab = "年份", ylab = "殘差",
col = "steelblue")
abline(h = 0, lty = 2)
本研究以 1982 至 2018 年共 37 筆年資料,對美國實質進口量(LM)進行 OLS 迴歸,解釋變數為實質 GDP(LGDP)與進口物價指數(LPM)。估計結果顯示截距項為 −15.70,LGDP 係數為 2.119,LPM 係數為 +0.587,整體模型解釋力極高,R² 達 0.9962。然而 DW 統計量僅 0.606,遠低於 2,顯示殘差存在明顯正序列相關,虛假迴歸疑慮成立,需進一步進行單根檢定。
本研究與原論文的主要差異在於 LPM 係數符號相反。 原論文估計 LPM 係數為 −0.259,符合理論預期(進口價格上漲則進口量減少);本研究則估計為 +0.587,方向相反。LGDP 係數與 R² 兩者相近,整體模型結構一致。 造成此差異的可能原因為資料修訂。本研究所使用之進口物價指數序列(EIUIR)與原論文相同,均來自 BLS 國際物價計畫(International Price Program),惟兩者下載時間不同。BLS 會對歷史資料進行回溯修訂,特別是季節調整因子每年重新計算後會套用至整段歷史序列,導致即使抓取相同時間範圍的資料,數值仍可能與原論文當時下載的版本存在差異,進而影響 OLS 估計結果。
實驗一發現 DW 很低,懷疑三條序列(LM、LGDP、LPM)各自有隨時間漂移的趨勢,也就是「非定態」。ADF 單根檢定就是用來正式確認這件事。 如果序列是非定態的,代表它有「單根」,用 OLS 直接迴歸會產生虛假迴歸。檢定結果預期是三條序列在原始水準下都有單根,但取一階差分後變成定態,這種情況稱為 I(1),是後續做共整合檢定的前提條件。
library(tseries)
# 對三個變數分別做 ADF 檢定
# 原始序列(含趨勢項)
adf.test(df$LM, k = 1)
##
## Augmented Dickey-Fuller Test
##
## data: df$LM
## Dickey-Fuller = -1.3835, Lag order = 1, p-value = 0.8136
## alternative hypothesis: stationary
adf.test(df$LGDP, k = 1)
##
## Augmented Dickey-Fuller Test
##
## data: df$LGDP
## Dickey-Fuller = -1.9938, Lag order = 1, p-value = 0.5756
## alternative hypothesis: stationary
adf.test(df$LPM, k = 1)
##
## Augmented Dickey-Fuller Test
##
## data: df$LPM
## Dickey-Fuller = -2.4196, Lag order = 1, p-value = 0.4096
## alternative hypothesis: stationary
# 一階差分後
adf.test(diff(df$LM), k = 1)
##
## Augmented Dickey-Fuller Test
##
## data: diff(df$LM)
## Dickey-Fuller = -5.2965, Lag order = 1, p-value = 0.01
## alternative hypothesis: stationary
adf.test(diff(df$LGDP), k = 1)
##
## Augmented Dickey-Fuller Test
##
## data: diff(df$LGDP)
## Dickey-Fuller = -3.7059, Lag order = 1, p-value = 0.03894
## alternative hypothesis: stationary
adf.test(diff(df$LPM), k = 1)
##
## Augmented Dickey-Fuller Test
##
## data: diff(df$LPM)
## Dickey-Fuller = -4.4187, Lag order = 1, p-value = 0.01
## alternative hypothesis: stationary
原始序列三個 p-value 都很大(0.41~0.81),無法拒絕單根假設,確認三條序列都是非定態的。 一階差分後三個 p-value 都很小(0.01~0.04),拒絕單根假設,確認差分後變成定態。 三條序列都是 I(1),符合後續做 Johansen 共整合檢定的前提條件。
原論文結論相同:LM、LGDP、LPM 原始序列皆為非定態,一階差分後皆為定態,同為 I(1)。數值不完全相同,但方向與結論完全一致。
確認三條序列之間有沒有「因果關係」,也就是說,LPM 的過去值能不能預測 LM 的未來值?反過來 LM 能不能預測 LPM? 注意這裡的「因果」不是真正的因果,而是統計上的預測能力。原論文預期結果是 LPM 顯著影響 LM 和 LGDP,但反方向不顯著,這也是後續 VECM 把 LPM 設為外生變數的依據。
library(lmtest)
grangertest(LM ~ LGDP, order = 2, data = df)
## Granger causality test
##
## Model 1: LM ~ Lags(LM, 1:2) + Lags(LGDP, 1:2)
## Model 2: LM ~ Lags(LM, 1:2)
## Res.Df Df F Pr(>F)
## 1 30
## 2 32 -2 2.8416 0.07411 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
grangertest(LGDP ~ LM, order = 2, data = df)
## Granger causality test
##
## Model 1: LGDP ~ Lags(LGDP, 1:2) + Lags(LM, 1:2)
## Model 2: LGDP ~ Lags(LGDP, 1:2)
## Res.Df Df F Pr(>F)
## 1 30
## 2 32 -2 3.5364 0.04178 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
grangertest(LM ~ LPM, order = 2, data = df)
## Granger causality test
##
## Model 1: LM ~ Lags(LM, 1:2) + Lags(LPM, 1:2)
## Model 2: LM ~ Lags(LM, 1:2)
## Res.Df Df F Pr(>F)
## 1 30
## 2 32 -2 2.8675 0.07251 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
grangertest(LPM ~ LM, order = 2, data = df)
## Granger causality test
##
## Model 1: LPM ~ Lags(LPM, 1:2) + Lags(LM, 1:2)
## Model 2: LPM ~ Lags(LPM, 1:2)
## Res.Df Df F Pr(>F)
## 1 30
## 2 32 -2 2.0648 0.1445
grangertest(LGDP ~ LPM, order = 2, data = df)
## Granger causality test
##
## Model 1: LGDP ~ Lags(LGDP, 1:2) + Lags(LPM, 1:2)
## Model 2: LGDP ~ Lags(LGDP, 1:2)
## Res.Df Df F Pr(>F)
## 1 30
## 2 32 -2 4.1753 0.02513 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
grangertest(LPM ~ LGDP, order = 2, data = df)
## Granger causality test
##
## Model 1: LPM ~ Lags(LPM, 1:2) + Lags(LGDP, 1:2)
## Model 2: LPM ~ Lags(LPM, 1:2)
## Res.Df Df F Pr(>F)
## 1 30
## 2 32 -2 2.4178 0.1063
Granger 因果檢定結果顯示,LPM 對 LGDP 具有顯著的單向因果關係(p=0.025),LM 與 LPM、LGDP 與 LPM 之間均不具有反向因果關係,整體而言 LPM 為較具預測能力的領先變數。
結論相同部分: LPM 顯著影響 LGDP(兩者皆顯著),且 LM、LGDP 均不影響 LPM,方向一致。
結論不同部分: LPM → LM:原論文顯著(p=0.003),本研究不顯著(p=0.073)。此差異推測與 LPM 資料修訂有關,BLS 歷史資料經回溯修訂後,LPM 的數值走勢與原論文略有不同,導致其對 LM 的短期預測能力下降。 LM → LGDP:本研究顯著(p=0.042),原論文不顯著(p=0.849)。此差異較大,可能原因有二:其一為落後期設定不同,原論文使用 EViews 自動選取落後期,本研究固定為 2 期;其二同樣受 LPM 資料修訂影響,間接改變了 LM 序列的動態結構。
實驗二確認三條序列都是 I(1),實驗三知道變數間有部分因果關係。現在要檢定它們之間是否存在長期均衡關係,也就是「共整合」。 如果兩條序列各自會漂移,但長期下來總是維持某個固定的比例關係,就稱為共整合。有共整合才能做 VECM,否則只能做一般 VAR。 原論文的結果是:三個變數一起檢定時沒有共整合,但兩兩之間有共整合,特別是 LM 與 LPM 之間。
library(urca)
# 三變數一起檢定
jo_all <- ca.jo(df[, c("LM", "LPM", "LGDP")],
type = "trace", K = 2, ecdet = "none")
summary(jo_all)
##
## ######################
## # Johansen-Procedure #
## ######################
##
## Test type: trace statistic , with linear trend
##
## Eigenvalues (lambda):
## [1] 0.18673008 0.11756374 0.01977582
##
## Values of teststatistic and critical values of test:
##
## test 10pct 5pct 1pct
## r <= 2 | 0.70 6.50 8.18 11.65
## r <= 1 | 5.08 15.66 17.95 23.52
## r = 0 | 12.31 28.71 31.52 37.22
##
## Eigenvectors, normalised to first column:
## (These are the cointegration relations)
##
## LM.l2 LPM.l2 LGDP.l2
## LM.l2 1.000000 1.0000000 1.0000000
## LPM.l2 2.195258 -1.2675449 -0.5867042
## LGDP.l2 -3.455845 -0.9582574 -2.1786638
##
## Weights W:
## (This is the loading matrix)
##
## LM.l2 LPM.l2 LGDP.l2
## LM.d -0.125827983 -0.055692449 -0.0836275702
## LPM.d -0.104404312 0.006484562 -0.0075255997
## LGDP.d -0.008816298 -0.019756604 0.0008877441
# LM 與 LPM
jo_lm_lpm <- ca.jo(df[, c("LM", "LPM")],
type = "trace", K = 2, ecdet = "none")
summary(jo_lm_lpm)
##
## ######################
## # Johansen-Procedure #
## ######################
##
## Test type: trace statistic , with linear trend
##
## Eigenvalues (lambda):
## [1] 0.1637798 0.1295946
##
## Values of teststatistic and critical values of test:
##
## test 10pct 5pct 1pct
## r <= 1 | 4.86 6.50 8.18 11.65
## r = 0 | 11.12 15.66 17.95 23.52
##
## Eigenvectors, normalised to first column:
## (These are the cointegration relations)
##
## LM.l2 LPM.l2
## LM.l2 1.00000 1.000000
## LPM.l2 -4.91842 -1.656727
##
## Weights W:
## (This is the loading matrix)
##
## LM.l2 LPM.l2
## LM.d 0.07318196 -0.036258772
## LPM.d 0.06129067 0.001857788
# LM 與 LGDP
jo_lm_lgdp <- ca.jo(df[, c("LM", "LGDP")],
type = "trace", K = 2, ecdet = "none")
summary(jo_lm_lgdp)
##
## ######################
## # Johansen-Procedure #
## ######################
##
## Test type: trace statistic , with linear trend
##
## Eigenvalues (lambda):
## [1] 0.1531976 0.0794459
##
## Values of teststatistic and critical values of test:
##
## test 10pct 5pct 1pct
## r <= 1 | 2.90 6.50 8.18 11.65
## r = 0 | 8.72 15.66 17.95 23.52
##
## Eigenvectors, normalised to first column:
## (These are the cointegration relations)
##
## LM.l2 LGDP.l2
## LM.l2 1.000000 1.000000
## LGDP.l2 -2.341346 -2.866283
##
## Weights W:
## (This is the loading matrix)
##
## LM.l2 LGDP.l2
## LM.d -0.47334002 0.01128264
## LGDP.d -0.05597286 0.02382479
# LPM 與 LGDP
jo_lpm_lgdp <- ca.jo(df[, c("LPM", "LGDP")],
type = "trace", K = 2, ecdet = "none")
summary(jo_lpm_lgdp)
##
## ######################
## # Johansen-Procedure #
## ######################
##
## Test type: trace statistic , with linear trend
##
## Eigenvalues (lambda):
## [1] 0.1806522 0.1204108
##
## Values of teststatistic and critical values of test:
##
## test 10pct 5pct 1pct
## r <= 1 | 4.49 6.50 8.18 11.65
## r = 0 | 11.46 15.66 17.95 23.52
##
## Eigenvectors, normalised to first column:
## (These are the cointegration relations)
##
## LPM.l2 LGDP.l2
## LPM.l2 1.0000000 1.000000
## LGDP.l2 -0.4891934 -2.241428
##
## Weights W:
## (This is the loading matrix)
##
## LPM.l2 LGDP.l2
## LPM.d -0.28868503 -0.0004163567
## LGDP.d -0.01951211 0.0100561679
三變數一起檢定,本研究與原論文相同,均無共整合關係。 兩兩檢定中,本研究所有組合均未發現共整合,與原論文有差異。
原論文發現 LM & LPM、LM & LGDP 各有 1 組共整合,本研究均未發現。主要原因仍推測為 LPM 資料修訂,LPM 數值走勢改變後,與 LM 之間的長期均衡關係不再顯著成立,連帶影響兩兩共整合的檢定結果。 此差異將影響後續 VECM 的設定方式,在實驗五中需特別說明。
經過前四個實驗確認三條序列皆為 I(1)、變數間存在因果關係與共整合後,最終使用 VECM 同時捕捉變數之間的短期動態調整與長期均衡關係。 根據實驗三的 Granger 結果,LPM 影響 LM 和 LGDP,但反方向不顯著,因此將 LM 和 LGDP 設為內生變數,LPM 設為外生變數。這樣的設定代表進口物價是由外部決定的(例如國際市場),而進口量和 GDP 則會對物價變動做出反應與調整。 VECM 最終估計出 LPM 對 LM 的長期彈性係數,即進口物價每變動 1%,進口量會變動多少%,這個係數乘以 25% 關稅就能換算出貿易戰的進口衝擊幅度。
library(vars)
# LPM 為外生變數,LM 與 LGDP 為內生變數
vecm <- VECM(df[, c("LM", "LGDP")],
lag = 2,
r = 1,
exogen = df[, "LPM", drop = FALSE],
estim = "ML")
summary(vecm)
## #############
## ###Model VECM
## #############
## Full sample size: 37 End sample size: 34
## Number of variables: 2 Number of estimated slope parameters 14
## AIC -498.9888 BIC -476.0934 SSR 0.09787494
## Cointegrating vector (estimated by ML):
## LM LGDP
## r1 1 -2.151685
##
##
## ECT Intercept LM -1
## Equation LM -1.1015(0.2520)*** -17.3159(4.0675)*** 0.0121(0.2274)
## Equation LGDP -0.0901(0.0512). -1.3185(0.8269) -0.0611(0.0462)
## LGDP -1 LM -2 LGDP -2
## Equation LM 1.8985(1.1866) 0.3644(0.2262) -1.6835(1.2443)
## Equation LGDP 0.7222(0.2412)** 0.0624(0.0460) -0.3555(0.2530)
## LPM
## Equation LM 0.5817(0.1687)**
## Equation LGDP 0.0295(0.0343)
本研究 VECM 估計結果顯示,LPM 對 LM 的係數為 +0.582,與原論文 −0.158 方向相反。換算後,25% 關稅導致美國進口量增加約 14.5%,與原論文結論(減少 4%)完全相反,不符合經濟理論預期。
從實驗一開始,LPM 係數符號就已相反(OLS 即為 +0.587),這個問題貫穿所有實驗直到 VECM。根本原因是 BLS 進口物價指數資料經歷回溯修訂,導致 LPM 序列走勢與原論文下載版本不同,進而使所有涉及 LPM 的估計結果方向偏誤。流程與方法設定均正確,差異來源明確且可解釋。