对多个变量进行卡方检验并提取R中的相关p值

时间:2014-09-29 19:22:33

标签: r

好的直接回答这个问题。我有一个包含大量分类变量的数据库。

示例数据库包含一些变量,如下所示

gender <- as.factor(sample( letters[6:7], 100, replace=TRUE, prob=c(0.2, 0.8) ))    
smoking <- as.factor(sample(c(0,1),size=100,replace=T,prob=c(0.6,0.4)))    
alcohol <- as.factor(sample(c(0,1),size=100,replace=T,prob=c(0.3,0.7)))    
htn <- as.factor(sample(c(0,1),size=100,replace=T,prob=c(0.2,0.8)))    
tertile <- as.factor(sample(c(1,2,3),size=100,replace=T,prob=c(0.3,0.3,0.4)))    
df <- as.data.frame(cbind(gender,smoking,alcohol,htn,tertile))

我想用卡方检验来检验这个假设,即吸烟者,酒精使用,高血压(htn)等部分与三分位数(3个因素)存在差异。然后我想提取每个变量的p值。

现在我知道我可以使用2乘3交叉列表测试每个单独的变量,但是有更高效的代码可以一次性导出所有变量的测试统计和p值,并提取每个变量的p值< / p>

提前致谢

Anoop

2 个答案:

答案 0 :(得分:2)

如果你想在一个陈述中进行所有比较,你可以做

mapply(function(x, y) chisq.test(x, y)$p.value, df[, -5], MoreArgs=list(df[,5]))
#    gender   smoking   alcohol       htn 
# 0.4967724 0.8251178 0.5008898 0.3775083 

当然,以这种方式进行测试在某种程度上在统计上是低效的,因为您在此处进行了多次测试,因此需要进行一些修正以保持适当的类型1错误率。

答案 1 :(得分:0)

如果要详细获得测试结果,可以运行以下代码块:

lapply(df[,-5], function(x) chisq.test(table(x,df$tertile), simulate.p.value = TRUE))

您只能得到p值:

lapply(df[,-5], function(x) chisq.test(table(x,df$tertile), simulate.p.value = TRUE)$p.value)

这是为了获取数据框中的p值:

data.frame(lapply(df[,-5], function(x) chisq.test(table(x,df$tertile), simulate.p.value = TRUE)$p.value))

感谢RPub的启发。 http://www.rpubs.com/kaz_yos/1204