我正在尝试使用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模型来实现这一目标?
答案 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
的任何支持,而这些值更接近函数的渐近行为,因此拟合度(以及由此产生的估计参数)将很差。