在实践中统计分析包是如何计算 var/cov 误差矩阵的?
这个想法在理论上对我来说是很清楚的。但在实践中并非如此。我的意思是,如果我有一个随机变量向量,我知道方差/协方差矩阵将给出均值偏差向量的外积:。
但是当我有一个样本时,我的观察误差不是随机变量。或者更好的是,它们是,但前提是我从同一人群中抽取了许多相同的样本。否则,他们会被给予。所以,我的问题再次是:统计包如何从研究人员提供的观察列表(即样本)开始生成 var/cov 矩阵?
在实践中统计分析包是如何计算 var/cov 误差矩阵的?
这个想法在理论上对我来说是很清楚的。但在实践中并非如此。我的意思是,如果我有一个随机变量向量,我知道方差/协方差矩阵将给出均值偏差向量的外积:。
但是当我有一个样本时,我的观察误差不是随机变量。或者更好的是,它们是,但前提是我从同一人群中抽取了许多相同的样本。否则,他们会被给予。所以,我的问题再次是:统计包如何从研究人员提供的观察列表(即样本)开始生成 var/cov 矩阵?
类型的模型的协方差矩阵通常计算为其中是残差平方和,和是自由度(通常是观察数减去参数数)。
对于稳健和/或聚集的标准误差,乘积稍作修改。也可能有其他方法来计算协方差矩阵,例如由外部产品的期望所建议的。
这包含在Julian J. Faraway 的 Practical Regression and Anova using R 中,第 21 页 。
它在 R 中的计算示例,基于对mtcars
数据库中包含的多个汽车模型规格进行回归的每加仑英里数的线性模型:ols = lm(mpg ~ disp + drat + wt, mtcars)
. 这些是手动计算和lm()
函数的输出:
> rdf = nrow(X) - ncol(X) # Residual degrees of freedom
> s.sq = as.vector((t(ols$residuals) %*% ols$residuals) / rdf)
> # s square (OLS estimate of sigma square)
> (sigma = sqrt(s.sq)) # Residual standar error
[1] 2.950507
> summary(ols)
Call:
lm(formula = mpg ~ disp + drat + wt, data = mtcars)
...
Residual standard error: 2.951 on 28 degrees of freedom
> X = model.matrix(ols) # Model matrix X
> XtX = t(X) %*% X # X transpose X
> Sigma = solve(XtX) * s.sq # Variance - covariance matrix
> all.equal(Sigma, vcov(ols)) # Same as built-in formula
[1] TRUE
> sqrt(diag(Sigma)) # Calculated Std. Errors of coef's
(Intercept) disp drat wt
7.099791769 0.009578313 1.455050731 1.217156605
> summary(ols)[[4]][,2] # Output of lm() function
(Intercept) disp drat wt
7.099791769 0.009578313 1.455050731 1.217156605
通过线性回归,我们拟合了一个模型。是因变量,是预测(解释)变量。我们使用提供给我们的数据(训练集或样本)来估计总体。不被视为随机变量。由于是随机的。