R почему model.frame игнорирует вычитания в формуле? - PullRequest
0 голосов
/ 11 января 2019

Я озадачен формулами в R.

Скажем, у меня есть формула, где правая часть содержит преобразование, например log(var) или (1-var).

  • Если преобразование является вычитанием (1-var), то результат model.frame(...) игнорирует преобразованную переменную.
  • Однако, если преобразование является log(var), то результат model.frame(...) включает преобразованную переменную.

Почему? Это потому, что структура формул была написана для линейных моделей, а вычитания приводят к совершенной мультиколлинеарности? И самое главное: Как я могу получить переменные из формулы, которая включает в себя произвольно преобразованные переменные в правой части?

dt <- data.frame(V1=1:3, V2=4:6) # sample data

fml <- V1 ~ V2 + (1-V2)
model.frame(fml, dt) # get variables --> ignores (1-V2)
#   V1 V2
# 1  1  4
# 2  2  5
# 3  3  6

# This works
fml <- V1 ~ V2 + log(V2)
model.frame(fml, dt) # get variables --> includes log(V2)
#    V1 V2  log(V2)
# 1  1  4 1.386294
# 2  2  5 1.609438
# 3  3  6 1.791759

Характеристики

R version 3.5.0 (2018-04-23)
Platform: x86_64-w64-mingw32/x64 (64-bit)

1 Ответ

0 голосов
/ 11 января 2019

В отличие от log, знак вычитания имеет особое значение в синтаксисе формулы; в результате R может анализировать лог-функцию, но не знак вычитания. Чтобы регрессировать на 1 - X, используйте I (1 - x), как в

> dt <- data.frame(V1=1:3, V2=4:6) # sample data
> 
> fml <- V1 ~ V2 + I(1-V2)
> model.frame(fml, dt)
  V1 V2 I(1 - V2)
1  1  4        -3
2  2  5        -4
3  3  6        -5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...