【发布时间】:2021-07-24 16:25:56
【问题描述】:
我有一个回归,我想使用置换测试。我想改组我的自变量并重新运行回归 1000 次。在运行回归时,我希望通过将置换系数大于或等于初始回归系数的次数相加来计算回归中每个系数的 ap 值(没有改组变量的回归)。
我为此构建了一些代码,但是 1) 它非常慢(尤其是在添加了更多协变量/交互效果的情况下)以及 2) 需要为每个系数运行 for 循环。
initial<-lm(y~x*x1, data=df)
summary(initial)
N=1000
PermuteFunction<-function(y=df$y, x=df$x, x1=df$x1)){
model.resample=lm(y~sample(x, replace=F)*x1)
#permutes predictor, then runs model
sum=summary(model.resample)$coefficients[2]
sum1=summary(model.resample)$coefficients[3]
return(sum)
}
sum=numeric(N)
sum1=numeric(N)
for (i in 1:N){
sum[i]<-PermuteFunction()
sum1[i]<-PermuteFunction()}
#calculating p-value
length(sum[sum>=initial$coefficients[2]])/N
length(sum[sum1>=initial$coefficients[2]])/N
有没有更有效的方法来做到这一点?我在这个论坛上看到了与置换测试相关的其他问题,但无法找到一个看起来为每个系数计算 p 值的问题。 lmPerm 似乎也不是用来洗牌的(除非我误解了它的功能)
【问题讨论】:
-
你看过
infer包吗?我认为它可以满足您的需求。还有一本相关的书——moderndive.com -
initial模型有两个回归量,它们的交互作用,PermuteFunction只适合一个。这是正确的吗?那么如何比较系数呢? -
有两件事可能会加快它的速度,那就是用
sum <- coef(model.rsample)[2]替换sum=summary(model.resample)$coefficients[2],因为summary计算了一堆你不需要的东西。sum <- replicate(1000, PermuteFunction)也可能比循环更快。 -
@Rui,你说得对,我必须对每个系数做同样的处理。编辑代码以显示我是如何做到的
-
另见
lmPerm包...
标签: r permutation