使用卡方检验编程r

时间:2016-06-23 12:42:53

标签: r

我想对我的因变量和90个独立变量中的每一个执行chi-square test,并返回具有p.value > 0.05的自变量名称列表。我尝试了for循环,但它不起作用。请有人帮帮我吗?

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

2 个答案:

答案 0 :(得分: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, ]

答案 1 :(得分:1)

你可以试试这个

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