井出草平の研究ノート

全ての組み合わせでCramerのVを計算する、1つのデータフレームで実行する場合

先に作成したコードの変型版。

ides.hatenablog.com

コード

# ライブラリの読み込み
library(dplyr)

# ダミーデータの作成
set.seed(42)
dummy_data <- data.frame(matrix(sample(0:2, 1000, replace = TRUE), ncol = 10))
colnames(dummy_data) <- paste0("var", 1:10)

# Cramer's V関数の定義
cramers_v <- function(x, y) {
  contingency_table <- table(x, y)
  chi2 <- chisq.test(contingency_table)
  n <- sum(contingency_table)
  k <- min(nrow(contingency_table), ncol(contingency_table))
  cramers_v <- sqrt(chi2$statistic / (n * (k - 1)))
  return(list("Cramers_V" = cramers_v, "Chi_square" = chi2$statistic, "P_value" = chi2$p.value))
}

# 解析
combinations <- combn(ncol(dummy_data), 2)
result <- data.frame()

for (i in 1:ncol(combinations)) {
  x <- dummy_data[[combinations[1, i]]]
  y <- dummy_data[[combinations[2, i]]]
  analysis_result <- cramers_v(x, y)
  result <- rbind(result, c(combinations[, i], unlist(analysis_result)))
}

colnames(result) <- c("Var1", "Var2", "Cramers_V", "Chi_square", "P_value")

# CSVファイルへの書き出し
write.csv(result, "cramers_v_results.csv", row.names = FALSE)

確認

ちゃんと計算したかは、確認はvcdパッケージで確かめられる。

library(vcd)
tab <- table(dummy_data$var1, dummy_data$var2)
summary(assocstats(tab))

プロンプト

今回はchatGPT4.0で実行した。コードを書く力もPhindよりもchatGPT4.0の方が明らかに上だと思う。

Rのコードを作成してください。 まず、下記のダミーデータを作成してください。順序尺度の変数が10個含まれたデータフレームがあります。それぞれの変数は0から2までの値を取ります。 次に関数を作成します。 Cramer's Vの関数をパッケージを使わずに作ってください。 次に解析を行います。ダミーデータの中から2つの変数を選び、先ほど作成した関数を用いてCramer'sを計算します。すべての組み合わせで行ってください。出力としてCramer's、カイ二乗値、P値を示し、csvファイルとして書き出してください。