一、案例分析背景
案例:
中国全体居民的消费水平与经济发展数量关系的分析
提出问题:
改革开放以来,随着中国经济的快速发展,人民生活水平不断提高,居民的消费水平也在不断增长。研究中国全体居民的消费水平与经济发展的数量关系,对于探寻居民消费增长的规律性,预测居民消费的发展趋势有重要意义。
理论分析:
影响居民人均消费水平的因素有多种,但从理论和经验分析,最主要的影响因素应是经济发展水平。从理论上说经济发展水平越高,居民消费越多。
变量选择:
被解释变量选择能代表城乡所有居民消费的“全体居民人均年消费水平”(元/人);
解释变量选择表现经济增长水平的“人均国民生产总值(人均GDP)”(元/人)
研究范围:
1978年至2007年中国“全体居民人均年消费水平”与“人均国内生产总值(人均GDP)” 的时间序列数据
二、最小二乘估计OLS
# 读取数据
data = pd.read_excel('data.xlsx')
print(data.head)
# 准备数据
x = data['人均GDP(元)X']
y = data['全体居民消费水平(元)Y']
# 绘制散点图
plt.scatter(x, y)
plt.show()
从散点图可以看出居民消费水平(Y)和人均GDP (X)大体呈现为线性关系。为分析中国居民消费水平随人均GDP变动的数量规律性,可以建立
简单线性回归模型:
假定模型中随机扰动满足基本假定,可用OLS法。
简单线性回归的基本假定:
对模型和变量的假定、对随机扰动项u的假定(零均值假定、同方差假定、无自相关假定、随机扰动与解释变量不相关假定、正态性假定)
# 添加截距列
X = sm.add_constant(x)
# 拟合模型ols
model = sm.OLS(y, X).fit()
# 输出结果
print(model.summary())
# 提取残差
print(model.resid)
# 残差的标准误差
std_error = model.resid.std() / np.sqrt(28) # 计算残差标准误差
print("残差标准误差:", std_error)
由上图OLS模型结果可知:
模型方程为:y=224.3149+0.3864x
标准误差分别为:55.641、0.008
t值分别为:4.031、49.908
R方为0.988、F值为2491、样本n为30、自由度df为n-2=28
1、可决系数R方=0.988,说明模型整体上拟合好;
2、系数显著性检验:给定α=0.05,查T分布表,t0.025(28)=2.048,
因为t1=4.031>2.048,所以拒绝H0:β_1=0
因为t2=49.908>2.048,所以拒绝H0:β_1=0
3、用P值检验 α=0.05 >> p=0.0000,说明人均GDP对居民消费水平有显著影响;
4、经济意义检验:估计的解释变量的系数为0·3864,说明人均GDP每增加1元,人均年消费支出平均将增加0·3864
元。这符合经济理论的界定。
点估计
如果2008年人均GDP将比2007年增长16.2%将达到,22001元/人,利用所估计的模型可预测2008年居民可能达到的年消费水平。
区间估计
平均值区间预测上下限:
平均值区间预测区间预测
描述性统计信息
三、建模
X = data.iloc[:, 2].values.reshape(-1, 1) # 特征变量
y = data.iloc[:, 1].values # 目标变量
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = LinearRegression()
# 在训练集上训练模型
model.fit(X_train, y_train)
# 在测试集上进行预测
prediction = model.predict(X_test)
print(prediction)
coef = model.coef_ #获得该回该方程的回归系数与截距
intercept = model.intercept_
print("预测方程回归系数:", coef)
print("预测方程截距:", intercept)
score = model.score(X_test, y_test) #对得到的模型打分
print('模型的预测分', score)
模型方程为:y=220.2205+0.3862x
# 对原始值和预测值进行绘图
from matplotlib import pyplot as plt
plt.scatter(X_test, y_test, color='black', label='原始值')
plt.scatter(X_test, prediction, color='red', label='预测值')
plt.show()
# 绘制残差图
err = y_test - prediction # 求残差
plt.scatter(X_test, err, color='blue')
plt.axhline(y=0, color='black', linestyle='--') # 添加水平参考线
plt.show()
四、模型评估
from sklearn.metrics import r2_score
from sklearn.metrics import mean_squared_error, mean_absolute_error
# R-squared
r_squared = r2_score(y_test, prediction)
print(f"R-squared: {r_squared}")
# 计算MSE
mse = mean_squared_error(y_test, prediction)
print(f"Mean Squared Error (MSE): {mse}")
# 计算MAE
mae = mean_absolute_error(y_test, prediction)
print(f"Mean Absolute Error (MAE): {mae}")