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