替换 R 中 lm() OLS 模型中的基础标准错误

Replace underlying standard errors in lm() OLS model in R

我想 运行 在 R 中使用 lm() 的 ols 模型并替换模型中的标准误差。在下面的示例中,我想用“2”替换每个标准错误:

set.seed(123)
x <- rnorm(100)
y <- rnorm(100)

mod <- lm(y ~x)

ses <- c(2,2)
coef(summary(mod))[,2] <- ses
sqrt(diag(vcov(mod))) <- ses

关于如何做到这一点有什么想法吗?谢谢。

那些任务不会成功。 coefsqrtvcov 不会传递这些值 "upstream"。你可以这样做:

> false.summ <- coef(summary(mod))
> false.sqrt.vcov <- sqrt(diag(vcov(mod))) 
> false.summ
               Estimate Std. Error    t value  Pr(>|t|)
(Intercept) -0.10280305 0.09755118 -1.0538371 0.2945488
x           -0.05247161 0.10687862 -0.4909459 0.6245623
> false.summ[ , 2] <- ses
> false.sqrt.vcov
(Intercept)           x 
 0.09755118  0.10687862 
> false.sqrt.vcov <- ses

您也可以至少修改 coef 矩阵的摘要对象,但摘要中没有 "vcov" 元素,尽管 vcov 确实 return一个值。

> summ <- summary(mod)
> summ$coefficients[ , 2] <- ses
> coef(summ)
               Estimate Std. Error    t value  Pr(>|t|)
(Intercept) -0.10280305          2 -1.0538371 0.2945488
x           -0.05247161          2 -0.4909459 0.6245623

> summ$vcov
NULL
> vcov(summ)
             (Intercept)           x
(Intercept)  0.009516233 -0.00103271
x           -0.001032710  0.01142304:

如果您想在应用于摘要对象时更改 vcov 的输出,您需要扭曲未缩放的 cov 矩阵。这是 vcov 用于该对象的代码-class:

> getAnywhere(vcov.summary.lm)
A single object matching ‘vcov.summary.lm’ was found
It was found in the following places
  registered S3 method for vcov from namespace stats
  namespace:stats
with value

function (object, ...) 
object$sigma^2 * object$cov.unscaled
<bytecode: 0x7fb63c784068>
<environment: namespace:stats>