【发布时间】:2021-03-26 15:19:13
【问题描述】:
我试图在testData 中拟合许多指数模型,但是,对于testData$ID 中质量增益模式的变化,这个模型对于许多人来说不会成功。目标是生成一个broom::tidy 数据框,其中报告了具有成功模型的testData$ID 的所有统计信息,并且任何没有模型的个人都出现在模型统计数据中带有NA 的数据框中。以下是无法为任何 ID 建模的数据示例。我看过this post,它告诉我我必须将 purrr::possibly() 包裹在抛出错误的函数周围,而不是 broom::tidy(),所以我废弃了 ExpMod_1。错误是:
Error: The result of .f should be a data frame.
我还查看了this post,它告诉我可能确实返回了一个“接受与其输入相同的参数”的函数(- user3603486),而不仅仅是otherwise 参数指定的值......这让我感到困惑,因为在那个答案中,NA_character_ 无论如何都只是一个静态值。这次运行抛出的错误是:
Error: No tidy method for objects of class function
我附上了一些示例数据和代码来演示我的问题。
require(tidyverse)
require(broom)
testDat<- tibble(Mass = rnorm(n = 100, mean = 3.5, sd = 0.5),
Days_to_Departure = sample(x = (c(1:14)),size = 100, replace = T),
ID = sample(x = c(1:4), size = 100, replace = T))
ExpMod_1<-testDat %>%
group_by(ID) %>%
group_modify(.f = ~possibly(~tidy(nls(Mass_Visit ~ a*exp(-b*Days_to_Departure) + c, data = .x,
start = list(a=1.2, b=0.5, c = 3.5),
control = list(maxiter = 500),
trace = T)),otherwise = ~tibble(estimate = c(NA_real_),
p.value = c(NA_real_),
statistic = c(NA_real_),
std.error = c(NA_real_),
term = c(NA_character_))))
ExpMod_2<-testDat %>%
group_by(ID) %>%
group_modify(.f = ~tidy(possibly(~nls(Mass_Visit ~ a*exp(-b*Days_to_Departure) + c, data = .x,
start = list(a=1.2, b=0.5, c = 3.5),
control = list(maxiter = 500),
trace = T),otherwise = ~list(m = NA_character_))))
这两个错误对我来说都是有意义的。我想知道是否可以在打包这些函数时嵌套它们,或者我想要做的事情是否需要编写不同的函数。问题是我试图拟合许多模型并且我预计会有很多失败,我将使用不同的模型来解决这些问题......nls、lm、nlme、lmer 等。但我想拟合和比较所有这些,所以我需要知道成功的方法、地点和时间。
在此先感谢,任何建议或反馈将不胜感激。
【问题讨论】: