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

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

都道府県別の道路平均交通量の分析3 - 交通量の変化率をt検定する。和歌山県と埼玉県以外は減少している。

(Bing Image Creator で生成: プロンプト: Closeup of Setaria viridis flowers, background is vast green field and long river, blue sky, photo)

www.crosshyou.info

の続きです。前回の分析で交通量が減っているように見えました。そこで今回は本当に減っているか、確認します。

まず、2015年度だけのデータフレーム、2020年度だけのデータフレームを作成します。

そして、変化幅、変化率を計算したデータフレームを作成します。

北海道は246台、7.96%も減ったということですね。

summary()関数をつかってdiff: 変化幅, pct: 変化率の平均値をみてみましょう。

平均値、中央値、第3分位値すべてマイナスですから、交通量が減っているのは間違いないようですね。

ヒストグラムを描いて分布を確認します。diff: 変化幅からです。

boundary = 0 にして、0をヒストグラムの境界線にして、geom_vline()で0の位置に赤い垂線を描きました。大半の都道府県がマイナスですね。

pct: 変化率も同じようにして変化率を描きます。

pct: 変化率も同じような分布ですね。

 交通量が増えているところもあるようですので、それがどこなのか、確認します。

和歌山県と埼玉県は交通量が増えたのですね。

その反対に、交通量が大きく減ったところはどこでしょうか?

岩手県や富山県が大きく減っていることがわかります。

次に、pctの平均値がほんとうにマイナスかどうか、統計的検定をします。

t.test()関数で実行すると、瞬間的にわかります。

p-valueが1.149e-14とほぼ0です。95%信頼区間は-5.079 ~ -3.525 と0を含んでいませんからpctの平均値はマイナスであることは間違いないですね。

inferパッケージで、シミュレーションベースでも検定してみます。

infer.netlify.app

https://infer.netlify.app/articles/t_test

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

まず最初に平均値を計算します。

そうしたら、ブートストラップ法で何回も平均値を計算します。

1000個の平均値が生成されました。これをvisualize()関数でヒストグラムにします。

赤い垂線が実際の平均値です。ブートストラップ法で生成した平均値とは大きく離れています。

get_p_value()関数でp値を算出します。

p値は0です。

inferパッケージには、t_test()関数というものがあって、これで、t.test()関数と同じことができます。

今回は以上です。

次回は

www.crosshyou.info

です。

 

初めから読むには、

www.crosshyou.info

です。

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

#
# 2015年だけのデータ
df_2015 <- df |> 
  filter(year == "2015年度") |> 
  arrange(pcode)
df_2015
#
# 2020年だけのデータ
df_2020 <- df |> 
  filter(year == "2020年度") |> 
  arrange(pcode)
df_2020
#
# kotsu の差、変化率のデータ
df_kotsu <- tibble(
  pcode = df_2015$pcode,
  pref = df_2015$pref,
  diff = df_2020$kotsu - df_2015$kotsu,
  pct = (df_2020$kotsu / df_2015$kotsu - 1) * 100
)
df_kotsu
#
# df_kotsu のサマリー
summary(df_kotsu)
#
# diff のヒストグラム
df_kotsu |> 
  ggplot(aes(x = diff)) +
  geom_histogram(color = "white", bins = 10,
                 boundary = 0) +
  geom_vline(xintercept = 0, color = "red")
#
# pct のヒストグラム
df_kotsu |> 
  ggplot(aes(x = pct)) +
  geom_histogram(color = "white", bins = 10,
                 boundary = 0) +
  geom_vline(xintercept = 0, color = "red")
#
# diff, pct がプラスの都道府県別は?
df_kotsu |> 
  arrange(desc(pct))
#
# diff, pct が大きくマイナスの都道府県は?
df_kotsu |> 
  arrange(pct)
#
# t検定
t.test(df_kotsu$pct)
#
# inferパッケージの読み込み
library(infer)
#
# pctの平均値の計算
mean(df_kotsu$pct)
observed_statistic <- df_kotsu |> 
  specify(response = pct) |> 
  calculate(stat = "mean")
observed_statistic
#
# null distributionの生成
set.seed(1)
null_dist_1_sample <- df_kotsu |> 
  specify(response = pct) |> 
  hypothesize(null = "point", mu = 0) |> 
  generate(reps = 1000, type = "bootstrap") |> 
  calculate(stat = "mean")
#
# null distributionのヒストグラム
null_dist_1_sample |> 
  visualize() +
  shade_p_value(observed_statistic,
                direction = "two-sided")
#
# p値の算出
p_value_1_sample <- null_dist_1_sample |> 
  get_p_value(obs_stat = observed_statistic,
              direction = "two-sided")
p_value_1_sample
#
# t_test()関数
t_test(df_kotsu, response = pct, mu = 0)
#