Hi, I am trying to replicate the R's result for VCV matrix of estimated coefficients from linear model as below data(mtcars) model <- lm(mpg~disp+hp, data=mtcars) model_summ <-summary(model) MSE = mean(model_summ$residuals^2) vcov(model) Now I want to calculate the same thing manually, library(dplyr) X = as.matrix(mtcars[, c('disp', 'hp')] %>% mutate(Intercept = 1)); solve(t(X) %*% X) * MSE Unfortunately they do not match. Could you please help where I made mistake, if any. Thanks
The number you need for MSE is sum(residuals(model)^2)/df.residual(model) On Wed, Sep 4, 2024 at 3:34?PM Daniel Lobo <danielobo9976 at gmail.com> wrote:> > Hi, > > I am trying to replicate the R's result for VCV matrix of estimated > coefficients from linear model as below > > data(mtcars) > model <- lm(mpg~disp+hp, data=mtcars) > model_summ <-summary(model) > MSE = mean(model_summ$residuals^2) > vcov(model) > > Now I want to calculate the same thing manually, > > library(dplyr) > X = as.matrix(mtcars[, c('disp', 'hp')] %>% mutate(Intercept = 1)); > solve(t(X) %*% X) * MSE > > Unfortunately they do not match. > > Could you please help where I made mistake, if any. > > Thanks > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide https://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.
Gabor Grothendieck
2024-Sep-05 14:36 UTC
[R] Calculation of VCV matrix of estimated coefficient
sigma(model)^2 will give the correct MSE. Also note that your model matrix has intercept at the end whereas vcov will have it at the beginning so you will need to permute the rows and columns to get them to be the same/ On Wed, Sep 4, 2024 at 3:34?PM Daniel Lobo <danielobo9976 at gmail.com> wrote:> > Hi, > > I am trying to replicate the R's result for VCV matrix of estimated > coefficients from linear model as below > > data(mtcars) > model <- lm(mpg~disp+hp, data=mtcars) > model_summ <-summary(model) > MSE = mean(model_summ$residuals^2) > vcov(model) > > Now I want to calculate the same thing manually, > > library(dplyr) > X = as.matrix(mtcars[, c('disp', 'hp')] %>% mutate(Intercept = 1)); > solve(t(X) %*% X) * MSE > > Unfortunately they do not match. > > Could you please help where I made mistake, if any. > > Thanks > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide https://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.-- Statistics & Software Consulting GKX Group, GKX Associates Inc. tel: 1-877-GKX-GROUP email: ggrothendieck at gmail.com