Остаточная степень свободы n - p
(Более точно, n - qr.X$rank
. В дальнейшем я буду использовать qr.X$rank
вместо p
.), поэтому оценка дисперсии является
Таким образом, матрица ковариации дисперсии по вашей оценке beta_hat
составляет всего
chol2inv(R) * se2
# [,1] [,2]
#[1,] 0.22934170 -0.07352916
#[2,] -0.07352916 0.02405009
Очень часто нам нужна только маргинальная дисперсия, то есть диагонали этой полной дисперсионно-ковариационной матрицы. В этом случае нет необходимости звонить chol2inv
, чтобы вначале явным образом сформировать полную ковариационную матрицу. Мы можем вычислить диагоналей непосредственно при гораздо меньших вычислительных затрат:
Rinv <- backsolve(R, diag(qr.X$rank))
rowSums(Rinv^2) * se2
# [1] 0.22934170 0.02405009
Давайте проверим правильность путем сравнения с lm
:
fit <- lm(Sepal.Length ~ Sepal.Width, iris)
vcov(fit)
# (Intercept) Sepal.Width
#(Intercept) 0.22934170 -0.07352916
#Sepal.Width -0.07352916 0.02405009
Да, все правильно!
Наконец, некоторые комментарии на ваш публикуемую код:
Вместо
b <- (t(qr.Q(qr.X)) %*% y)[1:p]
вы можете просто использовать
b <- qr.qty(qr.X, y)[1:qr.X$rank]
Вы не должны экстракт R <- qr.R(qr.X)
для backsolve
; используя qr.X$qr
достаточно:
beta <- as.vector(backsolve(qr.X$qr,b))
Rinv <- backsolve(qr.X$qr, diag(qr.X$rank))
В целом, здесь полный сеанс:
## data
y <- iris$Sepal.Length
x <- iris$Sepal.Width
## add intercept to model matrix
X <- cbind(1,x)
## QR factorization of model matrix
qr.X <- qr(X)
## get estimated coefficient
b <- qr.qty(qr.X, y)
beta <- as.vector(backsolve(qr.X$qr, b))
## compute residuals (I don't use `qr.resid` and `qr.fitted`, though I can)
res <- as.vector(y - X %*% beta)
## residual standard error
se2 <- sum(res^2)/(nrow(X) - qr.X$rank)
## full variance-covariance matrix
chol2inv(qr.X$qr) * se2
@ZheyuanLi Принимая ответ в основном о том, показывая, что ответ работал и немного меньше о давая вознаграждение за усилия, которые вложил ответчик. Это не обязательно о профессиональном поведении; не принимая ответ, можно классифицировать как профессиональное поведение, когда вопрос не был (полностью) решен. – Jaap
@ZheyuanLi Здравствуйте, я был в дороге и не смог принять с мобильного .... Спасибо! – Nudibranch