使vcov()接受;西格玛;来自R中的lm()对象
R中的使vcov()接受;西格玛;来自R中的lm()对象,r,function,regression,linear-regression,lm,R,Function,Regression,Linear Regression,Lm,R中的vcov()获取一个lm()对象,并仅返回截距和系数的方差协方差矩阵(即,一个2 x 2矩阵) 但是我想知道,我如何使vcov()也将sigma(即summary(lm.object)$sigma)添加到其操作中(即生成一个3 x 3矩阵) 例如,如果我们将m作为lm对象(如下),我们如何使vcov()计算截距,系数的方差协方差矩阵,以及m的西格玛 q <- data.frame(bob = 1:5 - 3, jen = c(1.7, 2.6, 2.5, 4.4, 3.8) - 3)
vcov()
获取一个lm()
对象,并仅返回截距
和系数
的方差协方差矩阵(即,一个2 x 2矩阵)
但是我想知道,我如何使vcov()
也将sigma
(即summary(lm.object)$sigma)
添加到其操作中(即生成一个3 x 3矩阵)
例如,如果我们将m
作为lm
对象(如下),我们如何使vcov()
计算截距
,系数
的方差协方差矩阵,以及m
的西格玛
q <- data.frame(bob = 1:5 - 3, jen = c(1.7, 2.6, 2.5, 4.4, 3.8) - 3)
m <- lm(bob ~ jen, q)
标准做法是只计算指定平均值的参数的标准误差,而不计算指定方差的参数的标准误差。无论是
lm
函数还是glm
函数都不会计算您要的数量
如果你真的想要这些信息,那么你必须自己推导出来:用回归系数和sigma写下对数似然,然后计算这个函数的Hessian的负值,在最大似然估计下进行评估。反转此矩阵以获得所需结果
结果表明,答案是块对角的,一个块表示回归系数,一个块表示sigma
。sigma
的条目是sigma^2/(2*n)
,其中n
是样本量
例如:
q <- data.frame(bob = 1:5 - 3, jen = c(1.7, 2.6, 2.5, 4.4, 3.8) - 3)
m <- lm(bob ~ jen, q)
p <- length(coef(m))
v <- matrix(0, p + 1, p + 1)
rownames(v) <- colnames(v) <- c(names(coef(m)), "sigma")
v[1:p, 1:p] <- vcov(m)
v[p + 1, p + 1] <- sigma(m)^2 / (2 * nobs(m))
v
#> (Intercept) jen sigma
#> (Intercept) 0.1560284 0.0000000 0.00000000
#> jen 0.0000000 0.1659876 0.00000000
#> sigma 0.0000000 0.0000000 0.07801418
q
q <- data.frame(bob = 1:5 - 3, jen = c(1.7, 2.6, 2.5, 4.4, 3.8) - 3)
m <- lm(bob ~ jen, q)
p <- length(coef(m))
v <- matrix(0, p + 1, p + 1)
rownames(v) <- colnames(v) <- c(names(coef(m)), "sigma")
v[1:p, 1:p] <- vcov(m)
v[p + 1, p + 1] <- sigma(m)^2 / (2 * nobs(m))
v
#> (Intercept) jen sigma
#> (Intercept) 0.1560284 0.0000000 0.00000000
#> jen 0.0000000 0.1659876 0.00000000
#> sigma 0.0000000 0.0000000 0.07801418