![](/img/trans.png)
[英]error when fitting random effects model using bam() rather than gam() function in mgcv package, 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_ordinal
和Speaker
之間的交互。 查看session_ordinal
表明這可能不是一個因素,但您可能已經通過整數1
、 2
、...、 n
對其進行了編碼? 如果你解釋你想要什么 model (你想要什么效果)我可以建議解決方案......
...但一般來說,如果您告訴mgcv對因子邊際項使用隨機效應基礎,您可以在張量積中包含一個因子:
te(x, f, bs = c('cr', 're'))
其中cr
表示三次回歸樣條曲線,是張量積的默認基礎。 你也可以用t2()
和ti()
來做到這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.