Rで何かをしたり、読書をするブログ

政府統計の総合窓口のデータや、OECDやUCIやのデータを使って、Rの練習をしています。ときどき、読書記録も載せています。

景気ウォッチャー調査の分野・業種DIのデータの分析5 - R で TOPIX の変化率を回帰分析

Bing Image Creator で生成: Close up photo of a Helleborus Niger flower, background is landscape of winter forests, photo

 

www.crosshyou.info

の続きです。

前回は、景気ウォッチャー調査データを使って、TOPIX の水準を回帰分析するモデルを作りました。

トレンド、前月のTOPIXをコントロールした後でも、景気ウォッチャー調査の先行きの方向性は有意な変数であることがわかりました。

今回は水準ではなくて、変化率を回帰分析してみます。

まず、mutate() 関数の中で、diff() 関数を使い、差分の変数を作ります。

そうしたら、変化率の変数を作ります。

df_ts というデータフレームから、ts オブジェクトを作成します。

変化率のグラフを描いてみます。

TOPIX の変化率よりも、景気ウォッチャー調査のデータの変化率のほうがとても大きいとわかります。

では、1か月前の変化率で今月の TOPIX の変化率を説明するモデル線形モデルを OLS で推定します。

現状の水準の p値が 0.0525 と 5% よりも少し上の水準ですが、残りは全て有意な変数です。

c_lev を削除してみます。

c_cur が有意ではなくなってしまいました。c_cur を削除します。

1月前の 先行きの方向性が 1パーセントポイント増えると、今月の TOPIX の上昇率が 0.07 パーセントポイント増えるということです。

c_fut の標準偏差は、

c_fut の標準偏差は 10.6 なので、c_fut が1標準偏差変化すると、10.6 * 0.07036 = 0.74 パーセントポイント、TOPIX の変化率が増えるということです。TOPIX の変化率の標準偏差は、4.69 なので、0.74 / 4.69 = 0.159 標準偏差ぶんの変化です。

実際の変化率とモデルの予測変化率の散布図を描いてみます。

黒い直線は切片が 0 で傾きが 1 の直線です。

もしも実際の変化率とモデルの予測値が全く同じなら、この直線状に点がプロットされますが、実際の散布図はかなりバラツキがあります。

TOPIX の変化率と景気ウォッチャー調査のデータは関連性は認められましたが、この景気ウォッチャー調査のデータで TOPIX の値を予測して儲けるのは難しいような気がします。

今回は以上です。

初めから読むには、

 

www.crosshyou.info

です。

今回のコードは以下になります。

#
# df_tsに差分の変数を加える
df_ts <- df_ts |> 
  mutate(d_cur = c(NA, diff(current)),
         d_fut = c(NA, diff(future)),
         d_lev = c(NA, diff(level)),
         d_tpx = c(NA, diff(topix)))
df_ts
#
# df_tsに変化率の変数を加える
df_ts <- df_ts |> 
  mutate(c_cur = d_cur / current * 100,
         c_fut = d_fut / future * 100,
         c_lev = d_lev / level * 100,
         c_tpx = d_tpx / topix * 100)
df_ts |> 
  select(d_cur:c_tpx)
#
# df_tsからtsオブジェクトを作成
ts_obj <- ts(df_ts,
             start = c(2000, 1),
             frequency = 12)
str(ts_obj)
#
# 変化率のグラフ
df_ts |> 
  ggplot(aes(x = date)) +
  geom_line(aes(y = c_tpx)) +
  geom_line(aes(y = c_cur), color = "red", alpha = 0.5) +
  geom_line(aes(y = c_fut), color = "green", alpha = 0.5) +
  geom_line(aes(y = c_lev), color = "gold", alpha = 0.5) +
  labs(title = "Change Percent Graph",
       subtitle = "Black-TOPIX, Red-Current, Green-Future, Gold-Level") +
  theme_bw()
#
# c_tpxを1か月前の変化率で説明するモデル
model4 <- dynlm(c_tpx ~ L(c_cur) + L(c_fut) + L(c_lev) + L(c_tpx),
                data = ts_obj)
summary(model4)
#
# c_levを削除する
model5 <- dynlm(c_tpx ~ L(c_cur) + L(c_fut) + L(c_tpx),
                data = ts_obj)
summary(model5)
#
# c_curを削除する
model6 <- dynlm(c_tpx ~ L(c_fut) + L(c_tpx),
                data = ts_obj)
summary(model6)
#
# c_fut の標準偏差
df_ts |> 
  summarize(sd = sd(c_fut, na.rm = TRUE),
            avg = mean(c_fut, na.rm = TRUE),
            tpx_sd = sd(c_tpx, na.rm = TRUE),
            tpx_avg = mean(c_tpx, na.rm = TRUE))
#
# df_tsにmodel6の予測値を追加
df_ts <- df_ts |> 
  mutate(model6 = c(NA, NA, model6$fitted.values))
#
# c_tpx と model6 の散布図
ggplot(df_ts, aes(x = c_tpx, y = model6)) +
  geom_point() +
  geom_abline(slope = 1, intercept = 0)
#