簡體   English   中英

預測R模型中的列數

[英]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中的列數公式

如果您以非常特定的方式使用model.matrix(提供對比度,抑制截距等),則需要進行相應的修改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM