首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在计算转换结果变量的置信区间时,for是否使用lm_robust聚类稳健标准误差?

在计算转换结果变量的置信区间时,for是否使用lm_robust聚类稳健标准误差?
EN

Stack Overflow用户
提问于 2020-05-29 16:24:14
回答 1查看 580关注 0票数 1

我正在使用emmeans包检查两个连续预测变量之间的交互作用。我正在使用来自lm_robust()包的estimatr来执行线性回归并获得集群健壮的标准错误。结果变量居中,并缩放到SD单元方差。例如:

fit <- lm_robust(scale(Y) ~ X1 * X2 + X3 + X4, data = mydata, cluster = school, se_type = 'CR2')

然后,我可以使用类似于以下代码的代码在三个X2级别执行成对的对比或可视化行:

代码语言:javascript
复制
emmip(fit, X2 ~ X1, CIs = TRUE, at = list(X2 = c(mean(X2) - sd(X2),
                                                 mean(X2),
                                                 mean(X2) + sd(X2))))

我不希望将结果变量转换为原来的规模。

我的问题是,emmeans是否使用集群稳健的标准错误来计算其报告的置信区间或p值,这种行为是否取决于结果变量是在其原始规模上还是在转换后的?在estimatr包创建者的网站上,一个简短的例子表明,lm_robust对象可以与emmeans一起使用,但我不能看到lm_robust作为支持的模型列出在"Models支持的“vignette 页面或包文档中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-29 22:18:45

我相信这个lm_robust对象是lm的一个扩展,所以它使用了lm对lm的支持。反过来,这将意味着估计数是通过coef(模型)获得的,其SE是用vcov(模型)导出的。因此,如果vcov()返回所需的健壮变量,则them将使用它们。

对于大多数转换,它将如关于转换的小插曲中所描述的那样工作。特别是,指定type = "response“将导致返回的估计和置信限-转换,P值将被单独处理,SE将由delta方法计算(但在CIs和测试中不使用)。

更多信息

首先,我发现lm_robust不是从lm继承的;相反,估值包集成了它自己对 does 的支持。给出的细节不多,但是估计的开发人员必须相信所提供的内容必须是适当的。

scale()转换不是内置的,因为它很复杂。仅仅说我们使用了"scale"并不像说它是"log"那样简单,比如说,因为要处理scale()结果,我们需要知道什么是用来中心和划分结果的。

解决方法是创建emmeans()及其亲属反转转换所需的对象;这是由stats::make.link()emmeans::make.tran()返回的表单的函数列表。以下是实现这一目的的一个功能:

代码语言:javascript
复制
make.scaletran = function(y, ...) {
    sy = scale(y, ...)
    if(is.null(m <- attr(sy, "scaled:center")))
       m = 0
    if(is.null(s <- attr(sy, "scaled:scale")))
        s = 1
    list(
        linkfun = function(mu) (mu - m) / s,
        linkinv = function(eta) s * eta + m,
        mu.eta = function(eta) s,
        valideta = function(eta) TRUE,
        name = paste0("scale(", signif(m, 3), ", ", signif(s, 3), ")")
    )
}

要使用它,您需要手动指定转换,因为它不是自动检测到的。下面是一个使用R中已有的warpbreaks数据的示例:

代码语言:javascript
复制
> warp.lmr = lm_robust(scale(breaks) ~ tension, cluster = wool, 
+     se_type = 'CR2', data = warpbreaks)

> tran = make.scaletran(warpbreaks$breaks)

> emmeans(warp.lmr, "tension", tran = tran)
 tension emmean    SE df lower.CL upper.CL
 L        0.624 0.619 51   -0.618   1.8666
 M       -0.133 0.181 51   -0.497   0.2301
 H       -0.491 0.219 51   -0.930  -0.0517

Results are given on the scale(28.1, 13.2) (not the response) scale. 
Confidence level used: 0.95 

> emmeans(warp.lmr, "tension", tran = tran, type = "response")
 tension response   SE df lower.CL upper.CL
 L           36.4 8.17 51     20.0     52.8
 M           26.4 2.39 51     21.6     31.2
 H           21.7 2.89 51     15.9     27.5

Confidence level used: 0.95 
Intervals are back-transformed from the scale(28.1, 13.2) scale 

OP中用于emmip()调用的代码是不正确的,因为它使用规范用于emmeans(),而不是emmip()

在将来的更新中,我将考虑将这个缩放转换选项添加到emmeans::make.tran()

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62090447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档