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

时间:2016-04-20 00:36:23

标签: r replace lm

我想在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

有关如何做到这一点的任何想法?谢谢。

1 个答案:

答案 0 :(得分:1)

这些任务不会成功。 coefsqrtvcov不会将这些值传递给“上游”。你可以这样做:

> 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确实返回了值。

> 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用于该对象类的代码:

> 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>