[英]How to manually calculate the residuals of linear model in R
我正在嘗試手動計算R中lm()給定的r平方
考慮到:
用sd(df$obs_values) == sd(df$preds_values)
和mean(df$obs_values) == mean(df$preds_values)
fit <- lm(obs_values ~ preds_values, df)
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
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.