1、首先使用excel录入数据,绘制散点图:
时序 | 年份 | 销售量(件) |
1 | 2012 | 423.50 |
2 | 2013 | 433.38 |
3 | 2014 | 443.32 |
4 | 2015 | 450.84 |
5 | 2016 | 460.14 |
6 | 2017 | 467.59 |
7 | 2018 | 480.16 |
8 | 2019 | 483.73 |
9 | 2020 | 488.49 |
10 | 2021 | 494.28 |
11 | 2022 | 506.551 |
由散点图得出销售量数据大致符合线性模型。为此使用最小二乘法对模型进行拟合:
2、接下来使用excel数据分析得出结果如下:
3、模型检验:
由图得出调整的
F检验P值接近于0,说明拒绝原假设,拟合效果好。
计算得出标准误差等于2.964。
4、预测:
2022年,t=11,计算得出预测值为
即2022年销售量预测值为506.53。
5、Python代码:
5.1导入数据
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 读取数据
data = pd.read_excel('D:/P113-7.xlsx',sheet_name='data')
data.head()
5.2设置OLS求解参数
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei'] # 使用黑体
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题
#忽略警告
import warnings
# 忽略所有警告
warnings.filterwarnings('ignore')
# 假设 't' 是自变量,'Y' 是因变量
t = np.array(data['时序'])
Y = np.array(data['销售量(件)'])
print(t)
print('________________')
print(Y)
#%%
import scipy.stats as stats
r = stats.pearsonr(t,Y)[0]#相关分析
import statsmodels.api as sm
t = sm.add_constant(X)#添加常数项
model = sm.OLS(Y,t)
result = model.fit()
print(result.summary())
5.3求解拟合方程
# 获取回归系数
intercept = result.params[0]
slope = result.params[1]
# 输出线性回归方程
print(f'线性回归方程: Y = {intercept:.4f} + {slope:.4f} * t')
5.4绘制拟合直线
# 绘制拟合图
plt.scatter(t[:, 1], Y, color='blue', label='实际值') # X[:, 1] to exclude the constant term
plt.plot(t[:, 1], result.predict(t), color='red', linewidth=2, label='拟合线')
plt.xlabel('时序')
plt.ylabel('销售量(件)')
plt.legend()
plt.show()
5.5拟合直线预测
#2022年预测值,t=11
# 预测2022年的销售量,t=11
t = 11
X_new = np.array([[1, t]]) # 添加常数项
Y_pred_2022 = result.predict(X_new)
print(f'2022年预测值 (t=11): {Y_pred_2022[0]:.4f}')
2022年预测值。