python:一元线性回归模型案例分析

一、案例分析背景

案例:
中国全体居民的消费水平与经济发展数量关系的分析

提出问题
改革开放以来,随着中国经济的快速发展,人民生活水平不断提高,居民的消费水平也在不断增长。研究中国全体居民的消费水平与经济发展的数量关系,对于探寻居民消费增长的规律性,预测居民消费的发展趋势有重要意义。

理论分析
影响居民人均消费水平的因素有多种,但从理论和经验分析,最主要的影响因素应是经济发展水平。从理论上说经济发展水平越高,居民消费越多。

变量选择
被解释变量选择能代表城乡所有居民消费的“全体居民人均年消费水平”(元/人);
解释变量选择表现经济增长水平的“人均国民生产总值(人均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}")

在这里插入图片描述

  • 48
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rubyw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值