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

如何在R中用lm()为1900-1923年太阳黑子数据拟合10.4年周期正弦曲线

用R的lm()拟合周期10.4年的正弦曲线步骤

先把数据整理成便于处理的格式,你提供的观测值对应1900-1923年,先把年份和太阳黑子指数整合到数据框:

# 构造1900-1923年的年份向量
year <- 1900:1923
# 你的太阳黑子指数数据
values <- c(113.5,32.9, 60.3,92.6,503.4,761.6,646.3,744.4, 582.5,526.6,223.0, 68.4, 43.1,17.3, 115.1,568.4,684.8, 1246.7,966.9,763.3,451.7,313.6,170.9,69.3)
# 整合为数据框
sunspot_data <- data.frame(year = year, index = values)

核心:构造10.4年周期的正弦回归项

正弦函数的周期控制靠弧度转换,公式为 sin(2 * pi * 时间变量 / 周期)。这里我们先计算每个年份相对于1900年的偏移年数,作为时间变量:

# 计算相对于1900年的年数
sunspot_data$t <- sunspot_data$year - 1900

拟合周期模型

如果只拟合纯正弦项(固定相位),可以直接用:

# 仅正弦项的回归模型
model_sin <- lm(index ~ sin(2 * pi * t / 10.4), data = sunspot_data)
# 查看拟合结果
summary(model_sin)

但实际数据的相位通常不确定,加上余弦项能覆盖任意相位的周期函数,拟合效果更准确:

# 包含正弦+余弦项的完整周期模型
model_full <- lm(index ~ sin(2 * pi * t / 10.4) + cos(2 * pi * t / 10.4), data = sunspot_data)
summary(model_full)

可视化拟合效果

可以画图对比观测值和拟合曲线:

# 计算拟合值
sunspot_data$fitted <- predict(model_full)

# 绘图
plot(sunspot_data$year, sunspot_data$index, pch = 16, col = "blue", 
     main = "太阳黑子指数与10.4年周期正弦拟合", 
     xlab = "年份", ylab = "太阳黑子指数")
lines(sunspot_data$year, sunspot_data$fitted, col = "red", lwd = 2)
legend("topright", legend = c("观测值", "拟合曲线"), 
       col = c("blue", "red"), pch = c(16, NA), lty = c(NA, 1))

关键逻辑:2 * pi * t / 10.4 把时间t转换成以10.4年为周期的弧度值——每过10.4年,这个值增加2π,正好对应正弦函数一个完整周期,以此固定周期为10.4年。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 03:23:24