获取稳健回归系数的置信区间 (MASS::rlm)
Getting confidence intervals for robust regression coefficient (MASS::rlm)
是否有任何可能的方法从 MASS::rlm 中实现的稳健回归中获得 95% CI 的回归系数?
# 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
显式调用 confint.default
似乎提供了良好的结果,如下所示:
confint.default(object = x, parm = "scale(Sepal.Width)", level = 0.95)
# 2.5 % 97.5 %
#scale(Sepal.Width) -0.3058138 0.01894847
编辑
confint
在传递 x
时使用方法 confint.lm
因为 x
属于 class lm
(以及 rlm
).调用 confint.default
明确避免了这种情况。这两个函数只有一行代码不同,如下图:
confint.lm
fac <- qt(a, object$df.residual)
confint.default
fac <- qnorm(a)
问题是 x$df.residual
是 NA
,因此,qt(a, object$df.residual)
产生 NA
而 qnorm(a)
没有这个问题。
聚会晚了,但请注意正态分布的 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
是否有任何可能的方法从 MASS::rlm 中实现的稳健回归中获得 95% CI 的回归系数?
# 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
显式调用 confint.default
似乎提供了良好的结果,如下所示:
confint.default(object = x, parm = "scale(Sepal.Width)", level = 0.95)
# 2.5 % 97.5 %
#scale(Sepal.Width) -0.3058138 0.01894847
编辑
confint
在传递 x
时使用方法 confint.lm
因为 x
属于 class lm
(以及 rlm
).调用 confint.default
明确避免了这种情况。这两个函数只有一行代码不同,如下图:
confint.lm
fac <- qt(a, object$df.residual)
confint.default
fac <- qnorm(a)
问题是 x$df.residual
是 NA
,因此,qt(a, object$df.residual)
产生 NA
而 qnorm(a)
没有这个问题。
聚会晚了,但请注意正态分布的 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