在 R 中应用循环进行卡方检验
Apply loop for chi square test in R
您好,我正在尝试计算一组数据的卡方值。每组有 6 或 7 行,它们由一个标志分组。我总共有 619 行和 91 个标志。因此,对于每个组,我都会得到一个 chisq 和 p 值。我想要所有 91 组的输出,所以我可以将它们粘贴到 Excel。我不太喜欢编码,但尝试了一个循环,它最终只给我标志的最后一个值。据说我有 50 条左右的警告,但没有按要求放弃输出。以下是片段:
transaged <- transform(transaged, flag = as.numeric(interaction(HO_GROUP_CODE,START_DATE, drop=TRUE)))
for (i in 1:max(transaged$flag))
{
survey=as.data.frame(rbind(transaged$CHO,transaged$HO))[transaged$flag==i]
chisq.test(survey)
Sys.time()
chisq.test(survey)$p.value
result <- cbind(rownames(transaged),chisq.test(survey)$p.value)
}
我希望输出类似于
1. Chisq 21.34 p值 0.9
2. chisq 12.34 pvalue 0.89
依此类推直到 91
我还希望行名是数据框中第一列和第二列的组合,因为标志是通过对它们进行分组创建的。
所以它应该是这样的:
HO_GROUP_CODE(1st entry),START_DATE(1st entry) Chisq 21.34 pvalue 0.9
HO_GROUP_CODE(1st entry),START_DATE(2nd entry) Chisq 21.34 pvalue 0.89
HO_GROUP_CODE START_DATE AGE HO HO*
1 12th Oct 4 12 23
1 15th Nov 5 23 34
2 16th Dec 6 23 35
.....
HO 和 HO* 比较卡测试,同时根据 HO 组代码和开始日期分组的不同年龄。
如果可以避免循环,也请建议我。我在这里找到了一些帮助,但与我的需要无关。如果有类似的线程,请将我重定向到它。非常感谢!
这是我提出的问题的解决方案
i=1
for (i in 1:max(transaged$flag))
{
survey=as.data.frame(rbind(transaged$CHO[transaged$flag==i],transaged$HO[transaged$flag==i]))
chisq.test(survey)$p.value
result1 <- as.data.frame(cbind(flag=i,ChiSq=chisq.test(survey)$statistic,DF=chisq.test(survey)$parameter,Pvalue=chisq.test(survey)$p.value))
result<-rbind(result,result1)
}
finalage<-merge(result,unique(transaged[,.(HO_GROUP_CODE,START_DATE,flag)]),by='flag')
finalage$identifier<-'AGE'
您好,我正在尝试计算一组数据的卡方值。每组有 6 或 7 行,它们由一个标志分组。我总共有 619 行和 91 个标志。因此,对于每个组,我都会得到一个 chisq 和 p 值。我想要所有 91 组的输出,所以我可以将它们粘贴到 Excel。我不太喜欢编码,但尝试了一个循环,它最终只给我标志的最后一个值。据说我有 50 条左右的警告,但没有按要求放弃输出。以下是片段:
transaged <- transform(transaged, flag = as.numeric(interaction(HO_GROUP_CODE,START_DATE, drop=TRUE)))
for (i in 1:max(transaged$flag))
{
survey=as.data.frame(rbind(transaged$CHO,transaged$HO))[transaged$flag==i]
chisq.test(survey)
Sys.time()
chisq.test(survey)$p.value
result <- cbind(rownames(transaged),chisq.test(survey)$p.value)
}
我希望输出类似于 1. Chisq 21.34 p值 0.9 2. chisq 12.34 pvalue 0.89 依此类推直到 91
我还希望行名是数据框中第一列和第二列的组合,因为标志是通过对它们进行分组创建的。
所以它应该是这样的:
HO_GROUP_CODE(1st entry),START_DATE(1st entry) Chisq 21.34 pvalue 0.9
HO_GROUP_CODE(1st entry),START_DATE(2nd entry) Chisq 21.34 pvalue 0.89
HO_GROUP_CODE START_DATE AGE HO HO*
1 12th Oct 4 12 23
1 15th Nov 5 23 34
2 16th Dec 6 23 35
.....
HO 和 HO* 比较卡测试,同时根据 HO 组代码和开始日期分组的不同年龄。
如果可以避免循环,也请建议我。我在这里找到了一些帮助,但与我的需要无关。如果有类似的线程,请将我重定向到它。非常感谢!
这是我提出的问题的解决方案
i=1
for (i in 1:max(transaged$flag))
{
survey=as.data.frame(rbind(transaged$CHO[transaged$flag==i],transaged$HO[transaged$flag==i]))
chisq.test(survey)$p.value
result1 <- as.data.frame(cbind(flag=i,ChiSq=chisq.test(survey)$statistic,DF=chisq.test(survey)$parameter,Pvalue=chisq.test(survey)$p.value))
result<-rbind(result,result1)
}
finalage<-merge(result,unique(transaged[,.(HO_GROUP_CODE,START_DATE,flag)]),by='flag')
finalage$identifier<-'AGE'