如何解决如何计算R中逻辑模型中渐近线出现的时间?
我使用nls函数在R中拟合了逻辑增长模型。
pop.ss <- nls(MRDRSLT ~ SSlogis(TIME,phi1,phi2,phi3),data = testing,na.action = na.omit)
Formula: MRDRSLT ~ SSlogis(TIME,phi3)
Parameters:
Estimate Std. Error t value Pr(>|t|)
phi1 0.23179 0.03317 6.988 0.00602 **
phi2 431.16641 36.68846 11.752 0.00132 **
phi3 79.58386 29.09809 2.735 0.07164 .
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.01824 on 3 degrees of freedom
Number of iterations to convergence: 3
Achieved convergence tolerance: 7.55e-06
PH1是模型开始达到平稳状态的增长率。有没有找到容易发生这种情况的时间?
还是我需要存储系数并重新排列以使其成为主题?
解决方法
让我们尝试通过使用我们自己的参数创建自己的逻辑曲线来阐明我们的想法。
我们将以1:100的时间间隔进行观察,并将时间= 50设为曲线的中点。在y轴上,曲线将从左侧的0开始,在右侧的20处达到平稳。请注意,由于逻辑曲线的形状,仅在时间=无限时才“达到”高原。
我们还将添加一些随机噪声,以便在nls fit中不会出现奇点。
phi1 <- 20
phi2 <- 50
phi3 <- 0.1
TIME <- 1:100
testing <- data.frame(
TIME,MRDRSLT = phi1/(1 + exp(phi3 * (phi2 - TIME))) + rnorm(length(TIME))
)
plot(testing$TIME,testing$MRDRSLT)
这显然具有逻辑形状。现在让我们看看是否可以对这些参数进行反向工程:
pop.ss <- nls(MRDRSLT ~ SSlogis(TIME,phi1,phi2,phi3),data = testing,na.action = na.omit)
summary(pop.ss)
#>
#> Formula: MRDRSLT ~ SSlogis(TIME,phi3)
#>
#> Parameters:
#> Estimate Std. Error t value Pr(>|t|)
#> phi1 20.3840 0.2751 74.09 <2e-16 ***
#> phi2 50.0940 0.5863 85.45 <2e-16 ***
#> phi3 10.4841 0.4722 22.20 <2e-16 ***
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 1.057 on 97 degrees of freedom
#>
#> Number of iterations to convergence: 0
#> Achieved convergence tolerance: 4.528e-06
现在让我们来绘制这些参数在数据上实际代表的内容:
plot(testing$TIME,testing$MRDRSLT)
abline(h = summary(pop.ss)$coef["phi1",1],col = "red")
abline(v = summary(pop.ss)$coef["phi2",col = "red")
我们可以看到phi1
是上高原的y值,phi2
是拐点出现的中点。
现在,您正在寻找曲线“开始稳定”的时间点。这是一个光滑的概念,但从技术上讲,曲线开始到平稳点的点是曲线的二阶导数变为负的点。这发生在拐点处,该拐点等于phi2
。曲线可能不会“看起来像”在那个点处于平稳状态,但是您在曲线上选择的任何其他点来称为平稳的“开始”。
由reprex package(v0.3.0)于2020-09-21创建
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。