我有一个包含变量“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,权重,偏移,
type.gaussian,:外来函数调用中的NA / NaN / Inf(arg 5)在
另外:警告信息:在elnet(x,is.sparse,ix,jx,y,weight,
offset,type.gaussian,:由强制引入的NA
我认为这是因为我原始数据框中的“nameDay”变量,但我不确定。 关于如何解决这个问题的任何想法?
由于
答案 0 :(得分:2)
这是一个古老的问题,但无论如何,我会为其他可能偶然发现此问题的人做出快速反应。
正如sqluser所指出的那样,将工作日编码为数值将有效地分配一周中的第七天(欧洲的星期日)七倍于第一天的值 - 不可取的星期几是一个序数变量。相反,您应该将其因子级别表示为七个单独的列,其中包含每个工作日的虚拟变量(实际上为1&#39; s)。要轻松完成此操作,请查看stats::model.matrix
函数。
答案 1 :(得分:0)
原始data.frame中有因素(&#34; nameDay&#34;)。
我假设当你将它转换为矩阵时,它们会被转换为字符,并且由于矩阵只能有一种类型的变量,所以其余的数字列也会转换为字符。
转换后你真的检查了矩阵吗?我敢打赌,这就是你获得NAs的原因。
由于glmnet的性质,被迫将df转换为矩阵,我建议在将df转换为矩阵之前先将它们转换为数字(1,2,3 ... 7)。
我不知道你的数据,但是取决于nameDay变量的组件之间是否存在逻辑关系(所以应该有几天),将它们转换为数字1-7可能有也可能没有在你的模型中产生影响。