gpt4 book ai didi

r - 在带有 NLME 对象和公式的函数调用中使用 predict

转载 作者:行者123 更新时间:2023-12-04 08:27:47 24 4
gpt4 key购买 nike

我有使用以下代码的包 NLME 的问题:

library(nlme)
x <- rnorm(100)
z <- rep(c("a","b"),each=50)
y <- rnorm(100)
test.data <- data.frame(x,y,z)
test.fun <- function(test.dat)
{
form <- as.formula("y~x")
ran.form <- as.formula("~1|z")
modell <- lme(fixed = form, random=ran.form, data=test.dat)
pseudo.newdata <- test.dat[1,]
predict(modell, newdata= pseudo.newdata) ###THIS CAUSES THE ERROR!
}

test.fun(test.data)

预测会导致错误,我已经找到了导致错误的根本原因。

modell 对象保存了它的调用方式,并且 predict 似乎使用它来进行预测,但无法找到公式对象 form 和 ran.form 因为它没有在正确的命名空间中查找它们。事实上,我可以通过这样做来避免这个问题:
 attach(environment(form), warn.conflicts = FALSE)
predict(modell, newdata= pseudo.newdata)
detach()

然而,我的长期目标是将模型保存到磁盘并在以后使用它们。我想我也可以尝试保存公式对象,但这让我觉得这是一种非常烦人且麻烦的处理问题的方法。

我使用自动生成的公式对象而不是明确地写下它们,因为我在批处理过程中创建了许多具有不同定义的模型,因此我无法避免它们。所以我的理想解决方案是创建 lme 对象的一种方法,这样我就可以在之后忘记公式对象并预测“正常工作”。谢谢你的帮助。

最佳答案

尝试更换 lme(arg1, arg2, arg3)do.call(lme, list(arg1, arg2, arg3)) .

library(nlme)
x <- rnorm(100)
z <- rep(c("a","b"),each=50)
y <- rnorm(100)
test.data <- data.frame(x,y,z)
test.fun <- function(test.dat)
{
form <- as.formula("y~x")
ran.form <- as.formula("~1|z")
## JUST NEED TO CHANGE THE FOLLOWING LINE
## modell <- lme(fixed = form, random=ran.form, data=test.dat)
modell <- do.call(lme, list(fixed=form, random=ran.form, data=test.data))
pseudo.newdata <- test.dat[1,]
predict(modell, newdata= pseudo.newdata) ###THIS CAUSES THE ERROR!
}

test.fun(test.data)
# a
# 0.07547742
# attr(,"label")
# [1] "Predicted values"

这是有效的,因为 do.call()在调用帧中计算其参数列表, 之前 评估对 lme() 的调用它构造的。要了解为什么会有帮助,请输入 debug(predict) ,然后运行您的代码和我的代码,比较弹出浏览器时打印的调试消息。

关于r - 在带有 NLME 对象和公式的函数调用中使用 predict,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11778773/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com