我们上应用回归分析(R语言版)这门课,老师每讲完一章就会带我们一起写这一章模型的代码,由于我们班同学大多会python不会R语言(包括我~~),所以代码都用python写。

这次写此书第二章.一元线性回归课后习题2.15的一些代码:

题目:一家保险公司十分关心其总公司营业部加班的程度,决定认真调查一下现状。经过10周时间,收集了每周加班时间的数据和签发的新保单数目, x
为每周签发的新保单数目, y 为每周加班时间(小时),数据见表-练习2.15

求:

(1)画散点图。

(2) x 与 y 之间是否大致呈线性关系?
(3)用最小二乘估计求出回归方程。 
(4)求回归标准误差。
(5)给出与的置信度为95%的区间估计。
(6)计算:x与 y 的决定系数。 
(7)对回归方程做方差分析。
(8)做回归系数β1的显著性检验
(9)做相关系数的显著性检验。
(10)对回归方程做残差图并做相应的分析。
(11)该公司预计下一周签发新保单 x0 =1000张,需要的加班时间是多少?
(12)给出 y0 的置信度为95%的精确预测区间和近似预测区间。
(13)给出 E ( y0 )的置信度为95%的区间估计

用到的数据表-练习2.15:

 代码部分:
# -*- coding: UTF-8 -*- #首先导入我们需要的库,我用的是pycharm,在pycharm事先安装好这些库 import numpy
as np import statsmodels.api as sm import statsmodels.formula.api as smf import
matplotlib.pyplot as plt import pandas as pd from patsy import dmatrices from
statsmodels.stats.api import anova_lm import scipy
 # Load data
df = pd.read_csv('‪C:\Users\joyyiyi\Desktop\练习2.15.csv')
#(1) 画散点图代码: fig, ax = plt.subplots(figsize=(8, 6)) ax.plot(df['x'], df['y'],
'o', label='data') ax.legend(loc='best') plt.show() #(3)OLS建模求出回归方程:
#=========第一种建模方====================================== y,X = dmatrices('y~x',
data=df, return_type = 'dataframe') mod = sm.OLS(y,X) result = mod.fit()
print(result.summary())
#==========第二种建模方式(类R语言方式)====================================== result1 =
smf.ols('y~x',data=df).fit() # print(result1.params),这种只输出回归系数结果
print(result1.summary()) #(4)求回归标准误差 print(result.scale)
#result.scale是σ²,回归标准误差是σ,要开根号np.sqrt(result.scale)
#(5)(6)(8)答案在问题(3)结果已经给出

#问题(5): 与的置信度为95%的区间估计分别为:[-0.701,0.937],[0.003,0.005]

#问题(6):R方=0.9

#问题(8):的P值=0.000
#(7)方差分析 table = anova_lm(result, typ=2) print(table) #(9)相关系数的显著性检验
#pearson相关系数检验 cortest = scipy.stats.pearsonr(df['x'],df['y']) print(cortest)
#(10) 计算残差 eres = result.resid fig, ax = plt.subplots(figsize=(8, 6))
ax.plot(eres, 'o', label='resid') plt.show() #我们老师还教了标准化残差和学生化残差的代码 # 标准化残差
stand_eres = eres / np.sqrt(result.scale) # eres.std() print(stand_eres) #
学生化残差 infl = result.get_influence() # studentied_eres = infl.summary_table()
studentied_eres = infl.resid_studentized_internal print(studentied_eres) #
问题(11)单值预测,当x0=1000 print("单值预测\n\n") predictvalues =
result.predict(pd.DataFrame({'x': [1000]})) print(predictvalues) print("\n\n")
#问题(11)得到y0=3.703
#问题(12)和(13)代码: predictions = result.get_prediction(pd.DataFrame({'x':
[1000]})) print("E(Y0)区间估计以及y0的精确预测区间:\n\n")
print(predictions.summary_frame(alpha=0.05)) print("\n\n")
print("y0的近似预测区间:\n")#手动公式计算 ylow=3.703-2*np.sqrt(result.scale)
yup=3.703+2*np.sqrt(result.scale) print(ylow,yup) 问题(1)画散点图:
 建模结果: 

问题(7)对回归方程做方差分析结果:

问题(9)相关系数的显著性检验:

问题(10)残差图:

分析(比较简单哈):残差值正常且分布均匀

问题(12): y0 的置信度为95%的精确预测区间:[2.519,4.887]和近似预测区间:[2.743,4.663]。
问题(13): E ( y0 )的置信度为95%的区间估计:[3.284,4.123]

代码整理(完整版):
​ # -*- coding: UTF-8 -*- #首先导入我们需要的库,我用的是pycharm,在pycharm事先安装好这些库 import
numpy as np import statsmodels.api as sm import statsmodels.formula.api as smf
import matplotlib.pyplot as plt import pandas as pd from patsy import dmatrices
from statsmodels.stats.api import anova_lm import scipy  # Load data df =
pd.read_csv('‪C:\Users\joyyiyi\Desktop\练习2.15.csv') #(1) 画散点图代码: fig, ax =
plt.subplots(figsize=(8, 6)) ax.plot(df['x'], df['y'], 'o', label='data')
ax.legend(loc='best') plt.show() #(3)OLS建模求出回归方程:
#=========第一种建模方====================================== y,X = dmatrices('y~x',
data=df, return_type = 'dataframe') mod = sm.OLS(y,X) result = mod.fit()
print(result.summary())
#==========第二种建模方式(类R语言方式)====================================== result1 =
smf.ols('y~x',data=df).fit() # print(result1.params),这种只输出回归系数结果
print(result1.summary()) #(4)求回归标准误差 print(result.scale)
#result.scale是σ²,回归标准误差是σ,要开根号np.sqrt(result.scale) #(5)(6)(8)答案在问题(3)结果已经给出
#问题(5): 与的置信度为95%的区间估计分别为:[-0.701,0.937],[0.003,0.005] #问题(6):R方=0.9
#问题(8):的P值=0.000 #(7)方差分析 table = anova_lm(result, typ=2) print(table)
#(9)相关系数的显著性检验 #pearson相关系数检验 cortest = scipy.stats.pearsonr(df['x'],df['y'])
print(cortest) #(10) 计算残差 eres = result.resid fig, ax =
plt.subplots(figsize=(8, 6)) ax.plot(eres, 'o', label='resid') plt.show()
#我们老师还教了标准化残差和学生化残差的代码 # 标准化残差 stand_eres = eres / np.sqrt(result.scale) #
eres.std() print(stand_eres) # 学生化残差 infl = result.get_influence() #
studentied_eres = infl.summary_table() studentied_eres =
infl.resid_studentized_internal print(studentied_eres) # 问题(11)单值预测,当x0=1000
print("单值预测\n\n") predictvalues = result.predict(pd.DataFrame({'x': [1000]}))
print(predictvalues) print("\n\n") #问题(11)得到y0=3.703 #问题(12)和(13)代码:
predictions = result.get_prediction(pd.DataFrame({'x': [1000]}))
print("E(Y0)区间估计以及y0的精确预测区间:\n\n") print(predictions.summary_frame(alpha=0.05))
print("\n\n") print("y0的近似预测区间:\n")#手动公式计算 ylow=3.703-2*np.sqrt(result.scale)
yup=3.703+2*np.sqrt(result.scale) print(ylow,yup) ​
第一篇学习笔记,排版可能不太ok,会继续努力,有错误地方请指出~谢谢大家~有问题欢迎交流~

技术
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:766591547
关注微信