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.