簡體   English   中英

在 mgcv() 中運行 bam() 時出現“不允許因素”錯誤 - R

[英]'Factors are not allowed' error when running bam() in mgcv() - R

我有一個數據集如下:

 str(templates)

 tibble [2,179 x 8] (S3: grouped_df/tbl_df/tbl/data.frame)
  $ Speaker        : Factor w/ 5 levels "Alex","Lily",..: 1 1 1 1 1 1 1 1 1 1 ...
  $ session_ordinal: num [1:2179] 1 1 1 2 2 2 3 3 3 4 ...
  $ structure      : Factor w/ 32 levels "C","CCV","CCVC",..: 5 20 26 5 6 5 5 6 20 4 ...
  $ structurePC    : num [1:2179] 0.55 0.15 0.1 0.3636 0.0303 ...
  $ structure.ord  : Ord.factor w/ 32 levels "C"<"CCV"<"CCVC"<..: 5 20 26 5 6 5 5 6 20 4 ...
  - attr(*, "groups")= tibble [220 x 4] (S3: tbl_df/tbl/data.frame)
   ..$ Speaker        : chr [1:220] "Alex" "Alex" "Alex" "Alex" ...
   ..$ session_ordinal: num [1:220] 1 2 2 3 4 4 5 5 6 6 ...
   ..$ .rows          :List of 220

我正在嘗試使用 mgcv package 中的bam()對數據運行mgcv model。 我可以成功運行一個簡單的 model:

 templates.gam.simple <- bam(structurePC ~ 
                       s(session_ordinal, k = 18) +
                       s(session_ordinal, Speaker, bs = "fs", m = 1, k = 5),
                    data=subset(templates, structurePC >= .1 & session_ordinal < 19), method="ML")

但是,一旦我添加了其他因素(我需要這樣做才能運行我的分析),我就會開始收到錯誤消息。 如果我向 model 添加另一個平滑( s(Speaker, k = 5) ),如下所示:

 templates.gam.1 <- bam(structurePC ~ 
                            s(session_ordinal, k = 18) +
                            s(Speaker, k = 5) +
                            s(session_ordinal, Speaker, bs = "fs", m = 1, k = 5),
                       data=subset(templates, structurePC >= .1 & session_ordinal < 19), method="ML")

我收到錯誤消息:

 Error in smooth.construct.tp.smooth.spec(object, dk$data, dk$knots) : 
   NA/NaN/Inf in foreign function call (arg 1)
 In addition: Warning messages:
 1: In mean.default(xx) : argument is not numeric or logical: returning NA
 2: In Ops.factor(xx, shift[i]) : ‘-’ not meaningful for factors

如果我嘗試向初始 model ( ti(session_ordinal, Speaker, k = c(18, 5)) + )添加交互:

 templates.gam.2 <- bam(structurePC ~ 
                       s(session_ordinal, k = 18) +
                       ti(session_ordinal, Speaker, k = c(18, 5)) +
                       s(session_ordinal, Speaker, bs = "fs", m = 1, k = 5),
                    data=subset(templates, structurePC >= .1 & session_ordinal < 19), method="ML")

我得到:

 Error in quantile.default(xu, seq(0, 1, length = nk)) : 
   factors are not allowed

您不能從因子變量制作標准樣條曲線。 當您使用"fs"基礎時,您傳遞一個連續變量( x說)一個因子變量( f說):

s(x, f, bs = 'fs')

這樣做是在x中為每個f水平設置樣條線,其中樣條線共享相同的平滑度損失。 這些項還包括f的組均值的隨機截距。

這是一個特殊的基礎結構。

如果要包括其他因子變量的隨機截距,則需要使用另一種特殊的基類型,即隨機效應或"re"基:

s(Speaker, bs = 're')

我不確定包含ti()術語是什么意思; "fs"平滑已經是session_ordinalSpeaker之間的交互。 查看session_ordinal表明這可能不是一個因素,但您可能已經通過整數12 、...、 n對其進行了編碼? 如果你解釋你想要什么 model (你想要什么效果)我可以建議解決方案......

...但一般來說,如果您告訴mgcv對因子邊際項使用隨機效應基礎,您可以在張量積中包含一個因子:

te(x, f, bs = c('cr', 're'))

其中cr表示三次回歸樣條曲線,是張量積的默認基礎。 你也可以用t2()ti()來做到這一點。

暫無
暫無

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

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