我有一些数据包含一个组变量(0/1)和一个个人分数,约2000个人。数据集看起来像这样:
ID group score
A1 1 3.5
A2 1 3.2
A3 0 2.8
A4 0 2.5
我想测试是否可以通过分数预测组变量,并在R中使用了以下内容:
glm(group~score,family=binomial)
现在我想通过改组组变量测试我的p值,然后再次执行glm。我想每次在文件中打印得分的p值时至少10,000次,甚至更多次,这样每个排列就有一行。我看过sample(),但我很难将它与glm()以及如何仅输出p值相结合。在脚本/公式中,我想轻松更改排列的数量,如果我选择添加协变量,也可以更改glm公式。
感谢您的帮助!
答案 0 :(得分:3)
你走在正确的轨道上。
示例(我添加了一个值来抑制关于&#34的警告;拟合概率数字0或1")
ex <- read.table(textConnection(
"ID group score
A1 1 3.5
A2 1 3.2
A3 0 2.8
A4 0 2.5
A5 1 2.4"),header=TRUE)
g0 <- glm(group~score,data=ex,family=binomial)
现在你需要一个函数来计算汇总p值(你可以这样做)
这是replicate
中的动态,但这种方式更清晰。
pvalfun <- function() {
g <- update(g0,data=transform(ex,group=sample(group)))
coef(summary(g))["score","Pr(>|z|)"]
}
res <- replicate(1000,pvalfun())
或者
library(plyr)
res <- raply(1000,pvalfun(),.progress="text")
或者
library(glmperm)
ptest2 <- prr.test(group~score,"score",data=ex,family=binomial)
summary(ptest2)