sparse.model.matrix 在 R 中丢失行

sparse.model.matrix loses rows in R

我正在研究常规 data.frame,它看起来对于 glm 函数来说太大了,所以我决定我将研究模型矩阵的稀疏表示,这样我就可以把这个稀疏矩阵转化为 glmnet 函数。但是 sparse.model.matrix 看起来像是从原始矩阵中删除了一些行。知道为什么会发生这种情况以及如何避免这种情况的解决方案吗? 代码如下:

> mm <- sparse.model.matrix(~clicks01+kl_tomek*bc1+hours+plec+1, 
data = daneOst)
> dim(mm)
[1] 1253223     292
> dim(daneOst)
[1] 1258836       6

这是因为 NA 的 !

运行sum(complete.cases(mm))。我打赌它也会给你 1253223.

所以用一个值(例如 'IMPUTED_NA' 或 -99999)替换数据框中的 NA,然后重试。

@WillemM 是正确的。 NAs 的存在将触发稀疏矩阵。对于大数据集,最好的方法是将文件读入带有 stringsAsFactors=FALSE 的数据框,然后选择所需的任何插补方法。如果您选择使用基于树的学习方法,则更容易将这些 NAs 归因于数据集中不存在的内容。对大数据集进行多重插补会花费很长时间,而且您还可能会丢失 R 会话。

我已经成功地将 na.action 更改为 na.pass,这包括我的矩阵中的所有行:

options(na.action='na.pass')

请注意,这是一个全局选项,因此您可能希望之后将其设置回原始值,以免弄乱您的其余代码。

previous_na_action <- options('na.action')
options(na.action='na.pass')
# Do your stuff...

options(na.action=previous_na_action$na.action)

来自 this 答案的解决方案。