
の続きです。前回はデータをウェブサイトからダウンロードして、それをRに読み込ませ、データがどんなだか少し確認しました。今回は刑法犯認知件数の経年変化をみてみます。
分析用に、year, code, city, crimeだけのあるデータフレームを用意しました。

グラフを描いてみます。縦軸がcrimeで横軸がyearで箱ひげ図を描いてみます。


何故か、一番左が2005年度で、一番右が1980年度と時間の向きが逆になってしまいましたが、1980年度、1985年度と比較すると、2000年度、2005年度のほうが件数が多いように見えます。
年度ごとの平均値をみてみます。

crimeは人口千人当たりの刑法犯認知件数です。1980年代は平均値は16.0人、中央値は13.1人だったのが、2005年度は平均値は21.0人、中央値は18.0人と増加しています。
グループごとの平均値に違いがあるかどうかは、ANOVA(ANalysis Of VAriance)ですね。aov()関数でモデルを作り、summary()関数で結果を確認します。

p値は8.23e-11と限りなく0ですね。0.0000000000823です。
TukeyHSD()関数でどのグループとどのグループが違うかを見ることができます。

青枠で囲った年度の組み合わせは違いがあります。一番違うのは1985年度と2000年度ですね。
中央値についても違いがあるかどうかをみてみます。Kruskal-Wallis検定というものでやります。kruskal.test()関数です。

p値が < 2.23-16となりました。中央値も年度によって違いがあります。
FSAパッケージのdunnTest()関数でどのグループとどのグループが違うかわかります。

星印のついているグループの組み合わせが違いがあるということです。
この結果の後半部分は以下のような表形式です。TukeyHSD()関数と同じような表です。

今回は以上です。
次回は
です。
はじめから読むには、
です。
今回のコードは以下になります。
#
# crimeのある都市だけのデータ
df_crime <- df_raw |>
filter(!is.na(crime)) |>
select(year, code, city, crime) |>
mutate(year = fct(year))
df_crime
#
# crimeの経年変化のグラフ
df_crime |>
ggplot(aes(x = year, y = crime)) +
geom_boxplot(aes(group = year)) +
theme_minimal()
#
# 年度ごとの平均値と中央値
df_crime |>
group_by(year) |>
summarize(average = mean(crime),
median = median(crime))
#
# ANOVA
ANOVA_model <- aov(crime ~ year, data = df_crime)
summary(ANOVA_model)
#
# Tukey Honest Significant Difference
TukeyHSD(ANOVA_model)
#
# 中央値の違い: Kruskal-Wallis検定
kruskal.test(crime ~ year, data = df_crime)
#
# どのグループとどのグループが違うか
library(FSA)
dunnTest(crime ~ year, data = df_crime, method = "bonferroni")
#
(冒頭の画像は、Bing Image Creator で生成しました。プロンプトは Splendid moment of natural landscape, full of white and Daisy flowers, which center color are yellow, blue sky far away, Photo です。)