Как вручную рассчитать невязки линейной модели в R - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь вручную вычислить 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 голосов
/ 11 октября 2018

У вас есть много вариантов:

## 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
0 голосов
/ 11 октября 2018

Вы не можете просто сделать y - x в регрессии y ~ x, чтобы получить остатки.Куда делись коэффициенты регрессии?

fit <- lm(y ~ x)
b <- coef(fit)
resi <- y - (b[1] + b[2] * x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...