如何正确组合样条曲线和GEE建模?

时间:2019-08-08 09:28:35

标签: r gam mgcv

我正在处理以下类型的数据(样式在这里并不理想,我认为最好只运行代码):

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中收集了一个二进制响应变量NS_Effect表示组的随机效应(不一定是模型的一部分),X表示可能的其他相关量。

现在,我对功能f感兴趣,即NO的(平稳)影响。结合使用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文档似乎无法解释两者之间的区别,并且也没有简便的方法来访问fplot.gam的思考)。至少geeglm提供了拟合值。

mgcv / gamm4看,gamm通过correlation接受GEE建模,但不适用于二进制数据。 gamgamm4似乎忽略了相关参数。根据文档,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的估算值的方法外,我将感谢您对常规方法的任何提示,评论和想法。此外,您是否碰巧/清楚地了解了不同的选择?这些文件告诉我的很少。

0 个答案:

没有答案