You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言计算时间序列各时点趋势值及玉米产量组分分离方法

是否可以通过线性模型完成?

完全可以。你提到的产量分解逻辑本质就是通过拟合长期趋势得到趋势产量,再用实际产量减去趋势产量得到气候产量,线性回归是这类需求最常用的实现方案之一。如果你的数据长期趋势存在明显非线性特征,也可以切换为多项式回归、局部加权回归等方案适配。

R语言实现步骤

1. 数据导入

你可以直接读取本地存储的产量数据,也可以手动构造数据框,样例代码如下:

# 手动构造样例数据,实际使用时替换为read.csv/read.table读取本地文件即可
corn_prod <- data.frame(
  year = 1979:2020,
  production = c(1061, 1900, 1701, 1180, 
                 # 这里替换为你1983-2019年的实际产量数据
                 1245)
)

2. 线性回归拟合趋势产量

# 以年份为自变量拟合线性模型
lm_fit <- lm(production ~ year, data = corn_prod)
# 提取模型拟合值作为趋势产量Yt
corn_prod$Yt <- fitted(lm_fit)
# 按公式计算气候产量Yc = 实际产量 - 趋势产量
corn_prod$Yc <- corn_prod$production - corn_prod$Yt

3. 可选:非线性趋势适配

如果线性拟合效果不佳,可改用二阶多项式回归拟合更灵活的趋势:

poly_fit <- lm(production ~ poly(year, 2), data = corn_prod)
corn_prod$Yt_poly <- fitted(poly_fit)
corn_prod$Yc_poly <- corn_prod$production - corn_prod$Yt_poly

4. 结果验证与导出

你可以通过绘图直观查看拟合效果:

# 绘制实际产量和趋势产量对比图
plot(corn_prod$year, corn_prod$production, type = "o", xlab = "年份", ylab = "玉米年产量")
lines(corn_prod$year, corn_prod$Yt, col = "red", lwd = 2)
legend("topleft", legend = c("实际产量", "线性趋势产量"), col = c("black", "red"), lty = 1)

# 导出结果到本地csv
write.csv(corn_prod, "玉米产量分解结果.csv", row.names = FALSE)

内容的提问来源于stack exchange,提问作者Amrit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 14:06:03