IDAS를 사용하는 우리나라 GDP

목표


《우리나라 GDP의 나우루 분배에 관한 연구》의 재현성을 확인한다(MIDAS 방법과 브리지 방정식 방법에만 한정)
우리나라 GDP 나우 주입에 대한 탐구
repository 여기 있습니다.

앞말


혼합 데이터 샘플링의 유효성을 조사하기 위해 MIDAS와 브리지 방정식을 사용합니다.
사용된 지수는 광공업지수(생산지수) 광공업종합(이하 iip)과 GDP의 분기 속보치이다.
또한 사용된 데이터는 e-stat의 데이터를 미리 처리한 후에 사용된다.

브리지 방정식

y_t = \alpha + \sum_{i=1}^{N} \beta_i x^Q_{i,t} + \varepsilon _t \\
x^Q_{i,t} = \frac{1}{3}(x^M_{i,3t} + 2 x^M_{i,3t-1} + 3 x^M_{i,3t-2} + 2 x^M_{i,3t-3} + x^M_{i,3t-4})
참조[1]
# ブリッジ方程式モデル(単回帰分析)
df4 = pd.merge(gdp, iip, left_index=True, right_index=True, how='outer')
df5 = pd.DataFrame(columns=['BRIDGE'])

x = np.array([])
flag = False
for date, IIP_YOY in zip(df4.index, df4['IIP_YOY']):

    x = np.append(x, IIP_YOY)
    if flag == False:
        if date == '2013-07-01':
            flag = True

    if flag:
        x3t = x[-1]
        x3tm1 = x[-2]
        x3tm2 = x[-3]
        x3tm3 = x[-4]
        x3tm4 = x[-5]
        xt = (x3t + 2*x3tm1 + 3*x3tm2 + 2*x3tm3 + x3tm4)/3
        record = pd.Series([xt],
                           index=df5.columns, name=date)
        df5 = df5.append(record)

df5.index.name = 'DATE'
df6 = pd.merge(df4, df5, left_index=True, right_index=True, how='outer')
df6 = df6.dropna()

# 目的変数(Y)、説明変数(X)
Y2 = df6['GDP_CYOY']
X2 = df6[['BRIDGE']]

# 線形回帰をする
model = linear_model.LinearRegression()
model.fit(X2, Y2)

# パラメータ算出
reg_a = model.coef_[0]
reg_b = model.intercept_

df6['NOWCAST'] = df6.apply(lambda x: reg_b + reg_a*x['BRIDGE'], axis=1)

MIDAS

y_t = \alpha + \sum_{i=1}^{K} \sum_{j=0}^{l_i} \beta_{i,j} x^M_{i,3t - j} + \varepsilon _t
# 日本の会計年度が4月始まりのため、4月を起点としている。
df['period'] = pd.to_datetime(df.index.to_series()).apply(
    lambda x: 3 if x.month in [1, 4, 7, 10] else (1 if x.month in [2, 5, 8, 11] else 2))

df = df[df.index != '2013-01-01']

df2 = pd.DataFrame(columns=[
                   'GDP_CYOY', 'IIP_YOY_Q1', 'IIP_YOY_Q2', 'IIP_YOY_Q3'])
for date, GDP_CYOY, IIP_YOY, period in zip(df.index, df.GDP_CYOY, df.IIP_YOY, df.period):

    if period == 1:
        q1 = IIP_YOY
    elif period == 2:
        q2 = IIP_YOY
    else:
        record = pd.Series([GDP_CYOY, q1, q2, IIP_YOY],
                           index=df2.columns, name=date)
        df2 = df2.append(record)

df2.index.name = 'DATE'


# 目的変数(Y)、説明変数(X)
Y = np.array(df2['GDP_CYOY'])
X = np.array(df2[['IIP_YOY_Q1', 'IIP_YOY_Q2', 'IIP_YOY_Q3']])

# 予測モデルを作成
clf.fit(X, Y)

# 偏回帰係数
ab = pd.DataFrame({"Name": ['IIP_YOY_Q1', 'IIP_YOY_Q2', 'IIP_YOY_Q3'],
                  "Coefficients": clf.coef_}).sort_values(by='Coefficients')
for index, row in ab.iterrows():
    if row.Name == 'IIP_YOY_Q3':
        b3 = row.Coefficients
    elif row.Name == 'IIP_YOY_Q2':
        b2 = row.Coefficients
    else:
        b1 = row.Coefficients
# 切片
print(clf.intercept_)
a = clf.intercept_

df2['NOWCAST'] = df2.apply(lambda x: a + b1*x['IIP_YOY_Q1'] +
                           b2*x['IIP_YOY_Q2'] + b3*x['IIP_YOY_Q3'], axis=1)


참고 문헌


[1]
[2]

좋은 웹페이지 즐겨찾기