拟合R中逻辑增长曲线的最轻松方法是什么?


19

对于Google来说,这不像其他事情那么容易,因为要明确地说,我并不是在使用回归来预测分类变量的意义上谈论逻辑回归。

我说的是将逻辑增长曲线拟合到给定的数据点。具体来说,是1958年至2012年的给定年份,yx年11月的估计全球CO2 ppm(百万分之二氧化碳)。XÿX

目前,它正在加速发展,但必须稳定下来。所以我想要一条逻辑曲线。

我还没有找到一个相对简单的方法来做到这一点。


3
Logistic曲线并不是唯一“趋于平稳”的曲线。实际上,任何连续cdf的倍数都可以满足该要求。
Glen_b-恢复莫妮卡

2
使用包grofit使用样条曲线和生长曲线。

尼克,非常感谢您提交代码,我只是想知道如何将其编写为等式?在代码中,值C,a和K指代哪些参数?

1
我认为您以我为@ user2581681。我刚刚编辑了他们的答案。
Nick Cox 2013年

Answers:


19

参见nls()功能。它具有一个自启动逻辑曲线模型功能SSlogis()。例如从?nls帮助页面

> library("nls")
> DNase1 <- subset(DNase, Run == 1)
>      
> ## using a selfStart model
> fm1DNase1 <- nls(density ~ SSlogis(log(conc), Asym, xmid, scal), 
+                  DNase1)

我建议您阅读这些功能的帮助页面,如果可能的话,请阅读链接的参考资料以了解更多信息。


9

不久前我也有同样的问题。这是我发现的:

Fox和Weisberg使用nls函数(带有和不带有Gavin提到的自动启动选项)撰写了一篇很棒的补充文章。在这里能找到它:

http://socserv.mcmaster.ca/jfox/Books/Companion/appendix/Appendix-Nonlinear-Regression.pdf

从那篇文章中,我最终为类编写了一个函数,以在将逻辑曲线拟合到其数据时使用:

###Log fit - be sure to use quotes around the variable names in the call
log.fit <- function(dep, ind, yourdata){
#Self-starting...

y <- yourdata[, dep]
x <- yourdata[, ind]

log.ss <- nls(y ~ SSlogis(x, phi1, phi2, phi3))

#C
C <- summary(log.ss)$coef[1]
#a
A <- exp((summary(log.ss)$coef[2]) * (1/summary(log.ss)$coef[3]))
#k
K <- (1 / summary(log.ss)$coef[3])

plot(y ~ x, main = "Logistic Function", xlab=ind, ylab=dep)
lines(0:max(x), predict(log.ss, data.frame(x=0:max(x))), col="red")

r1 <- sum((x - mean(x))^2)
r2 <- sum(residuals(log.ss)^2)

r_sq <- (r1 - r2) / r1

out <- data.frame(cbind(c(C=C, a=A, k=K, R.value=sqrt(r_sq))))
names(out)[1] <- "Logistic Curve"

return(out)
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.