【问题标题】:mutate and predict.gam results Na/NaN/inf problemmutate 和 predict.gam 结果 Na/NaN/inf 问题
【发布时间】:2021-12-14 12:44:14
【问题描述】:

我对一些数据有疑问,我根本不明白为什么。

我正在尝试使用 GAM 从 var3 估计 var4

这是我用来获取模型的数据集:

for_model <- read.csv("https://raw.githubusercontent.com/fredlm/mockup/master/for_model.csv")

还有我要估计的数据集var4

for_est <- read.csv("https://raw.githubusercontent.com/fredlm/mockup/master/for_est.csv")

我做了什么,简单地说:

for_est <- for_est %>%
mutate(var4 = ifelse(!var3 == 0, predict.gam(gam(var4 ~ s(log(var3)), data = for_model), newdata = .), NA))

它返回以下错误:

错误:mutate()var4 有问题。 var4 = predict.gam(gam(var4 ~ s(log(var3)), data = for_model), newdata = .)。 x 外部函数调用中的 NA/NaN/Inf (arg 1)

尽管对网络进行了彻底的研究,并且在我的数据上花费了几个小时,但我找不到解决此问题的方法...

但是,当我绘制 GAM 时,一切正常:

ggplot(data = for_model,
       aes(x = var3,
           y = var4)) +
  geom_point() +
  geom_smooth(method = "gam",
              formula = y~s(log(x)))

知道如何解决这个问题吗?我已经查找了 NaN 或 Inf 值,但没有。另外,当我试图从 var2 估计 var4 时 - 非常 类似于 var3 - 一切都很好......

for_est <- for_est %>%
  mutate(var4 = ifelse(!var2 == 0, predict.gam(gam(var4 ~ s(log(var2)), data = for_model), newdata = .), NA))

非常感谢!

ps:对于相当大的文件,我深表歉意,但鉴于我不明白这个问题,我认为提供所有这些文件可能更有意义...... :)

【问题讨论】:

    标签: r dplyr gam


    【解决方案1】:

    当你使用 ifelse 远离 var3 == 0 时,你需要以同样的方式限制 for_est 输入数据。 (我把模型求解和预测分开,只是为了让测试更快,没关系)

    gamfit <- gam(var4 ~ s(log(var3)), data = for_model)
    for_est <- for_est %>%
      mutate(var4 = ifelse(var3 != 0, predict(gamfit, newdata = .[var3 != 0, ]), NA_real_))
    

    【讨论】:

    • 还有……就是这样,你是布莱恩! :)
    猜你喜欢
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 2017-10-07
    • 2013-03-24
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    相关资源
    最近更新 更多