Я хочу использовать cv.glmnet из библиотеки glmnet в R. Одна из моих переменных - это символьное представление дня недели или фактора типа. Как я могу это сделать?

У меня есть фрейм данных, содержащий переменную nameDay, которая является факторной переменной. Дни представлены в виде символов («суббота», «понедельник» ...), но я преобразовал их в множители. Вот 6 верхних строк этого фрейма данных для воспроизведения:

head(Casual.data) 

casual    casAvg Year weather season holiday humidity   medWs  nameDay
minTemp   avgHum    stdWs Hour derHum  atemp Day 3131      61
43.907692 2011       1      3       0       42 11.0014  Tuesday   31.16 54.77778 5.544601   16 -3.500 42.425  19 8581       5  1.369231 2012       2      3       0       70  6.0032 Thursday   29.52 65.55556
3.282332    5  1.000 34.090  19 4452      40 34.153846 2011       1      4       0       77  7.0015   Monday   21.32 57.77778 5.598605   20 
4.625 25.000  17 9610       1  2.828125 2012       1      4       0       73  7.0015   Friday   22.14 62.77778 3.206137    2  2.000 25.760   5
10235      1  1.421875 2012       1      4       1       76 11.0014  
Monday   16.40 71.77778 2.962030    4  1.750 20.455  12 496        0 
2.828125 2011       2      1       0       63  6.0032   Friday    5.74 49.55556 3.951886    2  2.875  8.335   4
      maxAtemp maxTemp   stdTemp  stdAtemp  derAtemp derTemp 3131    42.425   36.90 1.7608268 1.7536814  0.757500  0.7175 8581    35.605   31.16 0.7609278 0.7030059 -0.189375 -0.2050 4452    27.275   23.78 0.7609278 0.7033802 -0.189375 -0.2050 9610    31.060   27.06 2.0085816 2.4278610 -0.662500 -0.6150 10235   21.970   18.04 0.6833333 0.6310012 -0.189375 -0.2050 496     12.880    8.20 0.8961833 1.3659498 -0.283750 -0.3075

Функция cv.glmnet (из библиотеки glmnet) требует, чтобы я передавал свои данные в виде матрицы, а не фрейма данных. Поэтому я конвертирую свой фрейм данных в матрицу:

Xcas <- as.matrix(Casual.data[,-1])

Я беру первый столбец, потому что это моя переменная ответа. Я создаю числовой вектор для своего вектора ответа:

Ycas <- as.numeric(Casual.data$casual)

Наконец, я пытаюсь подогнать под модель регрессии лассо:

lasso.casual   <- cv.glmnet(x=Xcas, y=Ycas, alpha=1)

Я получаю это сообщение об ошибке:

Ошибка в elnet (x, is.sparse, ix, jx, y, weights, offset,
type.gaussian,: NA / NaN / Inf в вызове внешней функции (arg 5) В
дополнение: Предупреждение: В elnet (x, is.sparse, ix, jx, y, weights,
смещение, type.gaussian,: NA вводится путем принуждения

Я думаю, это из-за переменной nameDay в моем исходном фрейме данных, но я не уверен. Любые идеи о том, как это исправить?

Спасибо


person JonGor    schedule 08.05.2015    source источник
comment


Ответы (2)


Это старый вопрос, но я все равно наберу быстрый ответ для тех, кто может наткнуться на него.

Как отмечалось в sqluser, кодирование дней недели в виде числовых значений фактически присвоит седьмому дню недели (воскресенье в Европе) в семь раз больше значения, чем первому - нежелательно, поскольку день недели является порядковой переменной. Вместо этого вы должны представить уровни факторов в виде семи отдельных столбцов, содержащих фиктивные переменные (фактически единицы) для каждого дня недели. Чтобы легко это сделать, взгляните на функцию stats::model.matrix.

person Extrapolator    schedule 09.07.2015

У вас есть факторы в исходном data.frame ("nameDay").

Я предполагаю, что когда вы конвертируете это в матрицу, они преобразуются в символы, а поскольку матрицы могут иметь только один тип переменных, остальные числовые столбцы также преобразуются в символы.

Вы действительно проверяли свою матрицу после преобразования? Бьюсь об заклад, именно поэтому вы получаете НП.

Что касается необходимости преобразовывать df в матрицу из-за природы glmnet, я бы предложил сначала преобразовать их в числовые (1,2,3 ... 7), прежде чем преобразовывать df в матрицу.

Я не знаю ваших данных, но в зависимости от того, существует ли логическая взаимосвязь между компонентами переменной nameDay (дней, так должно быть), преобразование их в числовые 1-7 может иметь или не иметь нежелательных последствий в вашей модели.

person Jose Zamalloa    schedule 01.06.2015