学习记录1-一元线性回归模型(附上python代码)

我们上应用回归分析(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,会继续努力,有错误地方请指出~谢谢大家~有问题欢迎交流~

  • 4
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
% MATLAB数学建模工具箱 % % 本工具箱主要包含三部分内容 % 1. MATLAB常用数学建模工具的中文帮助 % 2. 贡献MATLAB数学建模工具(打*号) % 3. 中国大学生数学建模竞赛历年试题MATLAB程序 % 数据拟合 % interp1 - 一元函数插值 % spline - 样条插值 % polyfit - 多项式插值或拟合 % curvefit - 曲线拟合 % caspe - 各种边界条件的样条插值 % casps - 样条拟合 % interp2 - 二元函数插值 % griddata - 不规则数据的二元函数插值 % *interp - 不单调节点插值 % *lagrange - 拉格朗日插值法 % % 方程求根 % inv - 逆矩阵 % roots - 多项式的根 % fzero - 一元函数零点 % fsolve - 非线性方程组 % solve - 符号方程解 % *newton - 牛顿迭代法解非线性方程 % %微积分和微分方程 % diff - 差分 % diff - 符号导函数 % trapz - 梯形积分法 % quad8 - 高精度数值积分 % int - 符号积分 % dblquad - 矩形域二重积分 % ode45 - 常微分方程 % dsolve - 符号微分方程 % *polyint - 多项式积分法 % *quadg - 高斯积分法 % *quad2dg - 矩形域高斯二重积分 % *dblquad2 - 非矩形域二重积分 % *rk4 - 常微分方程RungeKutta法 % %随机模拟和统计分析 % max,min - 最大,最小值 % sum - 求和 % mean - 均值 % std - 标准差 % sort - 排序(升序) % sortrows - 按某一列排序(升序) % rand - [0,1]区间均匀分布随机数 % randn - 标准正态分布随机数 % randperm - 1...n 随机排列 % regress - 线性回归 % classify - 统计聚类 % *trim - 坏数据祛除 % *specrnd - 给定分布律随机数生成 % *randrow - 整行随机排列 % *randmix - 随机置换 % *chi2test - 分布拟合度卡方检验 % % 数学规划 % lp - 线性规划 % linprog - 线性规划(在MATLAB5.3使用) % fmin - 一元函数极值 % fminu - 多元函数极值拟牛顿法 % fmins - 多元函数极值单纯形搜索法 % constr - 非线性规划 % fmincon - 非线性规划(在MATLAB5.3使用) % % 离散优化 % *enum - 枚举法 % *monte - 蒙特卡洛法 % *lpint - 线性整数规划 % *L01p_e - 0-1整数规划枚举法 % *L01p_ie - 0-1整数规划隐枚举法 % *bnb18 - 非线性整数规划(在MATLAB5.3使用) % *bnbgui - 非线性整数规划图形工具(在MATLAB5.3使用) % *mintreek - 最小生成树kruskal算法 % *minroute - 最短路dijkstra算法 % *krusk - 最小生成树kruskal算法mex程序 % *dijkstra - 最短路dijkstra算法mex程序 % *dynprog - 动态规划 % % % 图形 % plot - 平面曲线(一元函数) % plot3 - 空间曲线 % mesh - 空间曲面(二元函数) % *meshf - 非矩形网格图 % *draw - 用鼠标划光滑曲线 % %中国大学生数学建模竞赛题解 % jm96a - 捕鱼策略 % jm96b - 节水洗衣机 % jm96bfun - 节水洗衣机优化函数 % jm97a - 零件参数设计 % jm97afun - 零件参数函数 % jm97aoptim - 零件参数设计优化函数 % jm97b - 截断切割 % jm97bcount - 截断切割枚举法 % jm97brule - 截断切割优化准则 % jm98a1 - 风险投资模型求解 % jm98a2 - 风险投资模型讨论 % jm98a3 - 收益与风险非线性模型求解 % jm98a3fun - 收益与风险非线性模型优化函数 % jm98b - 灾情巡视路线(C程序) % jm99a1 - 自动化车床模型一 % jm99a1fun - 自动化车床模型目标函数 % jm99a1simu - 自动化车床模型随机模拟 % jm99asmfun - 自动化车床模型费用函数 % % 演示程序 % funtool - 函数计算器 % tutdemo - MATLAB优化工具箱教程 % mathmodl - 数学建模工具箱演示

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值