簡體   English   中英

mutate 和 predict.gam 結果 Na/NaN/inf 問題

[英]mutate and predict.gam results Na/NaN/inf problem

我對一些數據有疑問,我根本不明白為什么。

我正在嘗試使用 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:我為相當大的文件道歉,但鑒於我不明白這個問題,我認為提供所有這些文件可能更有意義...... :)

當你使用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_))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM