在 R 中使用采样权重进行纵向分析

问题描述

我有两项调查的纵向数据,我想进行事前分析。通常,我会使用 survey::svyglm()svyVGAM::svy_vglm(对于多项族)来包含采样权重,但这些函数不考虑随机效应。另一方面,lme4::lmer 考虑了重复测量,但不考虑采样权重。

对于持续的结果,我明白我可以做到

w_data_wide <- svydesign(ids = ~1,data = data_wide,weights = data_wide$weight)

svyglm((post-pre) ~ group,w_data_wide)

并得到与如果我可以将 lmer(outcome ~ group*time + (1|id),data_long) 与权重一起使用时得到的估计值[如果我错了,请纠正我]。

但是,对于分类变量,我不知道如何进行分析。 WeMix::mix() 有一个参数 weights,但我不确定它是否将它们视为采样权重。不过这个函数还是不能支持多项族。

所以,继续:您能否启发我如何对具有 2 个或更多级别的分类结果进行事前测试分析?任何有关 R 中的包/函数以及如何使用/编写它们的提示将不胜感激。

我在下面给出了一些具有二项式和多项式结果的数据集:

library(data.table)
set.seed(1)

data_long <- data.table(
  id=rep(1:5,2),time=c(rep("Pre",5),rep("Post",5)),outcome1=sample(c("Yes","No"),10,replace=T),outcome2=sample(c("Low","Medium","High"),outcome3=rnorm(10),group=rep(sample(c("Man","Woman"),5,weight=rep(c(1,0.5,1.5,0.75,1.25),2)
)

data_wide <- dcast(data_long,id~time,value.var = c('outcome1','outcome2','outcome3','group','weight'))[,`:=` (weight_Post = NULL,group_Post = NULL)]

编辑

正如我在下面的评论中所说,我一直使用 lmerglmer 以及用于计算权重的变量作为预测变量。碰巧 glmer 返回了很多问题(收敛、高特征值...),所以我再看看这篇文章和其他人中的@ThomasLumley 答案(https://stat.ethz.ch/pipermail/r-help/2012-June/315529.html | https://stats.stackexchange.com/questions/89204/fitting-multilevel-models-to-complex-survey-data-in-r) .

所以,我现在的问题是,是否可以将参与者 ID 用作 svydesign

中的集群
library(survey)
w_data_long_cluster <- svydesign(ids = ~id,data = data_long,weights = data_long$weight)
summary(svyglm(factor(outcome1) ~ group*time,w_data_long_cluster,family="quasibinomial"))

                     Estimate Std. Error t value Pr(>|t|)  
(Intercept)         1.875e+01  1.000e+00  18.746   0.0339 *
groupWoman         -1.903e+01  1.536e+00 -12.394   0.0513 .
timePre             5.443e-09  5.443e-09   1.000   0.5000  
groupWoman:timePre  2.877e-01  1.143e+00   0.252   0.8431  

并且仍然将 groupWoman:timePre 解释为不同性别组之间随着时间的推移结果的平均变化/改善率的差异,就好像我使用混合模型将参与者作为随机效应一样。

再次感谢您!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)