我在R中使用glmnet运行以下(截断)代码
# do a lot of things to create the design matrix called x.design
> glmnet(x.design, y, thresh=1e-11)
其中 x.design 是 n x p 设计矩阵,其中 n > p,y 是使用核密度估计获得的响应的 n x 1 向量。x.design 和 y 都包含真实的项。当我运行我的代码时,我得到以下错误消息:
Error in if (nulldev == 0) stop("y is constant; gaussian glmnet fails at
standardization step") : missing value where TRUE/FALSE needed
我参观过,读过
Running glmnet package in R, getting error "missing value where TRUE/FALSE needed", maybe due to missing values?
然而,我想不出一个方法来解决我的问题。
有人能提出解决方案吗?
3条答案
按热度按时间vof42yt11#
看起来你的响应向量
y
是恒定的。GLMNET尝试将其标准化(可能减去平均值,然后除以当前stddev),但由于stddev为0,因此无法进行标准化。打印y及其方差以确保。您还应该检查您的内核估计过程。
vngu2lb82#
尝试通过-->
na.omit(data)
从数据中删除空值gab6jxml3#
对这个问题的一个更一般的回答是,
glmnet
不像here所描述的那样处理任何类型的缺失值,比如R中的其他“回归”函数(无论是NAs,NaNs还是其他)。它只适用于这种意义上的完整案例。因此,我对上面的错误消息提出的解决方案是从输入矩阵
x.design
中删除与响应向量y
中的非数值对应的所有行。例如,类似这样的东西可以做到:这段代码简单地使用正则表达式来选择响应向量中包含数字(字面数字)的行,并根据这些行(
glmnet
函数实际可以使用的行)对输入矩阵进行子集化。然后,你也可以用同样的方式子集化你的响应向量,你就可以开始了(自然地,在输入矩阵之后子集化响应向量是很重要的):