[英]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.