Рассчитать все возможные взаимодействия в model_matrix - PullRequest
0 голосов
/ 16 февраля 2019

Я моделирую данные с колеблющимся числом переменных.Как часть ситуации, мне нужно вычислить матрицу модели со всеми возможными комбинациями.Смотрите следующий пример для примера.Я могу получить все два взаимодействия, указав формулу как ~ .*..Однако этот конкретный набор данных имеет 3 переменные (ndim <- 3).Я могу получить все двух- и трехсторонние взаимодействия, указав формулу как ~ .^3.Проблема в том, что может быть более 4 переменных, которые мне нужно рассчитать, поэтому я хотел бы иметь возможность обобщить это.Я попытался указать формулу как ~ .^ndim, но это выдает ошибку.

Есть ли способ определить мощность в формуле с помощью переменной?

library(tidyverse)
library(mvtnorm)
library(modelr)

ndim <- 3

data <- rmvnorm(100, mean = rep(0, ndim)) %>%
  as_tibble(.name_repair = ~ paste0("dim_", seq_len(ndim)))

model_matrix(data, ~ .*.)
#> # A tibble: 100 x 7
#>    `(Intercept)`  dim_1   dim_2    dim_3 `dim_1:dim_2` `dim_1:dim_3`
#>            <dbl>  <dbl>   <dbl>    <dbl>         <dbl>         <dbl>
#>  1             1 -0.775  0.214   0.111         -0.166       -0.0857 
#>  2             1  1.25  -0.0636  1.40          -0.0794       1.75   
#>  3             1  1.07  -0.361   0.976         -0.384        1.04   
#>  4             1  2.08   0.381   0.593          0.793        1.24   
#>  5             1 -0.197  0.382  -0.257         -0.0753       0.0506 
#>  6             1  0.266 -1.82    0.00411       -0.485        0.00109
#>  7             1  3.09   2.57   -0.612          7.96        -1.89   
#>  8             1  2.03   0.247   0.112          0.501        0.226  
#>  9             1 -0.397  0.204   1.55          -0.0810      -0.614  
#> 10             1  0.597  0.335   0.533          0.200        0.319  
#> # … with 90 more rows, and 1 more variable: `dim_2:dim_3` <dbl>

model_matrix(data, ~ .^3)
#> # A tibble: 100 x 8
#>    `(Intercept)`  dim_1   dim_2    dim_3 `dim_1:dim_2` `dim_1:dim_3`
#>            <dbl>  <dbl>   <dbl>    <dbl>         <dbl>         <dbl>
#>  1             1 -0.775  0.214   0.111         -0.166       -0.0857 
#>  2             1  1.25  -0.0636  1.40          -0.0794       1.75   
#>  3             1  1.07  -0.361   0.976         -0.384        1.04   
#>  4             1  2.08   0.381   0.593          0.793        1.24   
#>  5             1 -0.197  0.382  -0.257         -0.0753       0.0506 
#>  6             1  0.266 -1.82    0.00411       -0.485        0.00109
#>  7             1  3.09   2.57   -0.612          7.96        -1.89   
#>  8             1  2.03   0.247   0.112          0.501        0.226  
#>  9             1 -0.397  0.204   1.55          -0.0810      -0.614  
#> 10             1  0.597  0.335   0.533          0.200        0.319  
#> # … with 90 more rows, and 2 more variables: `dim_2:dim_3` <dbl>,
#> #   `dim_1:dim_2:dim_3` <dbl>

model_matrix(data, ~.^ndim)
#> Error in terms.formula(object, data = data): invalid power in formula

Созданв 2019-02-15 по представьте пакет (v0.2.1)

1 Ответ

0 голосов
/ 16 февраля 2019

Вы можете использовать as.formula с paste в model_matrix:

model_matrix(data, as.formula(paste0("~ .^", ndim)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...