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

对多个变量进行卡方检验,并提取R中的相关p值,r,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),si

好的,直接回答问题。我有一个数据库,里面有很多分类变量

包含以下几个变量的示例数据库

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))

gender如果要在一条语句中进行所有比较,可以

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类错误率。

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

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的鼓舞人心。

您希望在此处执行哪种类型的统计测试?了解这一点将有助于我们告诉您如何实施它。根据您想要使用的测试,有很多很多方法可以完成p值(有些方法在统计上比其他方法更合适)。如果您不确定应该进行哪项测试,您可能希望首先寻求统计建议。您好,很抱歉没有澄清。这是卡方检验。已更新问题。因此,在本例中,您想要4个不同的双向卡方检验p值?是的,但不是运行四次检验,是否有一种方法可以循环代码,使R在所有分类变量中自动执行?“需要进行一些更正,以保持适当的类型1错误率。”-为了缓解这个问题,可以将α水平除以进行的测试数量吗?@orrymr,这被称为Bonferroni校正。这很常见,但也很保守。你可以用谷歌搜索更多信息。