使用nls和ssLogis创建函数时出错

时间:2013-08-13 23:01:13

标签: functional-programming nls

我正在尝试编写一个函数来使用带有自启动选项ssLogis的nls来拟合逻辑曲线。我有一些数据 - 实际上它将作为一个数据框架,所以这第一步实际上只是为了获得与我将要使用的数据类似的设置...

int <- c(.1, .2, .5, .8, 1.5, 2.5, 4.1, 6.1, 8.8, 13.8, 25.5, 29.2, 35, 37.9, 41.4)
yr2 <- 1:15
newdata <- data.frame(int, yr2)

所以,在我写的函数上 - 借助Fox&amp;韦斯伯格...

log.fit <- function(dep, ind, yourdata){
#Self-starting...
log.ss <- nls(dep ~ SSlogis(ind, phi1, phi2, phi3), data=yourdata)

#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(dep ~ ind, data=yourdata, main = "Logistic Function", xlab=ind, ylab=dep)
with(data, lines(seq(0, max(ind), 1), predict(log.ss, data.frame(ind=seq(0,max(ind),1)))))

p <- (yourdata$ind)
m <- mean(p)

r1 <- sum((p-m)^2)
r2 <- sum(residuals(log.ss)^2)

r_sq <- (r1-r2) / r1
R <- sqrt(r_sq)

return(c(C=C, a=A, k=K, R.value=R))
}

我甚至无法使用此功能来查看我的其余功能代码是否正常...运行该功能时出现错误:

log.fit(int, yr2, newdata)

然后,我收到了这个错误:

Error in SSlogis(ind, phi1, phi2, phi3) : object 'phi2' not found

phi2是一个用ssLogis估算的参数,所以我输了。这就像功能之外的冠军一样。

1 个答案:

答案 0 :(得分:0)

我无法重现您提到的错误。我建议您更新到R的最新版本,并确保您使用的任何软件包也是最新的。但是,您的代码中存在两个错误:

用(你的数据,行(seq(0,max(ind),1),预测(log.ss,data.frame(ind = seq(0,max(ind), 1)))))

p&lt; - (你的数据$ in t

对于第二次修正,请确保您确实想要计算int变量的经验方差。