这对谷歌来说并不像其他一些事情那么容易,需要明确的是,我不是在使用回归来预测分类变量的意义上谈论逻辑回归。
我说的是将逻辑增长曲线拟合到给定的数据点。再具体一点,是从 1958 年到 2012 年的给定年份,并且是每年 11 月估计的全球 CO2 ppm(二氧化碳的百万分之一).
现在它正在加速,但它必须在某个时候趋于平稳。所以我想要一个逻辑曲线。
我还没有找到一种相对简单的方法来做到这一点。
这对谷歌来说并不像其他一些事情那么容易,需要明确的是,我不是在使用回归来预测分类变量的意义上谈论逻辑回归。
我说的是将逻辑增长曲线拟合到给定的数据点。再具体一点,是从 1958 年到 2012 年的给定年份,并且是每年 11 月估计的全球 CO2 ppm(二氧化碳的百万分之一).
现在它正在加速,但它必须在某个时候趋于平稳。所以我想要一个逻辑曲线。
我还没有找到一种相对简单的方法来做到这一点。
见nls()
功能。它具有自启动逻辑曲线模型功能,通过SSlogis()
. 例如从?nls
帮助页面
> library("nls")
> DNase1 <- subset(DNase, Run == 1)
>
> ## using a selfStart model
> fm1DNase1 <- nls(density ~ SSlogis(log(conc), Asym, xmid, scal),
+ DNase1)
我建议您阅读这些功能的帮助页面,如果可能的话,可能还阅读链接的参考资料以了解更多信息。
不久前我也有同样的问题。这是我发现的:
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)
}