计算model_matrix

时间:2019-02-15 22:59:47

标签: r lm modelr

我正在模拟变量数量波动的数据。作为这种情况的一部分,我需要使用所有可能的组合来计算模型矩阵。有关示例,请参见以下reprex。我可以通过将公式指定为~ .*.来获得所有两个交互。但是,此特定数据集具有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

reprex package(v0.2.1)于2019-02-15创建

1 个答案:

答案 0 :(得分:2)

您可以将as.formula中的pastemodel_matrix一起使用:

model_matrix(data, as.formula(paste0("~ .^", ndim)))