使用mod2从剂量反应模型(drm)进行预测

问题描述 投票:1回答:1

我有一个看起来像这样的缩写形式的数据集:

library(tidyverse)    
dat_s<-tibble(
      type=c(rep("A", 9), rep("B", 8), rep("C", 10)),
      ref=c("ref3", "ref3", "ref1",  "ref2", "ref2", "ref1", "ref2", "ref2", "ref2", "ref2", 
            "ref1", "ref2", "ref2", "ref3", "ref2", "ref3", "ref1", "ref3", 
            "ref2", "ref3", "ref1", "ref1", "ref3", "ref1", "ref1", "ref2", "ref2"),
      info=sample(100, 27),
      liv=c(3.0e-05, 2.9e-07, 2.2e-07, 2.7e-07, 2.6e-06, 4.8e-07, 1.4e-05, 2.6e-06, 7.7e-06, 2.2e-06, 
            1.5e-07, 1.6e-07, 1.8e-06, 6.1e-08, 4.9e-06, 4.9e-06, 1.8e-06, 1.5e-07,
            4.3e-08, 1.8e-06, 1.0e-07, 1.6e-07, 9.7e-07, 1.0e-06, 6.4e-07, 1.2e-07, 5.7e-06),
      prod=c(0.00, 2, 3, 4.80, 2.10, 5.10, 0.00, 0.13, 2.00, 0.13, 0.00, 4.10, 4.60, 2.10, 0.26, 0.00, 
             4.60, 0.00, 4.60, 2.10, 4.80, 0.00, 0.00, 1.80, 3.60, 4.10, 0.00)
    )%>%
  mutate(livp1=liv+1)

我想为typeref的每种组合计算剂量反应关系,进行预测以绘制曲线并计算残差。 info列反映出我需要保留此数据框中的其他列,但在剂量反应分析中并不重要。

我首先使用函数和嵌套数据框创建模型:

dr_s<-function(df){drc::drm(data=df, prod~log(livp1), fct=drc::LL.3())}

dat_mods<-
  dat_s%>%
  group_by(type, ref)%>%
  nest() %>%
  mutate(dr_mod=map(data, dr_s))

这将创建模型并将其放入数据框中。但是,当我尝试为每个liv变量添加预测时:

dat_mods%>%
  mutate(mod_preds=map2(data, dr_mod, modelr::add_predictions))

我收到错误消息。任何指导表示赞赏!

r dplyr purrr drc modelr
1个回答
1
投票

[这很愚蠢,predict类模型的drm方法不适用于tibble类的对象。因此,您必须对type = "data.frame"使用modelr::add_predictions参数:

dat_s%>%
  group_by(type, ref)%>%
  nest() %>%
  mutate(dr_mod=map(data, dr_s),
         mod_preds=map2(data, dr_mod, 
                        ~modelr::add_predictions(data = as.data.frame(.x),
                                                 model = .y))) 
# A tibble: 9 x 5
# Groups:   type, ref [9]
  type  ref   data             dr_mod mod_preds       
  <chr> <chr> <list>           <list> <list>          
1 A     ref3  <tibble [2 × 4]> <drc>  <df[,5] [2 × 5]>
2 A     ref1  <tibble [2 × 4]> <drc>  <df[,5] [2 × 5]>
3 A     ref2  <tibble [5 × 4]> <drc>  <df[,5] [5 × 5]>
4 B     ref2  <tibble [4 × 4]> <drc>  <df[,5] [4 × 5]>
5 B     ref1  <tibble [2 × 4]> <drc>  <df[,5] [2 × 5]>
6 B     ref3  <tibble [2 × 4]> <drc>  <df[,5] [2 × 5]>
7 C     ref3  <tibble [3 × 4]> <drc>  <df[,5] [3 × 5]>
8 C     ref2  <tibble [3 × 4]> <drc>  <df[,5] [3 × 5]>
9 C     ref1  <tibble [4 × 4]> <drc>  <df[,5] [4 × 5]>
© www.soinside.com 2019 - 2024. All rights reserved.