在 glmnet() 中,我必须指定原始 X 矩阵和响应向量 Y(与可以指定模型公式的 lm 不同)。model.matrix() 将正确地从 X 矩阵中删除不完整的观察,但它不包括输出对象中的响应。所以我会有这样的事情:
mydf
glmnet(y = mydf$response, x = model.matrix(myformula, mydf)[,-1], ...)
当 model.matrix 删除观察值时,y 和 x 维度将不匹配。是否有将 y 数据与 x 对齐的功能?
在 glmnet() 中,我必须指定原始 X 矩阵和响应向量 Y(与可以指定模型公式的 lm 不同)。model.matrix() 将正确地从 X 矩阵中删除不完整的观察,但它不包括输出对象中的响应。所以我会有这样的事情:
mydf
glmnet(y = mydf$response, x = model.matrix(myformula, mydf)[,-1], ...)
当 model.matrix 删除观察值时,y 和 x 维度将不匹配。是否有将 y 数据与 x 对齐的功能?
尝试使用model.frame
和model.response
。
> d <- data.frame(y=rnorm(3), x=c(1,NA,2), z=c(NA, NA, 1))
> d
y x z
1 -0.6257260 1 NA
2 -0.4979723 NA NA
3 -1.2233772 2 1
> form <- y~x
> mf <- model.frame(form, data=d)
> model.response(mf)
1 3
-0.625726 -1.223377
> model.matrix(form, mf)
(Intercept) x
1 1 1
3 1 2
attr(,"assign")
[1] 0 1
我不熟悉glmnet
,这可能mf
就足够了,只是通过y=mf[1,]
and x=mf[-1,]
。