Перекрывающие друг друга переменные в формуле - ярлык? - PullRequest
0 голосов
/ 01 ноября 2019

Итак, сегодня я видел формулу для OLS:

Y ~., Data = D

Что именно делает точка после ~ в формуле? Является ли это случайно способом умножения каждой переменной друг на друга во всех комбинациях? Как бы Вы это сделали?

E.g. Y ~ X1 + X2 + X3 + X1*X2 + X2*X3 + X1*X3 + X1*X2*X3

есть ли для этого ярлык?

Ответы [ 2 ]

2 голосов
/ 01 ноября 2019

Вы можете расширить формулу следующим образом (используя встроенный набор данных anscombe):

names(anscombe)
## [1] "x1" "x2" "x3" "x4" "y1" "y2" "y3" "y4"

formula(terms(y1 ~., data = anscombe))
## y1 ~ x1 + x2 + x3 + x4 + y2 + y3 + y4

names(coef(lm(y1 ~., data = anscombe)))
## [1] "(Intercept)" "x1"          "x2"          "x3"          "x4"         
## [6] "y2"          "y3"          "y4"        

Если вы хотите, чтобы все термины были до двухсторонних взаимодействий, используйте y ~ .^2

names(coef(lm(y1 ~.^2, data = anscombe)))

подача:

 [1] "(Intercept)" "x1"          "x2"          "x3"          "x4"         
 [6] "y2"          "y3"          "y4"          "x1:x2"       "x1:x3"      
[11] "x1:x4"       "x1:y2"       "x1:y3"       "x1:y4"       "x2:x3"      
[16] "x2:x4"       "x2:y2"       "x2:y3"       "x2:y4"       "x3:x4"      
[21] "x3:y2"       "x3:y3"       "x3:y4"       "x4:y2"       "x4:y3"      
[26] "x4:y4"       "y2:y3"       "y2:y4"       "y3:y4"  
1 голос
/ 01 ноября 2019
nm = c("X1", "X2", "X3")
reformulate(unlist(lapply(seq_along(nm), function(i)
    combn(nm, i, function(x) paste(x, collapse = "*")))), "y")
#y ~ X1 + X2 + X3 + X1 * X2 + X1 * X3 + X2 * X3 + X1 * X2 * X3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...