第三节 利用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=(00​10​01​0−1​)⇒(00​10​01​0−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)相关推荐

  1. 用python做数据分析pdf_利用python进行数据分析pdf

    利用python进行数据分析pdf微盘下载!<利用python进行数据分析>利用Python实现数据密集型应用由浅入深帮助读者解决数据分析问题~适合刚刚接触Python的分析人员以及刚刚接 ...

  2. python做线性回归_利用 python 进行线性回归

    利用python进行线性回归 理解什么是线性回归 线性回归也被称为最小二乘法回归(Linear Regression, also called Ordinary Least-Squares (OLS) ...

  3. python做积分_利用python求积分的实例

    python的numpy库集成了很多的函数.利用其中的函数可以很方便的解决一些数学问题.本篇介绍如何使用python的numpy来求解积分. 代码如下: # -*- coding: utf-8 -*- ...

  4. python做线性回归_利用python实现简单的线性回归

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 用pytho ...

  5. python做统计_利用 Python 进行统计

    你将学到什么 Create and interpret data visualizations using the Python programming language and associated ...

  6. python 做啥用-使用 Python 可以做什么?

    翻译自 <Python学习手册(第5版)> Systems Programming Python 对操作系统服务的内置接口使其非常适合编写可移植.可维护的系统管理工具和实用程序 utili ...

  7. Python语言学习:利用python获取当前/上级/上上级目录路径(获取路径下的最后叶目录的文件名、合并两个不同路径下图片文件名等目录/路径案例、正确加载图片路径)之详细攻略

    Python语言学习:利用python获取当前/上级/上上级目录路径(获取路径下的最后叶目录的文件名.合并两个不同路径下图片文件名等目录/路径案例.正确加载图片路径)之详细攻略 目录 利用python ...

  8. Python语言学习:利用python语言实现调用内部命令(python调用Shell脚本)—命令提示符cmd的几种方法

    Python语言学习:利用python语言实现调用内部命令(python调用Shell脚本)-命令提示符cmd的几种方法 目录 利用python语言实现调用内部命令-命令提示符cmd的几种方法 T1. ...

  9. Python之ffmpeg:利用python编程基于ffmpeg将m4a格式音频文件转为mp3格式文件

    Python之ffmpeg:利用python编程基于ffmpeg将m4a格式音频文件转为mp3格式文件 目录 利用python编程基于ffmpeg将m4a格式音频文件转为mp3格式文件 1.先下载ff ...

  10. python mysql 分页_利用python对mysql表做全局模糊搜索并分页实例

    在写django项目的时候,有的数据没有使用模型管理(数据表是动态添加的),所以要直接使用mysql.前端请求数据的时候可能会指定这几个参数:要请求的页号,页大小,以及检索条件. "&quo ...

最新文章

  1. npm包开发测试与发布
  2. 网站付费免费推广你更中意哪一个?
  3. 计算机未识别网络什么意思,win7 64位系统提示当前连接到未识别的网络怎么办...
  4. python元类的使用_Python 元类使用讲解
  5. 销售组织与工厂对照表
  6. go语言map遍历时删除是安全的, 且可以完全删除
  7. CDOJ 1803 绿帽自动机 思维题
  8. 汤普森算法_Eamp;E算法在汽车之家推荐系统中的应用
  9. kaggle实战_4解决高维数据分类/回归问题--房价预测
  10. UVA156 Ananagrams【map+vector】
  11. [SDOI2016]储能表——数位DP
  12. P1379 八数码难题
  13. linux设置北京时间
  14. linux超时设置函数,I/O操作上设置超时之alarm闹钟法
  15. 视频在线播放,边下边播的一些问题记录
  16. Particle Filtering粒子滤波
  17. node.js版本问题
  18. TC-Traffic Control in Linux
  19. 线性插值(双线性)(三线性)
  20. jenkins git maven tomat 项目拉取编译自动部署(操作详细)

热门文章

  1. 邮件发送超大附件,上传下载特别慢,怎么解决?
  2. 响铃:金蝶的SaaS第一能保持多久?
  3. 西门子840d备份到u盘_西门子840D数控系统备份及恢复方法(三)
  4. RMSE(均方根误差)、MSE(均方误差)、MAE(平均绝对误差)、SD(标准差)
  5. Flutter 安卓微信分享提示签名不对
  6. 使用kindeditor直接粘贴本地图片或者是qq截图
  7. 汽车之家自动发帖回帖机器人
  8. 2021级天狮学院经济管理学院市场营销专升本专业辅导员及新生群
  9. 如何在linux系统下的抓包文件保存在u盘里,在xp系统中打开,【Linux】Wireshark在Linux系统下的安装及使用...
  10. 最短路径算法----Floyd-warshall(十字交叉算法证明)