簡體   English   中英

如何在R中手動計算線性模型的殘差

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM