预测2012年数据
数据:链接:https://pan.baidu.com/s/1OIOaq3sqYPU-THuAl0QTVA
提取码:szp9
一元线性回归步骤:画散点图、正态检验、参数估计(最小二乘法)、回归方程的显著性检验(t检验、F检验)
基本假定:
1、设计矩阵X的自变量列之间不相关,样本量的个数大于解释变量的个数
2、随机误差项具有零均值的等方差。要进行方差齐性检验。
3、随机向量y服从正态分布
一、导包,导数据,画散点图
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
from scipy import stats
plt.style.use('ggplot')
## 解决中文字符显示不全
from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=12)
#导入数据
data=pd.read_csv('li2.2.csv')
y=data['人均支出']
x=data['人均收入']
#散点图
plt.scatter(x, y)
plt.xlabel('人均收入',fontproperties = font)
plt.ylabel("人均支出",fontproperties = font)
plt.title('收支表',fontproperties = font)
plt.show()
散点图有直线趋势,用一元线性回归模型
二、正态性检验
#P-P图检验正态性
plt.rcParams["figure.figsize"]=[12,4]
plt.subplot(1,2,1)
stats.probplot(x,dist='norm',plot=plt)
plt.subplot(1,2,2)
stats.probplot(y,dist='norm',plot=plt)
plt.show()
和直线基本吻合,服从正态分布。
三、线性回归
#普通最小二乘估计
model_1 = sm.formula.ols('y ~ x', data = data).fit() #OLS普通最小二乘法
model_1.summary()
一元线性回归方程为y = 542.2517+0.6837x
原假设:β1=0,备择假设:β1≠0 n=22
t检验t=104.249,t>t(α/2),自由度为n-2,α为0.05,p值=0<α,拒绝原假设,显著
F检验F=10870,F>Fα(1,n-2),α为0.05,P值=7.67e-29<α,拒绝原假设,显著
β1置信区间为 [0.670 ,0.697]不包含0
决定系数R²=0.998,接近于1,拟合效果好
四、基本假定的检验
#方差齐性检验
from scipy.stats import levene
e = model_1.resid
e1 = e[1:]
stat,p = levene(e,e1)
print(e.mean())
print(stat,p)
1.787983902349052e-12
0.09105922542140168 0.7643602272810235
均值为0,p=0.764>0.05,表明残差具有方差齐性
四、预测
#预测2012年
y = 542.2517+0.6837*x
x = 24564.7
print(y)
结果为17337.13709
菜鸡一枚,欢迎交流