如何在R中手动计算线性模型的残差

时间:2018-10-11 07:51:09

标签: r lm

我正在尝试手动计算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 ......不同。

2 个答案:

答案 0 :(得分:1)

您不能仅仅在回归y - x中进行y ~ x来获得残差。回归系数去哪了?

fit <- lm(y ~ x)
b <- coef(fit)
resi <- y - (b[1] + b[2] * x)

答案 1 :(得分:0)

您有很多选择:

## 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