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

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

国民生活に関する世論調査のデータの分析2 - 「向上した」の比率の検定。prop.test()関数とブートストラップ法での検定

www.crosshyou.info

の続きです。今回は、去年よりも今年のほうが「向上した」という比率だけに注目します。

令和7年の「向上した」の比率は、5.3%で、令和6年の「向上した」の比率は、4.7%です。0.6パーセンテージ・ポイントの差がありますが、これは統計的に有意な差なのでしょうか?

まず、prop.test()関数で検定してみます。

p値は0.3889なので、有意な差があるとはいえません。

95%信頼区間は、-0.0195 ~ 0.0071 となっていて、0を含んでいます。

これでおしまいにしてもいいですが、ブートストラップ法でも確認してみます。

まず、令和6年の比率から令和7年の比率を計算する関数を自作します。

次に、作成した関数がうまく動いているか確認します。

この関数を何回も実行して結果を格納するためのベクトルを作成します。

for ループで5000回実行します。

quantile()関数で95%信頼区間を算出します。

-0.019 ~ 0.006 と0を含んでいます。prop.test()関数と同じような結果ですね。

グラフを描いて目でみてわかるようにします。

赤い垂線が0の位置の垂線で、緑の垂線が95%信頼区間です。

このように、prop.test()関数でも、ブートストラップ法によるシミュレーションでも令和6年と令和7年の世論調査で、「向上した」の比率は有意な差があるとは言えないことがわかりました。4.7%から5.3%になったからといっても、喜んではいけませんね。

今回は以上です。

次回は

www.crosshyou.info

です。

 

はじめから読むには、

www.crosshyou.info

です。

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

#
# 向上した、だけで検定
prop.test(x = c(r6up, r7up),
          n = c(r6total, r7total))
#
# Bootstrapでやってみる
# Step1. 両年の「向上した」の比率の差を計算する関数を作る
keisan <- function(){
  # 令和6年の「向上した」の比率
  r6r <- sample(c(0, 1), size = r6total, 
                prob = c*1
#
# Step6. グラフで可視化
library(tidyverse)
tibble(kekka) |> 
  ggplot(aes(x = kekka)) + 
  geom_histogram(color = "white", fill = "gray", bins = 50) +
  geom_vline(xintercept = 0, color = "red") +
  geom_vline(xintercept = quantile(kekka, 0.025), color = "green") +
  geom_vline(xintercept = quantile(kekka, 0.975), color = "green") +
  theme_minimal()
#

 

(冒頭の画像は Bing Image Creator で生成しました。プロンプトは Landscape of pink Anemone flowers, flowering under deep forests, under the blue sky and white clouds, photo です。)

 

*1:r6total - r6up) / r6total, r6up / r6total),
                replace = TRUE) |> mean()
  
  # 令和7年の「向上した」の比率
  r7r <- sample(c(0, 1), size = r7total,
                prob = c((r7total - r7up) / r7total, r7up / r7total),
                replace = TRUE) |> mean()
  
  # 二つの比率の差
  sa <- r6r - r7r
  
  # 結果を返す
  return(sa)
}
#
# Step2. keisanを複数回やって確認する
keisan()
keisan()
keisan()
keisan()
keisan()
#
# Step3. keisanの結果を格納するベクトル
kekka <- numeric(5000)
#
# Step4. keisanを5000回実行して結果をkekkaに格納する
for (i in 1:5000) {
  kekka[i] <- keisan()
}
#
# Step5. kekkaの0.25, 0.975のQuantile
quantile(kekka, c(0.025, 0.975