[英]Predicting how many columns in R's model.matrix
有没有一种方法可以使用公式来预测在model.matrix中将要有多少列而无需实例化model.matrix?
我正在尝试优化用于构建sparse.model.matrix的代码:
构造稀疏mm的内存分配在此功能中效率低下。 因为它不知道末尾矩阵中将有几列,所以它无法为一个大矩阵做1个单一的内存分配。 相反,它将for循环遍历公式中的项,并分配许多较小的矩阵。 在for循环的每次迭代期间,它还会将矩阵绑定在一起以增大大的输出矩阵,该矩阵生成大量的内存分配,并且对于大数据而言确实很慢。
如果有一种方法可以计算最终结果需要多少列,我们可以预分配矩阵,并使sparse.model.matrix效率更高。
我面临的挑战是我不知道如何计算交互作用项需要多少列,尤其是如果存在a:b:c形式的交互作用时。 另外,我没有对比的经验,所以不知道这会如何影响所需的列数
这是一个小例子:
> set.seed(100)
> col_x1 = as.factor(sample(LETTERS[1:5], 10, replace = TRUE))
> col_x2 = as.factor(sample(LETTERS[1:10], 10, replace = TRUE))
> col_x3 = as.factor(sample(LETTERS[1:2], 10, replace = TRUE))
> df <- data.frame(X1 = col_x1, X2 = col_x2, X3 = col_x3)
> df
X1 X2 X3
1 B G B
2 B I B
3 C C B
4 A D B
5 C H A
6 C G A
7 E C B
8 B D B
9 C D B
10 A G A
> str(df)
'data.frame': 10 obs. of 3 variables:
$ X1: Factor w/ 4 levels "A","B","C","E": 2 2 3 1 3 3 4 2 3 1
$ X2: Factor w/ 5 levels "C","D","G","H",..: 3 5 1 2 4 3 1 2 2 3
$ X3: Factor w/ 2 levels "A","B": 2 2 2 2 1 1 2 2 2 1
> df_model_matrix <- model.matrix(~., df)
> dim(df_model_matrix)
[1] 10 9
> df_model_matrix <- model.matrix(~ X1 + X2 + X3 + X1*X2 + X2*X3 + X3*X1, df)
> dim(df_model_matrix)
[1] 10 28
> df_model_matrix <- model.matrix(~ X1 + X2 + X3 + X1*X2 + X2*X3 + X3*X1 + X1*X2*X3, df)
> dim(df_model_matrix)
[1] 10 40
在这种情况下,您要寻找的公式是:
如果您以非常特定的方式使用model.matrix(提供对比度,抑制截距等),则需要进行相应的修改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.