Bing Image Creator で生成: Close up photo of a Helleborus Niger flower, background is landscape of winter forests, photo
の続きです。
前回は、景気ウォッチャー調査データを使って、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 の値を予測して儲けるのは難しいような気がします。
今回は以上です。
初めから読むには、
です。
今回のコードは以下になります。
#
# 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)
#