繁体   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