yihui 谢谢哈,刚刚看到。我最后是组合了抛物线和直线方程,以应对中期报告。抛物线和直线组合解决了部分问题,即视觉化模拟某些参数近期内增长快,之后增速放缓,逐渐饱和的情况。至于其他情况就之后再摸索。抛物线和直线组合的代码如下,可以出曲线图和对应每个年份的值。不过,运行效果来看,似乎不如 yihui 出图效果顺滑。
# 可指定初始时间和初始值,拐点时间点和最高值,最终时间点和最终值
# 拐点可以是高值点也可以是低值点
func_curve <- function(baseyear, basevalue,
yearmax, valuemax,
endyear, endvalue) {
# 转换年份和变量名称:扣除基准年份,这样数据就回到了以零点为起点的二次曲线
years <- c(baseyear: endyear)
x <- years - baseyear
n <- yearmax - baseyear
m <- valuemax - basevalue
# 储存计算结果因变量
out <- data.frame(year = years, x = x)
# 计算因变量
# 前半段用二次曲线
## 其实应该直接用数据框的向量化计算,之后再改吧
out$value <- -m/(n^2)*out$x^2 + 2*m/n*out$x + basevalue
# 超过拐点后用直线
if (valuemax == endvalue) {
out$value[out$year > yearmax] <-
valuemax
} else {
out$value[out$year >= yearmax] <-
func_interp_2(year = c(yearmax, endyear),
value = c(valuemax, endvalue))$value
}
out <- out[c("year", "value")]
out
}
interpresult <- func_curve(2019, 400, 2025, 700, 2070, 750)
plot(interpresult$year, interpresult$value, type = "l", ylim = c(0, 750))