替换 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
关于如何做到这一点有什么想法吗?谢谢。
那些任务不会成功。 coef
、sqrt
和 vcov
不会传递这些值 "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>
我想 运行 在 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
关于如何做到这一点有什么想法吗?谢谢。
那些任务不会成功。 coef
、sqrt
和 vcov
不会传递这些值 "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>