具有自启动函数和purrr的非线性混合效应模型
过去,我使用nlme来拟合和比较非线性模型。现在,我想使用它使模型适合由多个标识符分组的数据。如果我能集成dplyr、purrr和nlme,那就太好了。其中一个好处是使用nlme包中的自启动函数。我还有很多模型要运行。我只是不确定这一切是否能融为一体 当前nlme情况。这是可行的,但仅限于一个分组变量:具有自启动函数和purrr的非线性混合效应模型,r,tidyverse,purrr,nlme,tidymodels,R,Tidyverse,Purrr,Nlme,Tidymodels,过去,我使用nlme来拟合和比较非线性模型。现在,我想使用它使模型适合由多个标识符分组的数据。如果我能集成dplyr、purrr和nlme,那就太好了。其中一个好处是使用nlme包中的自启动函数。我还有很多模型要运行。我只是不确定这一切是否能融为一体 当前nlme情况。这是可行的,但仅限于一个分组变量: library(tidyverse) library(nlme) diamonds_grouped <- groupedData(price ~ carat | cut, data = d
library(tidyverse)
library(nlme)
diamonds_grouped <- groupedData(price ~ carat | cut, data = diamonds)
nlsList(price ~ SSlogis(carat, Asym, xmid, scal), data = diamonds_grouped)
库(tidyverse)
图书馆(nlme)
钻石(按百分比分组)
嵌套()%>%
变异(
模型=地图(数据、拟合和模型),
整洁=地图(模型,整洁)
)
不是故意的,或者我只是不知道怎么做?您可以修改函数以包含每个子集的分组数据
library(tidyverse)
library(nlme)
fit_mod <- function(df) {
diamonds_grouped <- groupedData(price ~ carat | cut, data = df)
nlsList(price ~ SSlogis(carat, Asym, xmid, scal), data = diamonds_grouped)
}
diamonds %>% group_split(cut, color) %>% map(fit_mod)
#[[1]]
#Call:
# Model: price ~ SSlogis(carat, Asym, xmid, scal) | cut
# Data: diamonds_grouped
#Coefficients:
# Asym xmid scal
#Fair 16928.32 1.410986 0.4113035
#Degrees of freedom: 163 total; 160 residual
#Residual standard error: 1449.725
#[[2]]
#Call:
# Model: price ~ SSlogis(carat, Asym, xmid, scal) | cut
# Data: diamonds_grouped
#Coefficients:
# Asym xmid scal
#Fair 16565.84 1.409934 0.3833443
#Degrees of freedom: 224 total; 221 residual
#Residual standard error: 1175.058
#.....
#.....
另外,我认为您不能将
tidy
函数应用于类的模型nlsList
一个选项是引入一个新变量,该变量捕获跨多个变量的所有可能分组。以您的例子:
diamonds2 <- diamonds %>% mutate( grp = str_c(cut, "_", color) )
diamonds2_grp <- groupedData( price ~ carat | grp, data = diamonds2 )
nlsList(price ~ SSlogis(carat, Asym, xmid, scal), data = diamonds2_grp )
# Call:
# Model: price ~ SSlogis(carat, Asym, xmid, scal) | grp
# Data: diamonds2_grp
#
# Coefficients:
# Asym xmid scal
# Fair_E 16565.84 1.409934 0.3833443
# Fair_D 16928.32 1.410986 0.4113035
# Fair_F 13905.28 1.335952 0.3877184
# Good_E 15894.55 1.253196 0.3245564
# Fair_I 17427.69 1.783398 0.5071487
# Good_J 17233.34 1.676204 0.4604250
# ...
diamonds2%变异(grp=str_c(切割,”,颜色))
钻石2_grpnlsList
tidier在。做库(nlshelper);扫帚::整洁(myModel)
应该可以工作。
diamonds2 <- diamonds %>% mutate( grp = str_c(cut, "_", color) )
diamonds2_grp <- groupedData( price ~ carat | grp, data = diamonds2 )
nlsList(price ~ SSlogis(carat, Asym, xmid, scal), data = diamonds2_grp )
# Call:
# Model: price ~ SSlogis(carat, Asym, xmid, scal) | grp
# Data: diamonds2_grp
#
# Coefficients:
# Asym xmid scal
# Fair_E 16565.84 1.409934 0.3833443
# Fair_D 16928.32 1.410986 0.4113035
# Fair_F 13905.28 1.335952 0.3877184
# Good_E 15894.55 1.253196 0.3245564
# Fair_I 17427.69 1.783398 0.5071487
# Good_J 17233.34 1.676204 0.4604250
# ...