在做glm之前随机播放数据,然后重复x次

时间:2013-10-07 11:40:48

标签: r glm

我有一些数据包含一个组变量(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公式。

感谢您的帮助!

1 个答案:

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