如何手动计算R中线性模型的残差
How to manually calculate the residuals of linear model in R
我正在尝试手动计算 R 中 lm() 给出的 r 平方
正在考虑:
fit <- lm(obs_values ~ preds_values, df)
sd(df$obs_values) == sd(df$preds_values)
和 mean(df$obs_values) == mean(df$preds_values)
为此我可以提取残差
res_a = residuals(fit)
然后将它们注入公式中:
y = sum( (df$obs_values - mean(df$obs_values))^2 )
r-squared = 1 - sum(res_a^2)/y
在这里我得到了预期的 r 平方
现在,我想手动获取残差。
它应该是微不足道的:
res_b = df$obs_values - df$predss_values
,但由于某些原因,res_b 不同于 res_a...
您不能只在回归 y ~ x
中执行 y - x
以获得残差。回归系数去哪儿了?
fit <- lm(y ~ x)
b <- coef(fit)
resi <- y - (b[1] + b[2] * x)
你有很多选择:
## Residuals manually
# option 1
beta_hat <- coef(fit)
obs_values_hat <- beta_hat["(Intercept)"] + beta_hat["preds_values"] * preds_values
u_hat <- obs_values - obs_values_hat # residuals
# option 2
obs_values_hat <- fitted(fit)
u_hat <- obs_values - obs_values_hat # residuals
# (option 3 - not manually) or just u_hat <- resid(fit)
## R-squared manually
# option 1
var(obs_values_hat) / var(obs_values)
# option 2
1 - var(u_hat) / var(obs_values)
# option 3
cor(obs_values, obs_values_hat)^2
我正在尝试手动计算 R 中 lm() 给出的 r 平方
正在考虑:
fit <- lm(obs_values ~ preds_values, df)
sd(df$obs_values) == sd(df$preds_values)
和 mean(df$obs_values) == mean(df$preds_values)
为此我可以提取残差
res_a = residuals(fit)
然后将它们注入公式中:
y = sum( (df$obs_values - mean(df$obs_values))^2 )
r-squared = 1 - sum(res_a^2)/y
在这里我得到了预期的 r 平方
现在,我想手动获取残差。
它应该是微不足道的:
res_b = df$obs_values - df$predss_values
,但由于某些原因,res_b 不同于 res_a...
您不能只在回归 y ~ x
中执行 y - x
以获得残差。回归系数去哪儿了?
fit <- lm(y ~ x)
b <- coef(fit)
resi <- y - (b[1] + b[2] * x)
你有很多选择:
## Residuals manually
# option 1
beta_hat <- coef(fit)
obs_values_hat <- beta_hat["(Intercept)"] + beta_hat["preds_values"] * preds_values
u_hat <- obs_values - obs_values_hat # residuals
# option 2
obs_values_hat <- fitted(fit)
u_hat <- obs_values - obs_values_hat # residuals
# (option 3 - not manually) or just u_hat <- resid(fit)
## R-squared manually
# option 1
var(obs_values_hat) / var(obs_values)
# option 2
1 - var(u_hat) / var(obs_values)
# option 3
cor(obs_values, obs_values_hat)^2