首先-有什么好的参考资料可以帮助我更好地解释错误消息?我当前的策略是先检查脚本,然后检查数据,然后在Google网上冲浪几个小时/在此处发布问题。
我有一个模型(如下),我试图使用ggpredict
来拟合一条曲线,该曲线显示了冬季火灾与时间之间的关系。
data <- read.csv('StacksOverflow.csv')
dput(head(data))
数据:
structure(list(X = 1:6, yrblock15 = c(2004L, 2004L, 2004L, 2004L,
2004L, 2004L), circleID = 1:6, time = c(5.270172597, 4.270172617,
3.348596103, 3.019112219, 2.905252281, 2.773856447), ThreeYearRain = c(748.9863518,
744.4805429, 748.6081666, 747.5941999, 746.3382951, 740.9514718
), summer = c(2L, 2L, 2L, 3L, 2L, 3L), winter = c(1L, 1L, 1L,
5L, 4L, 4L), total = c(3L, 3L, 3L, 8L, 6L, 7L), claylake = c(0,
0, 0, 0, 0.01, 0), spinsandplain = c(99.53, 90.39, 50.7, 63.8,
73.65, 82.73), rain15 = c(412.5357625, 412.1096373, 414.7593319,
416.1126083, 416.1484008, 413.5668281), coefrain15 = c(48.03688416,
48.05843172, 47.98508211, 48.13217304, 48.39476675, 48.51635011
)), row.names = c(NA, 6L), class = "data.frame")
包装:
library(lme4)
library(ggeffects)
型号:
m3 <- lmer(winter~scale(log(time))+scale(spinsandplain)+scale(rain15)+
scale(claylake)+scale(rain15)*scale(log(time))+(1|circleID),
na.action=na.fail, data=data, REML=FALSE)
d <- ggeffect(m3, terms = "time[exp]")
哪个会产生此错误:
funtrans(sort(unique(model_frame [[y]])))中的错误: 数学函数的非数字参数
任何建议为什么会这样?
答案 0 :(得分:4)
除了您现有的error-message-fu(在论坛上进行谷歌搜索和张贴)外,我唯一的建议是有时 您可以尝试在源代码中找到相关代码,例如如果您在ggeffects
Github存储库中搜索错误消息,则可以获取here。但是,这可能有帮助,也可能没有帮助。 (我诊断问题的方式是更基本的;我从仅使用log(time)
(或等效项)的模型开始,看到它起作用,然后尝试使用scale(log(time))
的模型,发现它没有t ...)
如果我使用scale(log(x))
library(lme4)
library(ggeffects)
sleepstudy$Days1 <- 1 + sleepstudy$Days
这很好:
fm <- lmer(Reaction ~ log(Days1) + (1|Subject), sleepstudy)
ggeffect(fm, term = "Days1 [exp]")
但是
fm <- lmer(Reaction ~ scale(log(Days1)) + (1|Subject), sleepstudy)
ggeffect(fm, term = "Days1 [exp]")
funtrans(sort(unique(model_frame [[y]])))中的错误:数学函数的非数字参数
看来scale(log(.))
通常是有问题的。 ggeffect(fm)
也给出了一个错误(尽管略有不同)。如果我们使用scale(Days)
或log(Days1)
,可以,但是scale(log(Days))
不起作用。
解决方法是定义自己的变量,例如sleepstudy$sl_Days1 <- scale(log(sleepstudy$Days+1))
,然后从那里去(即lmer(...); ggeffect(fm, terms="sl_Days1 [exp]")
。
您可以尝试在issues list for ggeffects上发布问题/功能请求(首先是获得更有用的错误消息,其次是使事情更无缝地进行的工作)
答案 1 :(得分:2)
这只是作为评论,而不是作为答案(本已经回答了您的问题,这里只是一些其他信息,对于评论来说太长了……)。
ggeffects 使用insight-package访问模型信息,例如-在此特定示例中-模型框架。为了轻松地将模型框架中的列名与terms
或ggpredict()
的{{1}}参数中提供的变量名进行匹配,请使用ggeffect()
对列名进行“清理”。但是,像insight::clean_names()
这样的嵌套命令与scale()
结合使用时会出现边缘情况,从而导致报告错误。
在您的情况下,代码log()
查找model_frame[[y]]
(即,在您的情况下,Days1
的值为y
),但是列名已转换(“清除”)到"Days1"
而不是"log"
,因此"Days1"
尝试访问ggpredict()
,尽管该列名为model_frame[["Days1"]]
。
"log"
由reprex package(v0.3.0)于2020-01-03创建
我必须检查如何解决此问题。