【发布时间】:2021-09-20 18:38:56
【问题描述】:
我有来自两次调查的纵向数据,我想做一个事前分析。通常,我会使用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"),10,replace=T),
outcome3=rnorm(10),
group=rep(sample(c("Man","Woman"),5,replace=T),2),
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)]
编辑
正如我在下面的 cmets 中所说,我一直在使用 lmer 和 glmer 以及用于计算权重的变量作为预测变量。碰巧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 解释为不同性别组之间结果随时间的平均变化/改善率的差异,就好像我使用带有参与者的混合模型作为随机效应一样。
再次感谢您!
【问题讨论】:
-
您或许可以在这里得到更好的答案:stats.stackexchange.com
-
感谢您指出该软件包,@AnthonyDamico。我会尝试的,但不幸的是,它不适用于我正在使用的 R 版本(3.6.3)
标签: r survey mixed-models weighted longitudinal