好的直接回答这个问题。我有一个包含大量分类变量的数据库。
示例数据库包含一些变量,如下所示
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
答案 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