我正在处理以下类型的数据(样式在这里并不理想,我认为最好只运行代码):
library(mgcv)
library(geepack)
library(dplyr)
library(splines)
library(gamm4)
set.seed(1)
N = sort(sample(1:50, 10, replace = TRUE))
S = c("A","B","C","D","E","F","G","H","I","J")
S_Effect = rnorm(length(S),0,1)
S_Effect = rep(S_Effect,N)
S = rep(S,N)
N = rep(N,N)
X = rnorm(length(N),0,0.25)
f = function(N) {return((-200+(N-25)^2)/200)}
data = data.frame(O=rep(0,length(N)), X = X, N = N, S = S, S_Effect = S_Effect)
colnames(data) = c("O","X","N","S","S_Effect")
for (i in 1:length(N)) {
data$O[i] = rbinom(1,1,plogis(f(N[i])+X[i]+S_Effect[i]))
}
head(data)
因此,在大小为O
的组S
中收集了一个二进制响应变量N
。 S_Effect
表示组的随机效应(不一定是模型的一部分),X
表示可能的其他相关量。
现在,我对功能f
感兴趣,即N
对O
的(平稳)影响。结合使用gam
和随机效应(即s(S, bs='re')
)可以得出f
的估算值,但是由于随机效应可能会使真实的影响失真,因此难以解释该估算值。因此,我想使用一种对GEE进行不同处理的效果。
我很难选择正确的方法,尤其是从模型拟合中提取f
。
看来geepack
提供了适当的功能:
formula <- "O ~ 1 + bs(N) + X"
model1 <- geese(formula = as.formula(formula), id = S, corstr = "independence", family = binomial(), data = data)
model2 <- geeglm(formula = as.formula(formula), id = S, corstr = "independence", family = binomial(), data = data)
但是,geepack
文档似乎无法解释两者之间的区别,并且也没有简便的方法来访问f
(plot.gam
的思考)。至少geeglm
提供了拟合值。
从mgcv
/ gamm4
看,gamm
通过correlation
接受GEE建模,但不适用于二进制数据。 gam
和gamm4
似乎忽略了相关参数。根据文档,bam
可以通过rho
处理GEE,但实际上并没有任何有用的指导。
formula <- "O ~ 1 + s(N, bs='ps') + X + s(S, bs='re')"
model3 <- gamm4(formula = as.formula(formula), family = binomial(), correlation = corSymm(form = ~ 1 | S), data = data)
model4 <- gamm(formula = as.formula(formula), family = binomial(), correlation = corSymm(form = ~ 1 | S), data = data)
model5 <- gam(formula = as.formula(formula), family = binomial(), correlation = corSymm(form = ~ 1 | S), data = data)
model6 <- bam(formula = as.formula(formula), family = binomial(), rho = 1, data = data)
希望您能理解我的目标。除了提取f
的估算值的方法外,我将感谢您对常规方法的任何提示,评论和想法。此外,您是否碰巧/清楚地了解了不同的选择?这些文件告诉我的很少。