【问题标题】:R cv.glmnet error: "need at least two non-NA values to interpolate"R cv.glmnet 错误:“需要至少两个非 NA 值进行插值”
【发布时间】:2021-07-20 05:14:50
【问题描述】:

运行cv.glmnet 函数时,我遇到了一个无法跟踪的错误。 研究只提示我 approx() 函数在搜索 lambda 时会引发错误,但我对 glmnet 不够熟悉,无法弄清楚它是如何连接的。

错误是:“需要至少两个非 NA 值进行插值”

虽然解决方案看起来很明显,但我正在处理模拟数据,所以绝对没有 NA。我反复检查了很多次。我还一次尝试删除了包含常量变量的列,但也没有帮助。

由于数据的复杂性,可重现的示例有点混乱(而且也不是最小的,因为错误不会发生在小示例数据中),但请参见下文:

pacman::p_load(glmnet,RCurl)

url <- getURL('https://raw.githubusercontent.com/oliverkostorz/MC-Simulation-Ensemble-Methods-Heterogeneous-Treatment-Effects/master/example.csv')
data <- read.csv(text = url)

x <- data[,3:ncol(data)]
y <- data[,2]

EN_fit <- cv.glmnet(x, y, type.measure = 'mse', alpha = .5)

希望有人能帮忙!

最好, 奥利弗

【问题讨论】:

    标签: r glmnet


    【解决方案1】:

    9.352584e+229 导致问题。这是一个相当大的数字。

    big_index <- y > 1e120
    EN_fit <- cv.glmnet(as.matrix(x[!big_index, ]), y[!big_index], 
        type.measure = 'mse', alpha = .5)
    EN_fit
    # 
    # Call:  cv.glmnet(x = as.matrix(x[!big_index, ]), y = y[!big_index],
    #     type.measure = "mse", alpha = 0.5) 
    # 
    # Measure: Mean-Squared Error 
    # 
    #         Lambda Index    Measure  SE Nonzero
    # min 3.864e+113    84 8.533e+229 Inf      10
    # 1se 1.836e+115     1 8.644e+229 Inf       0
    

    【讨论】:

    • 谢谢,我只是在寻找原因时查看 x。这已经有点帮助了。但是,这是 glmnet 的预期行为吗?
    • @okost 您正在测试该函数以达到双精度算术的极限。这严格来说是一个错误,但我认为它是正常使用范围之外的边缘情况。考虑查看log(y) 可能更合适,但数百个数量级的分布并不常见,并且难以使用普通工具处理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    • 2016-02-15
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多