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

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

東証の上場会社の資金調達額のデータの分析4 - 株式公募と債券発行に相関関係があるかどうかをシミュレーションで確認する。

www.crosshyou.info

の続きです。前回は、株式公募や債券発行による資金調達には季節性があることが確認できました。今回は株式公募による資金調達と債券発行による資金調達には相関関係があるのかどうかを調べてみます。

まず、相関マトリックスをみてみます。

eqy_num: 株式公募の件数は、bond_num: 債券発行の件数、bond_val: 債券発行の金額との相関係数が0.4ぐらいなので弱い相関があるように思えます。eqy_val: 株式公募の金額は0.15ぐらいなので相関がないかもしれないですね。

散布図のマトリックスを描いてみます。

eqy_val, bond_val は対数変換した値で散布図にしました。eqy_num は、bond_num, bond_val と相関しているように見えます。

前回と同じく、inferパッケージでシミュレーションで相関関係があるかどうかを調べてみます。

https://infer.netlify.app/articles/observed_stat_examples#two-numerical-vars---correlation

このウェブサイトを参考にしています。

まず、eqy_num と bond_num の相関係数を算出します。

そうしたら、null distribution をシミュレーションで生成します。

このシミュレーションで生成した相関係数をヒストグラムであらわします。

赤い垂線が実際の相関係数です。このグラフを見ると、相関係数が実際の値になるのは、もしも eqy_num と bond_num が無相関ならばありえないくらい稀なことだとわかります。

p値を計算しましょう。

p値は 0 です。eqy_num と bond_num は相関が無い、とは言えないです。

Rには cor.test()関数という理論ベースで相関の有無を計算する関数があります。これを使って確認しましょう。

p-value = 1.057e-15 と、ほぼ0です。

eqy_num と bond_num は相関がありました。

とここまで書いてから、あ、もしかしたらこれはみせかけの相関かも?と思い浮かびました。というのは、eqy_num も bond_num も季節性があるからです。

図で表すと、

パターンBでなくて、パターンAかも!?と思いました。

なので、季節性を考慮してシミュレーションしてみます。

https://infer.netlify.app/articles/observed_stat_examples#multiple-explanatory-variables

こちらを参考にしてみます。

まず、線形モデルを生成します。

bond_numの係数は 0.0901 です。これは、季節性を考慮した状態で、bond_numが1増えるとeqy_numが0.0901増える、という意味です。

null distribution をシミュレーションで生成します。

この null_distから、termがbond_numだけをフィルターして、estimateの値をヒストグラムで視覚化します。

赤い垂線が実際のbond_numの係数です。こうしてみると、季節性を考慮してもbond_numとeqy_numは相関がありますね。

p値を求めます。

bond_numのp値は0.004です。0.05よりも小さいので、季節性を考慮してもbond_numとeqy_numは相関があることが確認できました。

lm()関数とsummary()関数で理論ベースでの確認もできますね。やってみます。

bond_numのp値が1.38e-05です。1.38e-05は、0.0000138です。理論ベースのほうがp値がずいぶんと小さいですね。

今回は eqy_numとbond_numに(季節性を考慮してもなお)相関があることを確認しました。

今回は以上です。

次回は、

www.crosshyou.info

です。

 

はじめから読むには、

www.crosshyou.info

です。

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

# 株式公募と債券発行の関係
#
# 相関係数マトリックス
df |> 
  select(eqy_num:bond_val) |>
  mutate(eqy_val = log(1 + eqy_val),
         bond_val = log(bond_val)) |> 
  cor()
#
# 散布図マトリックス
df |> 
  select(eqy_num:bond_val) |> 
  mutate(eqy_val = log(eqy_val + 1),
         bond_val = log(bond_val)) |> 
  plot()
#
# eqy_numとbond_numの相関を調べる
# 1. 相関係数を計算する
correlation_hat <- df |> 
  specify(eqy_num ~ bond_num) |> 
  calculate(stat = "correlation")
correlation_hat
#
# 2. null distributionの生成
set.seed(567)
null_dist <- df |> 
  specify(eqy_num ~ bond_num) |> 
  hypothesize(null = "independence") |> 
  generate(reps = 1000, type = "permute") |> 
  calculate(stat = "correlation")
#
# 3. null distributionのグラフ
null_dist |> visualize() +
  shade_p_value(obs_stat = correlation_hat,
                direction = "two-sided")
#
# 4. p-valueの算出
null_dist |> 
  get_p_value(obs_stat = correlation_hat,
              direction = "two-sided")
#
# 5. cor.test()関数
cor.test(df$eqy_num, df$bond_num)
#
# 季節性を考慮する
# 1. 線形モデルを作る
obs_fit <- df |> 
  specify(eqy_num ~ bond_num + month) |> 
  fit()
obs_fit
#
# 2. Null Distibutionの生成
set.seed(2525)
null_dist <- df |> 
  specify(eqy_num ~ bond_num + month) |> 
  hypothesize(null = "independence") |> 
  generate(reps = 1000, type = "permute") |> 
  fit()
#
# 3. Null Distributionのグラフ
null_dist |> 
  filter(term == "bond_num") |> 
  ggplot(aes(x = estimate)) +
  geom_histogram(color = "white") +
  geom_vline(xintercept = 0.0901, color = "red", linewidth = 1.2) +
  theme_minimal()
#
# 4. p値を求める
null_dist |> 
  get_p_value(obs_stat = obs_fit, direction = "two-sided")
#
# 5. 理論ベース
lm(eqy_num ~ bond_num + month, data = df) |> 
  summary()
#












 

(冒頭の画像は、Bing Image Creator で生成しました。プロンプトは、Landscape of South Eastern Asian mountains, close up of red Hibiscus flowers, blue sky, Photo です。)