Множество фиктивных переменных, построенных из фактора, имеет очень низкое информационное содержание. Например, рассматривая только столбцы вашей модельной матрицы, соответствующие вашему категориальному предиктору уровня 966, каждая строка содержит ровно один ноль 1 и 965.
Таким образом, вы обычно можете сохранить лот из памяти путем построения матрицы разреженных моделей с использованием Matrix::sparse.model.matrix()
(или MatrixModels::model.Matrix(*, sparse=TRUE)
, как предлагается в документации sparse.model.matrix
). Однако, чтобы использовать это, необходимо, чтобы какой-либо механизм регрессии, который вы используете, принимал матрицу модели + вектор ответа, а не требовал формулы (например, для выполнения линейной регрессии вам потребуется sparse.model.matrix
+ lm.fit
, а не возможность использовать lm
).
В отличие от оценки @ RuiBarradas 3,5 Гб для плотной модельной матрицы:
m <- Matrix::sparse.model.matrix(~x,
data=data.frame(x=factor(sample(1:966,size=9e5,replace=TRUE))))
format(object.size(m),"Mb")
## [1] "75.6 Mb"
Если вы используете функцию rlm
из MASS
package, что-то вроде этого должно работать:
library(Matrix)
library(MASS)
mm <- sparse.model.matrix(~x + factor(fe), data=pd)
rlm(y=pd$y, x=mm, ...)
Обратите внимание, что я на самом деле не проверял это (вы не приводили воспроизводимый пример); это, по крайней мере, поможет вам пройти этап создания матрицы модели, но я не знаю, выполнит ли rlm()
какие-либо внутренние вычисления, которые сломают и / или сделают матрицу модели не разреженной.