【教男朋友用python做计量】03.利用python进行假设检验(1)
第三节 利用python进行T检验、F检验
文章目录
- 第三节 利用python进行T检验、F检验
- 前言
- 一、数据准备
- 二、t检验
- 1. t检验回顾
- 2. 利用statsmodels进行t检验
- 2.1 R矩阵的方式传参
- 2.2 利用字符串传参
- 三、F检验
- 总结及全部代码
- t检验
- F检验
前言
FBI WARNING:
之前讲了怎么用statsmodels进行简单的OLS回归,以及如何输出回归的参数(例如:系数,标准差,P值等等),可以发现其实这个库还挺强大,用来做计量也蛮方便的。所以就继续往下学习,那么就来到了如何利用statsmodels做t检验和F检验。这篇文章比较详细基础,甚至废话有点多,可以说是手把手教你用statsmodels做假设检验了,如果宝贝你还不会的话,我就先倒立洗个头(ノへ ̄、)。**注意:**如果有基础不想看废话的直接跳到最后的总结!!!
一、数据准备
先生成数据,进行初步的OLS回归,这一个步骤你已经很熟悉啦~无非就是import 一下,然后ols() 再fit(),忘记的话看我之前的文章哦。
import pandas as pd
import numpy as np
import statsmodels.api as sm
import statsmodels.formula.api as smf
#准备需要的包
#生成数据
df=pd.DataFrame(np.random.randint(1,10,(30,4)),columns=["Y","X1","X2","X3"])
df.head(5)
Y X1 X2 X3
0 5 1 8 1
1 2 1 8 5
2 1 8 7 8
3 2 6 8 9
4 6 6 3 6
数据准备好之后就可以进行OLS回归了:
#OLS回归
regression=smf.ols(formula="Y~X1+X2+X3",data=df)
model=regression.fit()
二、t检验
1. t检验回顾
t检验是对单个变量进行的显著性检验,首先要计算t,然后和临界值比较,看t值是落在拒绝域还是接受域。原假设:H0:βk^=β0H_0:\hat{\beta_k}=\beta_0H0:βk^=β0的t统计量为:
tk=βk^−β0Se(βk)^~t(n−K)t_k=\frac{\hat{\beta_k}-\beta_0}{Se(\hat{\beta_k)}}~t(n-K)tk=Se(βk)^βk^−β0~t(n−K)
其中,Se(βk^)Se(\hat{\beta_k})Se(βk^)为估计值βk^\hat{\beta_k}βk^的标准误。
t检验的原假设示例:
- H0:β1=0H_0:\beta_1=0H0:β1=0
- H0:β1=β2H_0:\beta_1=\beta_2H0:β1=β2
- H0:β2=1H_0:\beta_2=1H0:β2=1
2. 利用statsmodels进行t检验
接下来,我们直接用fit()下面的t_test()方法进行t检验,官方的t_test()方法说明如下:
在传参这里,可以用传入关于原假设的array,也可以传入原假设的字符串,或者是元组。总而言之就是咱们要把咱们的原假设告诉这个方法,那么怎么表达原假设呢~
2.1 R矩阵的方式传参
基本思想就是构造原假设 H0:Rβ=0H_0:R\beta=0H0:Rβ=0,其中β\betaβ为系数向量,然后把RRR作为参数输入给t_test()函数。
举个例子说明,假设我们这里有四个解释变量(包含了常数项),系数分别是:β0,β1,β2,β3\beta_0,\beta_1,\beta_2,\beta_3β0,β1,β2,β3
如果我们的原假设是:H0:β1=0H_0:\beta_1=0H0:β1=0,那么R=[0,1,0,0]R=[0,1,0,0]R=[0,1,0,0],这样RRR乘以β\betaβ向量之后刚好就是:
[0,1,0,0][β0β1β2β3]=β1=0[0,1,0,0]\begin{bmatrix} \beta_0\\ \beta_1\\ \beta_2\\ \beta_3\\ \end{bmatrix}=\beta_1=0[0,1,0,0]⎣⎢⎢⎡β0β1β2β3⎦⎥⎥⎤=β1=0
这样的话RRR矩阵就可以包含我们任意的原假设,如果原假设H0:β1=β2H_0:\beta_1=\beta_2H0:β1=β2,那么R=[0,1,−1,0]R=[0,1,-1,0]R=[0,1,−1,0],因为:
[0,1,−1,0][β0β1β2β3]=β1−β2=0[0,1,-1,0]\begin{bmatrix} \beta_0\\ \beta_1\\ \beta_2\\ \beta_3\\ \end{bmatrix}=\beta_1-\beta_2=0[0,1,−1,0]⎣⎢⎢⎡β0β1β2β3⎦⎥⎥⎤=β1−β2=0还可以一次性弄多个原假设,一次性分别进行t检验,比如原假设分别是:
H0:β1=0H0:β2=β3H_0:\beta_1=0\\H_0:\beta_2=\beta_3H0:β1=0H0:β2=β3要满足Rβ=[0;0]R\beta=[0;0]Rβ=[0;0],则:
R=(0100001−1)⇒(0100001−1)(β0β1β2β3)=(β1β2−β3)=(00)R=\begin{pmatrix} 0& 1 & 0 &0 \\ 0& 0&1 &-1 \\ \end{pmatrix}\Rightarrow \begin{pmatrix} 0& 1 & 0 &0 \\ 0& 0&1 &-1 \\ \end{pmatrix}\begin{pmatrix} \beta_0\\ \beta_1\\ \beta_2\\ \beta_3\\ \end{pmatrix}=\begin{pmatrix} \beta_1\\ \beta_2-\beta_3\\ \end{pmatrix}=\begin{pmatrix} 0\\ 0\\ \end{pmatrix}R=(0010010−1)⇒(0010010−1)⎝⎜⎜⎛β0β1β2β3⎠⎟⎟⎞=(β1β2−β3)=(00)
其实这部分的知识你也知道,书上也有,但我还是忍不住废话一下了哈哈哈哈。接下来就可以代码实现了:如果H0:β1=0H_0:\beta_1=0H0:β1=0
#构造R R1=np.zeros(4) #包含了常数项 R1[1]=1 #[0,1,0,0] #t检验,model是刚刚我们已经进行OLS回归得到的结果 model.t_test(R1)
输出结果:
如果H0:β2=β3H_0:\beta_2=\beta_3H0:β2=β3
#H0:X2=X3 R2=np.array([0,0,1,-1]) model.t_test(R2)
输出结果:
如果一次性进行多个t检验,H0:β1=0;H0:β2=β3H_0:\beta_1=0;\space \space \space H_0:\beta_2=\beta_3H0:β1=0; H0:β2=β3
R3=np.array(([0,1,0,0],[0,0,1,-1])) model.t_test(R3)
输出结果:
可以看到这里一次性进行了两个t检验,输出两个结果,和上面单独检验输出的结果相对应。值得注意的是,statsmodels给的方法用array的方式原假设默认都是等于0的,如果想要构造H0:β1=1H_0:\beta_1=1H0:β1=1这种就不能用array的方式了(我翻译官方文档理解出来是这样的,如果不对的话当我没说)。
那想要构造非0的原假设,应该怎么办呢?statsmodels还给出了另一种简便的方法,就是直接把原假设输入进去就行了,也就是利用字符串传参。
2.2 利用字符串传参
这是一个简单粗暴的方法,不想构造R矩阵的话,直接看这里:
如果 H0:β1=0H_0:\beta_1=0H0:β1=0
#H0:X1=0 model.t_test("X1=0") #我这里数据集变量名给的是X1,X2,具体输入什么要看你自己数据集的变量名是啥
输出结果:
可以发现和用array的方法一样,那这样的话直接用字符串就好了,想做什么原假设都可以,等于0或者等于其他数直接输入就是:#H0: X1=0; X2=X3 model.t_test("X1=0,X2=X3") #model.t_test("X1=1,X2=1")
输出结果,和输入R矩阵的结果其实一样:
这个方法是不是还蛮简单?现在再来看整个流程可能更直观一点:#导入包 import pandas as pd import numpy as np import statsmodels.formula.api as smf #生成数据 df=pd.DataFrame(np.random.randint(1,10,(30,4)),columns=["Y","X1","X2","X3"]) #OLS regression=smf.ols(formula="Y~X1+X2+X3",data=df) model=regression.fit() #t检验 H0:X1=0,X2=X3 ttest=model.t_test("X1=0,X2=X3") print(ttest) # 使用R矩阵的方法 R=np.array([[0,1,0,0],[0,0,1,-1]]) ttest2=model.t_test(R) print(ttest2)
输出结果:
三、F检验
F检验可以知道回归系数联合的线性假设是否同时成立,即:
H0:Rβ=rH_0:R\beta=rH0:Rβ=r
如果用statsmodels进行F检验的话,和上面的t检验步骤差不多,只不过方法是f_test(),所以这里直接代码演示了:
如果H0:β1=β2=β3=0H_0:\beta_1=\beta_2=\beta_3=0H0:β1=β2=β3=0
#F检验 ##传入字符串 ftest=model.f_test("X1=X2=X3=0") print(ftest) ##传入矩阵 R_f=np.eye(4) #np.identity(4) R_f=R_f[1:,:] ftest2=model.f_test(R_f) print(ftest2) #输出的分别是F值,P值,自由度
两个方法输出的值一样:
获取F检验的参数:
#获取f值 print(ftest.fvalue) #获取p值 print(ftest.pvalue) #获取两个自由度 print(ftest.df_denom) print(ftest.df_num)
总结及全部代码
以上就是利用statsmodels进行t检验和F检验的内容,我甚至写得废话有点多了,官方文档这里很直观:
- F检验
- 检验
为了更好你运行代码,这里我把两个检验的全部的代码放在这里了,复制之后去运行一下吧~
t检验
#导入包
import pandas as pd
import numpy as np
import statsmodels.formula.api as smf
#生成数据
df=pd.DataFrame(np.random.randint(1,10,(30,4)),columns=["Y","X1","X2","X3"])
#OLS
regression=smf.ols(formula="Y~X1+X2+X3",data=df)
model=regression.fit()
#t检验 H0:X1=0,X2=X3
ttest=model.t_test("X1=0,X2=X3")
print(ttest)
# 使用R矩阵的方法
R=np.array([[0,1,0,0],[0,0,1,-1]])
ttest2=model.t_test(R)
print(ttest2)
F检验
#导入包
import pandas as pd
import numpy as np
import statsmodels.formula.api as smf
#生成数据
df=pd.DataFrame(np.random.randint(1,10,(30,4)),columns=["Y","X1","X2","X3"])
#OLS
regression=smf.ols(formula="Y~X1+X2+X3",data=df)
model=regression.fit()
#F检验
##传入字符串
ftest=model.f_test("X1=X2=X3=0")
print(ftest)
##传入矩阵
R_f=np.eye(4) #np.identity(4)
R_f=R_f[1:,:]
ftest2=model.f_test(R_f)
print(ftest2)
#输出的分别是F值,P值,自由度
这节就到这里啦,之后再写写别的检验方法。如果有笔误的话纯属是我手残了,好啦好啦,宝贝学会了吗~溜溜球ヾ(´ _ ` )ง⁽‘-’⁾
【教男朋友用python做计量】03.利用python进行假设检验(1)相关推荐
- 用python做数据分析pdf_利用python进行数据分析pdf
利用python进行数据分析pdf微盘下载!<利用python进行数据分析>利用Python实现数据密集型应用由浅入深帮助读者解决数据分析问题~适合刚刚接触Python的分析人员以及刚刚接 ...
- python做线性回归_利用 python 进行线性回归
利用python进行线性回归 理解什么是线性回归 线性回归也被称为最小二乘法回归(Linear Regression, also called Ordinary Least-Squares (OLS) ...
- python做积分_利用python求积分的实例
python的numpy库集成了很多的函数.利用其中的函数可以很方便的解决一些数学问题.本篇介绍如何使用python的numpy来求解积分. 代码如下: # -*- coding: utf-8 -*- ...
- python做线性回归_利用python实现简单的线性回归
Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 用pytho ...
- python做统计_利用 Python 进行统计
你将学到什么 Create and interpret data visualizations using the Python programming language and associated ...
- python 做啥用-使用 Python 可以做什么?
翻译自 <Python学习手册(第5版)> Systems Programming Python 对操作系统服务的内置接口使其非常适合编写可移植.可维护的系统管理工具和实用程序 utili ...
- Python语言学习:利用python获取当前/上级/上上级目录路径(获取路径下的最后叶目录的文件名、合并两个不同路径下图片文件名等目录/路径案例、正确加载图片路径)之详细攻略
Python语言学习:利用python获取当前/上级/上上级目录路径(获取路径下的最后叶目录的文件名.合并两个不同路径下图片文件名等目录/路径案例.正确加载图片路径)之详细攻略 目录 利用python ...
- Python语言学习:利用python语言实现调用内部命令(python调用Shell脚本)—命令提示符cmd的几种方法
Python语言学习:利用python语言实现调用内部命令(python调用Shell脚本)-命令提示符cmd的几种方法 目录 利用python语言实现调用内部命令-命令提示符cmd的几种方法 T1. ...
- Python之ffmpeg:利用python编程基于ffmpeg将m4a格式音频文件转为mp3格式文件
Python之ffmpeg:利用python编程基于ffmpeg将m4a格式音频文件转为mp3格式文件 目录 利用python编程基于ffmpeg将m4a格式音频文件转为mp3格式文件 1.先下载ff ...
- python mysql 分页_利用python对mysql表做全局模糊搜索并分页实例
在写django项目的时候,有的数据没有使用模型管理(数据表是动态添加的),所以要直接使用mysql.前端请求数据的时候可能会指定这几个参数:要请求的页号,页大小,以及检索条件. "&quo ...
最新文章
- npm包开发测试与发布
- 网站付费免费推广你更中意哪一个?
- 计算机未识别网络什么意思,win7 64位系统提示当前连接到未识别的网络怎么办...
- python元类的使用_Python 元类使用讲解
- 销售组织与工厂对照表
- go语言map遍历时删除是安全的, 且可以完全删除
- CDOJ 1803 绿帽自动机 思维题
- 汤普森算法_Eamp;E算法在汽车之家推荐系统中的应用
- kaggle实战_4解决高维数据分类/回归问题--房价预测
- UVA156 Ananagrams【map+vector】
- [SDOI2016]储能表——数位DP
- P1379 八数码难题
- linux设置北京时间
- linux超时设置函数,I/O操作上设置超时之alarm闹钟法
- 视频在线播放,边下边播的一些问题记录
- Particle Filtering粒子滤波
- node.js版本问题
- TC-Traffic Control in Linux
- 线性插值(双线性)(三线性)
- jenkins git maven tomat 项目拉取编译自动部署(操作详细)
热门文章
- 邮件发送超大附件,上传下载特别慢,怎么解决?
- 响铃:金蝶的SaaS第一能保持多久?
- 西门子840d备份到u盘_西门子840D数控系统备份及恢复方法(三)
- RMSE(均方根误差)、MSE(均方误差)、MAE(平均绝对误差)、SD(标准差)
- Flutter 安卓微信分享提示签名不对
- 使用kindeditor直接粘贴本地图片或者是qq截图
- 汽车之家自动发帖回帖机器人
- 2021级天狮学院经济管理学院市场营销专升本专业辅导员及新生群
- 如何在linux系统下的抓包文件保存在u盘里,在xp系统中打开,【Linux】Wireshark在Linux系统下的安装及使用...
- 最短路径算法----Floyd-warshall(十字交叉算法证明)