Bing Image Creator で生成: Close up of chrysanthemum flowers, background is Orion in the night sky, photo
の続きです。今回は、2つのカテゴリカル変数があって、変数の比率の差の検定を infer パッケージのワークフローでやってみます。
https://infer.netlify.app/articles/observed_stat_examples#two-categorical-2-level-variables
が参考ページです。
まずは、2つのカテゴリカル変数を作成します。
一つめは、gdp_growth >= 0 なら positive, gdp_growth < 0 なら negative という変数です。
もう一つは、elder_index が平均よりも小さければ young, 平均よりも上ならば elder となるカテゴリカル変数です。
これで、2つのカテゴリカル変数が揃いました。table() 関数でクロス集計表をみてみます。
negative: gdp_growth < 0 のとき、elder は58、young は47とe lder のほうが多いです。
positive: gdp_growth >= 0 のとき、elder は125、young は146と elder のほうが多いです。
prop.table() 関数で比率をみてみます。
negative のとき、elder の比率は55%、positive のとき、elder の比率は46%です。
比率の差は、
9%ぐらいです。この9%の差は有意な差なのかを調べましょう、ということです。
infer パッケージのワークフローをする前に、せっかくですのでグラフを描いてみます。
positive の件数のほうがだんぜん多いことがわかります。
それでは、infer パッケージのワークフローに入ります。まずは、d_hat: 比率の差を求めます。
0.0911 さきほど求めた値と(あたりまえですが)同じです。
null distribution を生成します。
null distribution と d_hat のグラフを描いてみます。
赤い垂線のところが d_hat の 0.911 です。
p値を計算します。
p値は0.142と0.05よりも大きな値ですね。0.0911という比率の差は、0とは有意に違いがあるとは言えません。
95%の信頼区間も求めてみます。
ブートストラップ法で、1000個の d_hat を作ります。
get_confidence_interval() 関数で95%信頼区間を求めます。
グラフにします。
赤い線が0.0の位置の垂線です。95%の信頼区間がこの赤い垂線を含んでいるので、比率の差が0とは有意に異なるとは言えません。
今回は以上です。
次回は、
です。
初めから読むには、
です。
今回のコードは以下になります。
#
# gdp_growth がプラス成長ならpositive, マイナス成長ならnegative
# の変数を作る
df <- df |>
mutate(growth = if_else(gdp_growth >= 0, "positive", "negative"))
df
#
# elder_index が平均より下ならyoung, 上ならelderの変数を作る
df <- df |>
mutate(age = if_else(elder_index < mean(elder_index), "young", "elder"))
df
#
# growth と age のクロス集計
table(df$growth, df$age)
#
# negative, positive 別の elder, young の比率
prop.table(table(df$growth, df$age), margin = 1)
#
# 比率の差
0.5523810 - 0.4612546
#
# growth と age のグラフ
df |>
ggplot(aes(x = growth, fill = age)) +
geom_bar()
#
# infer パッケージのワークフローで比率の差(0.0911264)が有意に0と違うかどうか
# を調べる
# d_hat(比率の差)
d_hat <- df |>
specify(age ~ growth,
success = "elder") |>
calculate(stat = "diff in props",
order = c("negative", "positive"))
d_hat
#
# null distributionの生成
set.seed(321)
null_dist <- df |>
specify(age ~ growth, success = "elder") |>
hypothesize(null = "independence") |>
generate(reps = 1000, type = "permute") |>
calculate(stat = "diff in props", order = c("negative", "positive"))
null_dist
#
# null distribution のグラフ
visualize(null_dist) +
shade_p_value(obs_stat = d_hat, direction = "two-sided")
#
# p値の計算
null_dist |>
get_p_value(obs_stat = d_hat, direction = "two-sided")
#
# ブートストラップ法
set.seed(333)
boot_dist <- df |>
specify(age ~ growth, success = "elder") |>
generate(reps = 1000, type = "bootstrap") |>
calculate(stat = "diff in props",
order = c("negative", "positive"))
boot_dist
#
# 信頼区間の算出
percentile_ci <- boot_dist |>
get_confidence_interval(level = 0.95,
type = "percentile")
percentile_ci
#
# 信頼区間とブートストラップ法の d_hat
visualize(boot_dist) +
shade_confidence_interval(endpoints = percentile_ci) +
geom_vline(xintercept = 0, color = "red", linewidth = 2)
#