2016-06-23 5 views
0

従属変数と90個の独立変数のそれぞれにchi-square testを入れて、p.value > 0.05を持つ独立変数の名前のリストを返したいとします。 forループを試しましたが、うまくいきません。誰か助けてくれますか?カイ2乗検定を使ってプログラミングする

c=numeric(ncol(datam)) 
for(i in 2:ncol(datam)){ 
    a[i]=table(datam[,1], datam[,i]) 
    b[i]=chisq.test(a[i]) 
    if(b[i]$p.value>0.05) c=b[i]$data.name + c 
    } 
c 

答えて

3

私は少し楽にあなたの人生を作るためbroomパッケージをお勧めします。これらのキーは、結果のデータフレームを生成し、興味のある変数をフィルタリングするために使用できます。

library(broom) 
set.seed(pi) 
DF <- data.frame(x = factor(sample(LETTERS[1:4], 50, replace = TRUE, prob = c(1, 1, 1, 4))), 
       y1 = factor(sample(LETTERS[1:4], 50, replace = TRUE)), 
       y2 = factor(sample(LETTERS[1:4], 50, replace = TRUE)), 
       y3 = factor(sample(LETTERS[1:4], 50, replace = TRUE, prob = c(4, 1, 1, 1))), 
       y4 = factor(sample(LETTERS[1:4], 50, replace = TRUE))) 

Results <- do.call(
    "rbind", 
    lapply(names(DF)[-1], 
     function(nm) 
     { 
      x <- chisq.test(DF[, 1], DF[[nm]]) 
      x <- tidy(x) 
      x$name = nm 
      x 
     } 
) 
) 

Results[Results$p.value <= 0.05, ] 
+0

を試すことができます:D – Asma

1

あなたはそれが非常にyouu感謝動作します。この

p_values <- sapply(2:ncol(datam),function(x) chisq.test(datam[,1],datam[,x])$p.value) 
selected_variables <- names(datam)[-1][p_values>0.5] 
selected_variables 
関連する問題