【问题标题】:Programming r using chi-squared test使用卡方检验对 r 进行编程
【发布时间】:2016-06-23 12:42:52
【问题描述】:

我想对我的因变量和 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

【问题讨论】:

    标签: r


    【解决方案1】:

    我推荐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, ]
    

    【讨论】:

      【解决方案2】:

      你可以试试这个

      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
      

      【讨论】:

        猜你喜欢
        • 2013-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-03
        • 2017-08-17
        • 1970-01-01
        • 1970-01-01
        • 2014-01-19
        相关资源
        最近更新 更多