簡體   English   中英

gam / bam / bam(discrete = TRUE)不包含/不包含/不包含交互(predict(type =“ terms”))

[英]gam/bam/bam(discrete=TRUE) does/does/does not include interactions in predict(type=“terms”)

使用bam(discrete = TRUE)選項時,predict(type =“ terms”)函數不再報告交互項。 可以通過將交互項放在單獨的交互列中來避免這種情況,以防止函數看到交互源,但這很麻煩。 盡管我們可以通過顯式創建交互來完成相同的事情,但是有一些理論上的原因使我們不希望看到bam(discrete = TRUE)的交互嗎?

每當我們用一堆顯式編碼交互的列替換交互項x:y時,該問題就可以解決。 我嘗試了其他各種修復方法,以試圖使交互通過。 例如(0 + x):y,我不確定這是否有意義,因為懷疑該列已以與Forecast.bam(type =“ terms”)中的截距相同的方式被刪除。

library(mgcv)

mydf <- data.frame(class = factor(round(runif(500), digits=1)),
               x     = runif(500),
               y     = runif(500))

mydf$z <- 1 + as.numeric(mydf$class) * mydf$x + 6*(mydf$y - 0.5)^2 + 
rnorm(n=500, mean=0, sd=0.1)

mygam <- gam(z ~ 0 + class + class:x + s(y), data=mydf)

head(predict(mygam, type="terms"))

mybam <- bam(z ~ 0 + class + class:x + s(y), data=mydf)

head(predict(mybam, type="terms"))

mydiscretebam <- bam(z ~ 0 + class + class:x + s(y), discrete=TRUE, data=mydf)

head(predict(mydiscretebam, type="terms"))

我期望結果會有所不同,因為使用了兩種不同的優化算法,但是令我驚訝的是,在第三個預測調用中甚至沒有報告交互作用。 在這種情況下,模型估計值不是項的總和。 為什么要刪除攔截器? 這還負責刪除交互嗎? 匯總中可以使用這些系數,與其他任何參數系數一樣,因此將其排除是偶然的嗎?

據我所知,我實際上只是在更改優化算法。 某些列來自交互的事實似乎無關緊要。

這是predict.gam中的一個錯誤(由predict.bam的離散版本調用以執行參數項)。 已為下一個版本修復。 謝謝。 同時您可以使用

predict(mydiscretebam, type="terms",discrete=FALSE)

西蒙(mgcv維護者)

暫無
暫無

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

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