用R中的DRC包拟合曲线吗?

时间:2018-12-03 21:07:42

标签: r

我正在尝试使用R中的DRC包拟合曲线。

示例:

 x_yrs<-c(2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 
     2015, 2016, 2017)
 y<-c(1.89, 0.34, 0.47, 2.46, 2.13, 7.49, 47.24, 117.84, 202.8, 322.7, 
 540.72, 744.22, 1148.7)

 MaxPop<-110000
 Y_Adj<-y/MaxPop

 EV<-drm(y~ x_yrs,fct = LL.3(fixed = c(NA, NA, NA)))
 plot(EV, broken = TRUE, type = "all")

 EV<-drm(y~ x_yrs,fct = LL.5(fixed = c(NA, NA, NA, NA, NA)))
 plot(EV, broken = TRUE, type = "all")

 x_yrs_Adj<- x_yrs-2004
 EV<-drm(Y_Adj~ x_yrs_Adj,fct = LL.5(fixed = c(NA, NA, NA, NA, NA)))
 plot(EV, broken = TRUE, type = "all",xlim = c(0, 40), ylim = c(0, 1))

我想将曲线的最大值设为“ 1”或“ MaxPop”,即上渐近线。

我将如何更改drm模型来实现这一目标?

1 个答案:

答案 0 :(得分:1)

我想将未来的人口规模设置为110,000。”我认为不可能根据您提供的数据来对具有该约束的模型进行拟合。您对功能的支持所得到的响应甚至没有接近那个(可能是?)渐近区域。所以我认为您需要重新考虑您的方法。

此外,在drc中,您可以 通过通过fixed函数参数为特定参数指定值来实现约束。

EV <- drm(Y_Adj ~ x_yrs_Adj, fct = LL.5(fixed = c(NA, 0, 1, NA, NA)))

例如,您可以查找有关各个参数的信息。 ?LL.5

  LL.5(fixed = c(NA, NA, NA, NA, NA), names = c("b", "c", "d", "e", "f"), ...)
     

[...]

     

五参数逻辑函数由表达式给出

      f(x) = c + \frac{d-c}{(1+\exp(b(\log(x)-\log(e))))^f}

因此,在这种情况下,我们将c设置为零,然后修复d = 1

让我们来展示情节

plot(EV, broken = TRUE, type = "all", xlim = c(0, 40000), ylim = c(0, 1))

您可以在此处看到问题。由于您没有对值x_yrs_Adj的任何支持,而这些值更接近函数的渐近行为,因此拟合度(以及由此产生的估计参数)将很差。

enter image description here