2

是否有任何可能的方法可以从稳健回归中获得 95% CI 的回归系数,如在 MASS::rlm 中实现的那样?

# libraries needed
library(MASS)
library(stats)
library(datasets)

# running robust regression
(x <-
  MASS::rlm(formula = scale(Sepal.Length) ~ scale(Sepal.Width),
            data = iris))
#> Call:
#> rlm(formula = scale(Sepal.Length) ~ scale(Sepal.Width), data = iris)
#> Converged in 5 iterations
#> 
#> Coefficients:
#>        (Intercept) scale(Sepal.Width) 
#>        -0.03728607        -0.14343268 
#> 
#> Degrees of freedom: 150 total; 148 residual
#> Scale estimate: 1.06

# getting confidence interval for the regression coefficient
stats::confint(object = x,
               parm = "scale(Sepal.Width)",
               level = 0.95)
#>                    2.5 % 97.5 %
#> scale(Sepal.Width)    NA     NA
4

2 回答 2

4

显式调用confint.default似乎提供了很好的结果,如下所示:

confint.default(object = x, parm = "scale(Sepal.Width)", level = 0.95)

#                        2.5 %     97.5 %
#scale(Sepal.Width) -0.3058138 0.01894847

编辑

confintconfint.lm传递时使用方法,x 因为它x属于类lm(以及rlm)。显式调用confint.default可以避免这种情况。这两个函数只有一行代码不同,如下图:

限制.lm

fac <- qt(a, object$df.residual)

confint.default

fac <- qnorm(a)

问题是x$df.residualNA因此qt(a, object$df.residual)产生了一个NAwhileqnorm(a)没有这个问题。

于 2018-03-07T16:48:23.160 回答
1

迟到了,但请注意,对于小样本量,正态分布的 CI 的覆盖率将低于预期。

rlm 对象的剩余自由度可以从,

summary(x)$df[2]  # see code for MASS:::summary.rlm

要为 rlm 结果编写自己的 confint 方法,请将 df 分配给 df.residual 槽,然后调用 confint.lm:

confint.rlm <- function(object, ...){
  object$df.residual <- MASS:::summary.rlm(object)$df[2]
  confint.lm(object, ...)
}

现在 confint 的行为符合预期,并且还基于学生的 t:

confint(x)
                        2.5 %     97.5 %
(Intercept)        -0.2004593 0.12588715
scale(Sepal.Width) -0.3071526 0.02028719
于 2022-02-06T15:15:03.067 回答