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

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

都道府県別の商業動態統計調査のデータの分析3 - Tidy ANOVA (Analysis of Variance: 分散分析) with infer

www.crosshyou.info

の続きです。前回は百貨店・スーパーの販売額の前年比をグラフにしました。

2021年度よりも、2022年度、2023年度のほうが前年比の平均値は高いようにグラフでは見えました。今回は、統計学的な観点からも確認しましょう。

2021年度、2022年度、2023年度と3つのグループがあってその3つの平均値に統計学的な違いがあるかを調べるのは、ANOVA(分散分析)ですね。シミュレーションベースの方法と理論ベースの方法の2つのアプローチをやってみます。

シミュレーションベースの方法は、inferパッケージを使います。

infer.tidymodels.org

https://infer.tidymodels.org/articles/anova.html

こちらのサイトを参考にします。

まず、F値を算出します。

次は、year: 年度とyoy: 前年比が関係ないと仮定して1000回シミュレーションでF値を計算します。一言でいうと、Null Distributionを生成します。

生成したNull Distributionの分布をヒストグラムにしてみてみます。

赤い垂線が実際のF値の垂線で、ヒストグラムが、年度と前年比が関係ないという仮定の下でシミュレーションしたF値です。こうしてみると、年度と前年比が関係ないという仮定の下では、実際に起きているF値はあり得ないということがわかります。つまり、年度と前年比が関係あるということですね。p値を計算してみます。

p値はゼロでした。以上、シミュレーションベースのANOVA(分散分析)でした。

続いて、理論ベースのANOVA(分散分析)をしてみます。aov()関数で簡単にできます。

F値は19.41とinferパッケージで計算した値と同じです。p値は3.74e-08とほとんどゼロですね。

今回は以上です。

次回は

www.crosshyou.info

です。

 

はじめから読むには、

www.crosshyou.info

です。

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

#
# inferパッケージの読み込み
library(infer)
#
# F値の算出
observed_F_value <- df_super_depart |> 
  specify(yoy ~ year) |> 
  hypothesize(null = "independence") |> 
  calculate(stat = "F")
observed_F_value
#
# Null Distributionの生成
set.seed(1991)
null_dist <- df_super_depart |> 
  specify(yoy ~ year) |> 
  hypothesize(null = "independence") |> 
  generate(reps = 1000, type = "permute") |> 
  calculate(stat = "F")
#
# Null Distributionのグラフ
null_dist |> 
  visualize() + 
  shade_p_value(observed_F_value,
                direction = "greater") +
  theme_minimal()
#
# p値の計算
null_dist |> 
  get_p_value(obs_stat = observed_F_value,
              direction = "greater")
#
# 理論ベースのANOVA(分散分析)
aov(yoy ~ year,
    data = df_super_depart) |> 
  summary()
#
# 3.74e-08とは?
format(3.74e-08,scientific = FALSE)
#

 

(冒頭の画像は、Bing Image Creator で生成しました。プロンプトは Landscape of seaside beach and high cliffs, close up of white and pink mottled camellia flowers, photo です。)