7

データ内の変数のすべての組み合わせに対してカイ二乗分析を実行しようとしていますが、私のコードは次のとおりです。

Data <- esoph[ , 1:3]
OldStatistic <- NA
for(i in 1:(ncol(Data)-1)){
for(j in (i+1):ncol(Data)){
Statistic <- data.frame("Row"=colnames(Data)[i], "Column"=colnames(Data)[j],
                     "Chi.Square"=round(chisq.test(Data[ ,i], Data[ ,j])$statistic, 3),
                     "df"=chisq.test(Data[ ,i], Data[ ,j])$parameter,
                     "p.value"=round(chisq.test(Data[ ,i], Data[ ,j])$p.value, 3),
                      row.names=NULL)
temp <- rbind(OldStatistic, Statistic)
OldStatistic <- Statistic
Statistic <- temp
}
}

str(Data)
'data.frame':   88 obs. of  3 variables:
 $ agegp: Ord.factor w/ 6 levels "25-34"<"35-44"<..: 1 1 1 1 1 1 1 1 1 1 ...
 $ alcgp: Ord.factor w/ 4 levels "0-39g/day"<"40-79"<..: 1 1 1 1 2 2 2 2 3 3 ...
 $ tobgp: Ord.factor w/ 4 levels "0-9g/day"<"10-19"<..: 1 2 3 4 1 2 3 4 1 2 ...


Statistic
    Row Column Chi.Square df p.value
1 agegp  tobgp      2.400 15       1
2 alcgp  tobgp      0.619  9       1

私のコードは、変数 1 対変数 3、および変数 2 対変数 3 のカイ二乗分析出力を提供し、変数 1 対変数 2 については欠落しています。一生懸命試しましたが、コードを修正できませんでした。コメントや提案は大歓迎です。可能なすべての組み合わせについてクロス集計を行いたいと思います。前もって感謝します。

編集

以前は SPSS でこの種の分析を行っていましたが、今は R に切り替えたいと考えています。

4

2 に答える 2

18

データのサンプルをいただければ幸いですが、これでうまくいくと思います。まず、すべての列の組み合わせを で作成しますcombnapply次に、コンボを反復する関数で使用する関数を記述します。plyrバックエンドのデータ構造に必要なものを簡単に指定できるので、私は使用するのが好きです。また、列の組み合わせごとに 1 回だけカイ 2 乗検定を計算する必要があることにも注意してください。これにより、処理速度も大幅に向上します。

library(plyr)

combos <- combn(ncol(Dat),2)

adply(combos, 2, function(x) {
  test <- chisq.test(Dat[, x[1]], Dat[, x[2]])

  out <- data.frame("Row" = colnames(Dat)[x[1]]
                    , "Column" = colnames(Dat[x[2]])
                    , "Chi.Square" = round(test$statistic,3)
                    ,  "df"= test$parameter
                    ,  "p.value" = round(test$p.value, 3)
                    )
  return(out)

})  
于 2011-09-12T00:33:28.053 に答える