sparse.model.matrix теряет строки в 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

Ответ 1

У меня был некоторый успех с изменением 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)

Решение этого ответа.

Ответ 2

Это из-за НС!

sum(complete.cases(mm)). Готов поспорить, это также дает вам 1253223.

Поэтому замените NA в вашем фрейме данных на значение (например, "IMPUTED_NA" или -99999), а затем повторите попытку.

Ответ 3

@WillemM правильно. Присутствие NAs отключит разреженную матрицу. С большими наборами данных наилучшим подходом является чтение в вашем файле в фрейм данных с stringsAsFactors=FALSE а затем выбор любого метода вменения, который вы хотите. Если вы решите использовать методы обучения на основе дерева, его проще навязать этим NAs чем-то, отсутствующим в наборе данных. Множественное вменение в больших наборах данных будет безумно длинным, и вы также можете потерять сеансы R.