Как я могу определить, какие наблюдения используются в линейной регрессии? - PullRequest
0 голосов
/ 22 декабря 2018

У меня проблемы с запуском predict после запуска линейной регрессии, потому что я не могу понять, какие переменные X на самом деле включены в линейную регрессию.

Допустим, я запускаю модель:

model1 <- lm(outcome ~ employee + shape + size + color + I(color^2) 
  data = data)

Количество наблюдений, идентифицированных в выходных данных регрессии, равно 224605.
Когда я пытаюсь запустить прогнозирование, вот так:

test = data.frame(y = predict(model1), x = data$employee)

Error in data.frame(y = predict(model1), x = data$employee) : 
  arguments imply differing number of rows: 224605, 233262

Я думал, что смогу получить правильное количество наблюдений, например, так:

> test = na.omit(data, cols = all.vars(model1))
> nrow(test)
[1] 207256

но это все равно не дает правильного количества наблюдений.Есть ли прямой способ получить наблюдения, фактически используемые линейной регрессией?

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

Пропущенные наблюдения по умолчанию опущены.Если в строке есть NA для любой из переменных, используемых в модели, она будет опущена.Подробнее см. ?lm и раздел na.action.

Вы можете запустить na.omit(data[c("outcome", "employee", ..."color")]), чтобы получить фрейм данных с пропущенными переменными (поместите все столбцы в формуле в na.omit(). Вы можететакже вытащите его из объекта модели, model1$model - это фрейм данных, используемый для подгонки модели (пропущенные значения пропущены).

Вы также можете заглянуть в пакет broom, чтобы привести в порядок вашу модель.. broom::augment - это хороший способ добавить прогнозы обратно к исходным данным.

0 голосов
/ 22 декабря 2018

Попробуйте model.frame:

set.seed(1)

df <- data.frame(x = rnorm(10), y = rnorm(10))
df[c(3, 5), 1] <- NA
df[7, 2] <- NA

df
#             x           y
# 1  -0.6264538  1.51178117
# 2   0.1836433  0.38984324
# 3          NA -0.62124058
# 4   1.5952808 -2.21469989
# 5          NA  1.12493092
# 6  -0.8204684 -0.04493361
# 7   0.4874291          NA
# 8   0.7383247  0.94383621
# 9   0.5757814  0.82122120
# 10 -0.3053884  0.59390132

fit <- lm(y ~ x, df)

model.frame(fit)
#              y          x
# 1   1.51178117 -0.6264538
# 2   0.38984324  0.1836433
# 4  -2.21469989  1.5952808
# 6  -0.04493361 -0.8204684
# 8   0.94383621  0.7383247
# 9   0.82122120  0.5757814
# 10  0.59390132 -0.3053884
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...