在R中使用emmeans和geepack的各组边际均值和置信水平 请考虑以下事项:

在R中使用emmeans和geepack的各组边际均值和置信水平 请考虑以下事项:,r,emmeans,gee,R,Emmeans,Gee,当使用geepack拟合GEE时,我们收到一个模型,我们可以使用新值预测,但基本R不支持GEE模型来计算置信区间。要获得置信区间,我们可以使用emmeans::emmeans() 如果模型中的变量是分类的和连续的,我就会遇到问题 当用emmeans::emmeans()估算边际平均值时,我发现边际平均值是用整体数据计算的,而不是每组数据 问题:如何从R中的GEE模型中获得包括置信区间在内的各组估计平均值? 最小可复制示例: 资料 库(“dplyr”) #> #>正在附加包:“dplyr”

当使用
geepack
拟合GEE时,我们收到一个模型,我们可以
使用新值预测
,但基本R不支持GEE模型来计算置信区间。要获得置信区间,我们可以使用
emmeans::emmeans()

如果模型中的变量是分类的和连续的,我就会遇到问题

当用
emmeans::emmeans()
估算边际平均值时,我发现边际平均值是用整体数据计算的,而不是每组数据

问题:如何从R中的GEE模型中获得包括置信区间在内的各组估计平均值?


最小可复制示例:

资料

库(“dplyr”)
#> 
#>正在附加包:“dplyr”
#>以下对象已从“package:stats”屏蔽:
#> 
#>滤波器,滞后
#>以下对象已从“package:base”屏蔽:
#> 
#>相交、setdiff、setequal、并集
图书馆(“emmeans”)
#>警告:包“emmeans”是在R版本3.5.2下构建的
图书馆(“geepack”)
#添加分组变量
猪。组%突变(组=c(代表(“a”,20),代表(“b”,9)))
拟合模型

#适合模型
适合
#>电话:
#>geepack::geeglm(公式=浓度~数值(百分比)+系数(组),
#>数据=pigs.group,id=源)
#> 
#>系数:
#>(截距)作为数值(百分比)系数(组)b
#>           20.498948            1.049322           10.703857 
#> 
#>自由度:总共29个(即零);26剩余
#> 
#>缩放链接:标识
#>估计比例尺参数:[1]36.67949
#> 
#>相关性:结构=独立性
#>群集数:3最大群集大小:10
使用
emmeans::emmeans()
计算边际均值和LCL/UCL。然而,两组中
百分比的组平均值均为12.9。这是
百分比的总体观察平均值
,而不是组平均值

#计算每组的边际平均数。
#请注意,两组的“百分比”相同
emmeans::emmeans(fit,“percent”,by=“group”)
#>a组:
#>asymp.LCL asymp.UCL的平均SE百分比
#>12.9 34.1 3.252 Inf 27.7 40.4
#> 
#>b组:
#>asymp.LCL asymp.UCL的平均SE百分比
#>12.9 44.8 0.327 Inf 44.1 45.4
#> 
#>使用的协方差估计:vbeta
#>使用的置信水平:0.95
#使用每组的实际平均值创建新数据
新的0.dat%
分组依据(分组)%>%
汇总(百分比=平均值(百分比))
#这些是实际的群体平均数
new.dat
#>#tibble:2x2
#>组百分比
#>      
#>1 a 13.2
#>2 b 12.3
使用
predict
进行预测也会返回每组的其他估计平均值,但不能估计基线R中GEE的置信区间

#使用新数据进行预测
#这些应该是边际均值,但如何获得置信区间?
预测(拟合,newdata=new.dat)
#>        1        2 
#> 34.35000 44.14444

由(v0.2.1)创建于2019-02-08。您认为是计算问题的结果是统计问题

当模型中存在协变量时,事后分析中的常用方法是控制这些协变量。在给出的例子中,我们想比较不同组的平均反应。然而,反应也受到协变量,
百分比
的影响,并且各组的平均百分比不同。如果我们只计算各组的边际平均值,这些平均值的差异部分是因为
百分比的影响

在一个极端的例子中,想象一种情况,在这种情况下,团队没有任何区别,但百分比却有区别。然后,如果各组间的平均值
百分比
差异足够大,那么我们可以得到统计上不同的平均值,但它们的差异是因为
百分比
的影响,而不是因为
的影响

因此,通过预测相同百分比的平均值,即数据集中的总体平均百分比,可以获得“公平”比较。这是emmeans中使用的默认方法,结果称为调整平均值(在设计教科书中查找)

有一种情况下,使用不同的百分比值是合适的,即百分比是一个“中介变量”;也就是说,百分比在治疗和反应之间的因果路径中下降,因此
被认为会影响
百分比以及反应。看

如果你真的认为
百分比
是一个中介协变量,那么你可以得到如下单独的百分比:

 emmeans(model, "group", cov.reduce = percent ~ group)

但是,如果认为
百分比
独立于
,则不要这样做

我不想要每个协变量的边际均值。我想要每组平均值的边际平均值(这里:
group
)。我用您的方法尝试了以下方法和
ref\u grid()
摘要(ref\u grid(fit,at=list(percent=new.dat$percent))
。这将返回一个带有预测的margianl平均值和SE的表。但是没有LCL/UCL。请尝试
emmeans(fit,“group”)
emmeans(fit,“group”)
返回与
emmeans::emmeans(fit,“percent”,by=“group”)
相同的边际平均值(请参见上文示例中后者的结果)。这正是促使我写这篇文章的原因。我原以为
emmeans(fit,“group”)
会使用每组观察到的(百分比)平均值,但由于我收到了与
emmeans::emmeans(fit,“percent”,by=“group”)
相同的结果,因此我得出结论,无论是哪一组,结果都是基于总体平均值。