簡體   English   中英

在計算轉換結果變量的置信區間時,emmeans 是否使用 lm_robust 集群穩健標准誤差?

[英]Does emmeans use lm_robust cluster-robust standard errors when calculating confidence intervals for transformed outcome variables?

我正在使用emmeans package 檢查兩個連續預測變量之間的相互作用。 我正在使用來自estimatr package 的lm_robust()來執行線性回歸並獲得集群穩健的標准誤差。 結果變量以 SD 單位方差為中心並按比例縮放。 例如:

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

然后,我可以使用類似於以下的代碼執行成對對比或可視化X2的三個級別的線條:

emmip(fit, X2 ~ X1, CIs = TRUE, at = list(X2 = c(mean(X2) - sd(X2),
                                                 mean(X2),
                                                 mean(X2) + sd(X2))))

我不希望將結果變量反向轉換為其原始比例。

我的問題是emmeans是否使用集群穩健標准誤差來計算置信區間或它報告的 p 值,這種行為是否取決於結果變量是在其原始尺度上還是經過轉換? A short example on the estimatr package creators' website suggests that lm_robust objects can be used with emmeans , but I can't see lm_robust listed as a supported model on the "Models supported by emmeans" vignette page or the package documentation.

我相信 thar lm_robust 對象是 lm 的擴展,因此它使用 emmeans 對 lm 的支持。 反過來,這意味着估計是通過 coef(model) 得出的,並且它們的 SE 是使用 vcov(model) 得出的。 因此,如果 vcov() 返回您需要的穩健方差,emmeans 將使用它們。

對於大多數轉換,它將按照轉換小插圖中的描述工作。 特別是,指定 type = "response" 會導致估計和置信限被反向轉換,P 值被單獨保留,SE 由 delta 方法計算(但用於 CI 和測試) .

附加信息

首先,我發現lm_robust不繼承自lm 相反, estimatr package 包含自己對emmeans的支持。 沒有給出太多細節,但estimatr的開發者必須相信所提供的內容必須是適當的。

scale()轉換不是內置的,因為它很復雜。 僅僅說我們使用了"scale"並不像說它是"log"那么簡單,因為要使用scale()結果,我們需要知道用於居中和划分結果的內容。

解決方法是創建emmeans()及其親屬需要反轉轉換的 object; 這是由stats::make.link()emmeans::make.tran()返回的函數列表。 這是一個 function 將用於此目的:

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數據的示例:

> 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 

emmip()調用的 OP 中的代碼不正確,因為它使用emmeans()的規范,而不是emmip()

我會考慮在未來的更新中將這個比例轉換選項添加到emmeans::make.tran()中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM