r - 在数据集中拟合多条逻辑增长曲线

标签 r nls

我有多个县的人口数据,并且希望尽量减少每个县的重复拟合物流增长曲线。

county      year    pop
lake        1970    69305
lake        1980    104870
lake        1990    152104
lake        2000    210528
lake        2010    297052
marion      1970    69030
marion      1980    122488
marion      1990    194833
marion      2000    258916
marion      2010    331298
seminole    1970    83692
seminole    1980    179752
seminole    1990    287529
seminole    2000    365196
seminole    2010    422718

目前我正在对每个县进行子集化:

lake<-countypop[1:5,2:3]
colnames(lake)<-c("year", "pop")
marion<-countypop[6:10,2:3]
colnames(marion)<-c("year", "pop")
seminole<-countypop[11:15,2:3]

然后使用 SSlogis 绘制每个县的曲线,例如:

lake.model <- nls(pop ~ SSlogis(year, phi1, phi2, phi3, data = lake)))
alpha <- coef(lake.model)
plot(pop ~ year, data = lake, main = "Logistic Growth Model of Lake County", 
xlab = "Year", ylab = "Population", xlim = c(1920, 2030),ylim=c(0,1000000))  
curve(alpha[1]/(1 + exp(-(x - alpha[2])/alpha[3])), add = T, col = "blue") 

我有大约 60 个县,我知道必须有一种更清洁的方法来做到这一点。如何使用 apply 函数、循环或其他函数来消除代码中的重复?

最佳答案

试试这个:

pdf("countypop.pdf")
models <- by(countypop, countypop$county, function(x) {
  fm <- nls(pop ~ SSlogis(year, phi1, phi2, phi3), data = x)
  plot(pop ~ year, x, main = county[1])
  lines(fitted(fm) ~ year, x)
  fm
})
dev.off()

注意:我们使用它作为输入:

countypop <- 
structure(list(county = c("lake", "lake", "lake", "lake", "lake", 
"marion", "marion", "marion", "marion", "marion", "seminole", 
"seminole", "seminole", "seminole", "seminole"), year = c(1970L, 
1980L, 1990L, 2000L, 2010L, 1970L, 1980L, 1990L, 2000L, 2010L, 
1970L, 1980L, 1990L, 2000L, 2010L), pop = c(69305L, 104870L, 
152104L, 210528L, 297052L, 69030L, 122488L, 194833L, 258916L, 
331298L, 83692L, 179752L, 287529L, 365196L, 422718L)), .Names = c("county", 
"year", "pop"), class = "data.frame", row.names = c(NA, -15L))

关于r - 在数据集中拟合多条逻辑增长曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46269942/

相关文章:

r - 关于 nls fit in R 的问题 - 为什么这如此奇怪?

r - nls最合适的线-如何强制绘制线?

r - 如何从外部近似椭圆?

r - 使用 if_else 或 case_when 以两种不同的方式有条件地过滤数据帧

r - 使用try和tryCatch无法避免/跳过错误

c - 在 Win32 中使用 C 语言中的扩展 ASCII 归类表

r - 枢轴更广泛的多选项问卷

用特定变量名替换列中的 NA

r - 如何在不强制转换为数字的情况下迭代日期列表?

r - geom_smooth 提供与单独的 nls 不同的拟合