单样本t检验

单样本 t 检验是对总体均值的假设检验。原假设为总体均值=μ0,备择假设为总体均值≠μ0,现计算出样本均值为x,样本标准差为S,检验的统计量服从t分布:t=(x-μ0)/S,若计算出的P值小于显著性水平则拒绝原假设,认为该样本不是出自均值为μ0的总体。

以房价增长率数据为例,原假设中总体均值为10%,样本住房增长率均值为11%,进行单样本t检验:

import pandas as pd
from scipy import stats
import statsmodels.api as sm
df=pd.read_csv('C:/Users/lenovo/Desktop/house_price_gr.csv',encoding='gbk')
df.rate.mean()
Out[1]: 0.11006099670192315
d1=sm.stats.DescrStatsW(df.rate)
#descriptive statistics and tests with weights for case weights
print('t统计量:%.4f,P值:%.4f,df=%s' %d1.ttest_mean(0.1))
t统计量:2.9812,P值:0.0034,df=149.0

可见P值远小于0.05,可以拒绝原假设,总体均值为10%的说法在95%的置信水平下不可信。

双样本t检验(连续变量与二分类变量)

单样本 t 检验是在比较假设的总体平均数与样本平均数的差异是否显著,双样本 t 检验在于检验两个样本均值的差异是否显著。在数据分析中,双样本t检验常用于检验某二分类变量区分下的某连续变量(通常是被解释变量)是否有显著差异,比如研究信用卡的消费额受性别的影响是否显著。

card=pd.read_csv('C:/Users/lenovo/Desktop/creditcard_exp.csv',skipinitialspace=True)#忽略分隔符后的空白
card=card.dropna(how='any')#删除表中含有任意个数NaN的行
card.head()
Out[3]: id  Acc  avg_exp  avg_exp_ln  ...  dist_avg_income  age2  high_avg  edu_class
0   19    1  1217.03    7.104169  ...        15.932789  1600  0.102361          3
1    5    1  1251.50    7.132098  ...        15.796316  1024  0.051184          2
3   86    1   856.57    6.752936  ...        11.275632  1681  0.197218          3
4   50    1  1321.83    7.186772  ...        13.346474   784  0.062676          2
5   67    1   816.03    6.704451  ...        10.332263  1681 -0.302113          3

其中变量avg_exp为信用卡消费额,gender为性别(0为男性,1为女性)。先对消费额按照性别分类汇总:

card['avg_exp'].groupby(card['gender']).describe()
Out[9]: count       mean         std     min       25%       50%        75%  \
gender
0        50.0   925.7052  430.833365  163.18  593.3125   813.650  1204.7775
1        20.0  1128.5310  462.281389  648.15  829.8600  1020.005  1238.2025   max
gender
0       1992.39
1       2430.03

根据均值来看,平均消费额的差异还是比较明显的,女性的消费额要比男性多。接下来用双样本 t 检验看这种差异是否显著。双样本t检验流程如下:

  • 获取两组样本数据(假设均服从正态分布)。
  • 进行方差齐性检验,即F检验。
  • 若方差齐,则进行方差齐的双样本t检验;若不齐,则进行方差不齐的双样本t检验。

方差齐性检验的假设和F统计量如图:

先进行方差齐性检验,即男性消费样本与女性消费样本的方差是否相同:

gender0 = card[card['gender']==0]['avg_exp']
gender1 = card[card['gender']==1]['avg_exp']
leveneTestRes = stats.levene(gender0,gender1)
#levene是方差齐性检验的包
print('statistic=%.4f, p-va1ue=%.4f' %leveneTestRes)
statistic=0.0683, p-va1ue=0.7946

P值接近0.8,不能拒绝原假设,认为两个样本方差齐性。因此可以进行方差齐性的双样本 t 检验(equal_var=True):

stats.stats.ttest_ind(gender0,gender1,equal_var=True)
Out[12]: Ttest_indResult(statistic=-1.742901386808629, pvalue=0.08587122878448449)

P值为0.08,若显著性水平为5%,说明不能拒绝原假设(无显著差异),男性和女性在信用卡消费上无显著差异。

注意这里双样本t检验研究的是一个连续变量和一个二元分类变量(性别)之间的关系,若分类变量为多元的,比如受教育程度(4个等级),则可以使用单因素方差分析法;如果研究一个连续变量受不止一个分类变量的影响,则可以使用多因素方差分析法,这两类方法在下一篇文章中介绍。

卡方检验(分类变量之间)

如何分析两个分类变量之间的相关关系呢?如果其中一个变量的分布随着另一个变量的变化而发生变化时,那么两个分类变量就有关系。在具体操作时,可以通过列联表分析与卡方检验得以实现。

列联表

列联表是一种常见的分类汇总表, 该表将待分析的两分类变量中一个变量的每一个类别设为列变量,另一个变量的每一个类别设为行变量,中间对应着不同变量不同类别下的频数。接下来探索分类变量是否违约(bad_ind)与分类变量是否破产(bankruptcy_ind)的关系,在Pandas中可以使用crosstab函数生成列联表。

accepts=pd.read_csv('C:/Users/lenovo/Desktop/accepts.csv')
cross_table=pd.crosstab(accepts.bankruptcy_ind,columns=accepts.bad_ind,margins=True)
cross_table
Out[26]:
bad_ind            0     1   All
bankruptcy_ind
N               4163  1017  5180
Y                345   103   448
All             4508  1120  5628

列联表显示破产状态(bankrupcy_ind=‘Y’)且违约状态正常(bad_ind =0)的客户有345个,破产状态(bankrupcy_ind=‘Y’) 且违约状态不正常(bad_ind=1)的客户相对较少,有103个。由于样本量的不同(bankrupcy_ind中N有5180个,而Y仅有448个),频数的差异不能直接反应离散变量之间的关系,我们需要将其转换为频率。例如将每个频数与行总计相数相除,就可以得到行百分比,代码如下所示:

cross_table_rowpct = cross_table.div(cross_table['All'],axis=0)
cross_table_rowpct
Out[27]:
bad_ind                0         1  All
bankruptcy_ind
N               0.803668  0.196332  1.0
Y               0.770089  0.229911  1.0
All             0.800995  0.199005  1.0

可以看到破产状态的(bankruptcy_ind=‘Y’)客户违约率为22.99%,非破产状态(bankruptcy ind=‘N’)的客户违约率为19.6%。如果我们认为这两个违约率没有差异(纵向比较),那么说明是否破产与是否违约不相关。同理可以将交叉表中的每个频数与列总计相除,计算所谓列轮廓并进行横向的比较,其结论应与比较行轮廓的结论是一致的:

cross_table_colpct = cross_table.div(cross_table.loc['All'],axis=1)
cross_table_colpct
Out[29]:
bad_ind                0         1       All
bankruptcy_ind
N               0.923469  0.908036  0.920398
Y               0.076531  0.091964  0.079602
All             1.000000  1.000000  1.000000

即无论是否违约,基本上都来自于没有破产的客户,因此是否破产和是否违约之间的相关关系应该不大。

列联表对比后发现的差异是否显著,需要在统计学意义上进行检验,可以使用卡方检验。

卡方检验

卡方检验的思想在于比较期望频数和实际频数的吻合程度,这里的实际频数指单元格内实际的观测数量(即上面生成的列联表),期望频数指行变量某类别与列变量某类别互相独立的时候的频数。

比如在期望频率表中,“破产=N”和“违约=0”的期望频率计算方法为92%×80.1%=73.7%,即假设两事件相互独立时的概率,最后再乘样本数量5628得到期望频数4149。期望频数的整个计算过程化简后为:

期望频数 = (行总/样本量 × 列总/样本量) × 样本量 = (行总 × 列总)/样本量

同样,其他的单元格期望频数与实际频数的差异都可以计算出来。这些差异是否能够表明两个分类变量的差异具有统计学意义需要继续进行卡方检验。卡方检验的原假设是期望频数等于实际频数,即两个分类变量无关,备择假设为期望频数不等于实际频数,即两个变量有关。检验的统计量为:

其中Obsij指第i行第j列的单元格的实际频数,Expij指第i行第j列的单元格的期望频数,卡方统计量实际上是构造了列联表中每个单元格的残差(实际频数 - 期望频数)平方和除以每一个单元格的期望频数,然后再加总求和计算出卡方统计量。卡方统计量服从自由度为(r-1)(c-1)的卡方分布(r表示行个数,c表示列个数)。根据P值的大小和显著性水平就可以确定两分类变量是否相关了。

d=np.array([[4163,1017], [345,103]])#列联表
stats.chi2_contingency(d)
Out[31]:
(2.709816662738465,0.09973245279763994,1,array([[4149.15422886, 1030.84577114],[ 358.84577114,   89.15422886]]))#第一个值为卡方值,第二个值为P值,第三个值为自由度,第四个为与原数据对应的期望频数

P值为0.09,在5%的显著性水平下表明没有理由拒绝违约与破产两个分类变量是独立的假设,即二者不相关。

(五十六)假设检验(t检验、卡方检验)相关推荐

  1. Python编程基础:第五十六节 filter函数Filter

    第五十六节 filter函数Filter 前言 实践 前言 filter函数的作用是对可迭代对象内部的元素按照特定条件进行过滤,其书写方式为filter(function, iterable),第一个 ...

  2. OpenCV学习笔记(五十六)——InputArray和OutputArray的那些事core OpenCV学习笔记(五十七)——在同一窗口显示多幅图片 OpenCV学习笔记(五十八)——读《Mast

    OpenCV学习笔记(五十六)--InputArray和OutputArray的那些事core 看过OpenCV源代码的朋友,肯定都知道很多函数的接口都是InputArray或者OutputArray ...

  3. JavaScript学习(五十六)—寄生式继承(临时构造器的使用)

    JavaScript学习(五十六)-寄生式继承(临时构造器的使用) 寄生式继承(临时构造器的使用): 之所以要使用临时构造器就是要在实现原型链继承时获取上级构造方法原型中的内容,而不要它的私有属性 默 ...

  4. 合肥工业大学机器人技术五十六题

    合肥工业大学机器人技术五十六题 题目要求 //拿球后行为,利用已有 Worldmodel(21) (1)在 playOn 模式下,拿到球以后朝前方快速带球. (2)在 PlayOn 模式下,拿到球以后 ...

  5. MFC Windows 程序设计[五十六]之开启子对话框(附源码)

    MFC Windows 程序设计[五十六]之开启子对话框 程序之美 前言 主体 运行效果 核心代码 逻辑分析 结束语 程序之美 前言 MFC是微软公司提供的一个类库(class libraries), ...

  6. 达芬奇密码 第五十五章 第五十六章

    达芬奇密码 第五十五章 第五十六章[@more@] 第五十五章 索菲靠着兰登坐在长沙发上,喝着茶吃着烤饼,享受着食物的美味.雷·提彬爵士微笑着,在炉火前面笨拙地踱来踱去.假肢敲在地面上,发出" ...

  7. 【Visual C++】游戏开发五十六 浅墨DirectX教程二十三 打造游戏GUI界面(一)

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/16384009 作者:毛星 ...

  8. 中国五十六个民族列表

    以后要养成一个习惯,把常用的代码保存到自己的 "代码库",虽说资料网上都有,但是有些经过自己验证的代码,如果能自己建立自己的库的话,将来也是一笔财富.所以,今天给自己的博客添加了 ...

  9. [Python从零到壹] 五十六.图像增强及运算篇之图像平滑(中值滤波、双边滤波)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  10. 信息系统项目管理师必背核心考点(五十六)配置控制委员会(CCB)的工作

    科科过为您带来软考信息系统项目管理师核心重点考点(五十六)配置控制委员会(CCB)的工作,内含思维导图+真题 [信息系统项目管理师核心考点]项目经理的相关工作 1.确定受变更影响的关联配置项和有关基线 ...

最新文章

  1. Open3d学习计划—高级篇 2(彩色点云配准)
  2. 计算机组成原理判零实验,计算机组成原理实验报告 进位位控制、通用寄存器判零实验...
  3. ltrim($str);
  4. 机器学习:贝叶斯分类器,朴素贝叶斯,拉普拉斯平滑
  5. 词典 (noi OpenJudge)
  6. QT_继承ApplicationWindow控件的C++与QML交互
  7. 华为机试(6.17笔试题解析)
  8. 【微信扫码登录】以及【微信扫码支付】解决方案
  9. 【天磊卫士安全预警】incaseformat蠕虫病毒预警
  10. 《缠中说禅108课》24::MACD 对背弛的辅助判断
  11. 解剖 Facebook 底层
  12. 闲聊机器人实例三:python实现小姜机器人(检索式chatbot_sentence_vec_by_word_词向量句向量)
  13. 关于左对齐和左对齐的一些简单理解和杨辉3角的算法思想
  14. blackjack算法java_[CareerCup] 8.1 Implement Blackjack 实现21点纸牌
  15. vim 全局替换_有一说一,Intellij IDEA 自带的 Vim 插件真心不错!
  16. 【黑金ZYNQ7000系列原创视频教程】07.自定义IP——定制RTC IP实验
  17. startAgent.bat在win2008上运行闪退
  18. 马云称自己的成就无关科技与钱;任正非:外籍员工可当华为 CEO,但有条件;雅虎宣布逐步关闭雅虎群组网站 | EA周报...
  19. 画论86 松年《颐园论画》
  20. 如何在不知道交换机的IP的情况下登陆交换机查找交换机的IP

热门文章

  1. iOS / iPadOS 15.7.4发布安全更新 旧版iPhone和ipad无法升级系统解决方法
  2. SQL开发与数据库管理笔记,看过的都说好!
  3. Allegro172版本DFM规则之DFT Spacing
  4. 如何在Ubuntu中给Pycharm在桌面增加图标
  5. 经典到发狂的语录(某男日记摘录)
  6. java poi方式读取Excel的图片
  7. 剑灵系统推荐加点_剑灵力士攻略:简单粗暴新版本加点推荐
  8. 情结- WiFi 直连
  9. JS学习辑录(4):push()、pop()、shift()、unshift() 方法整理
  10. Java工程师修炼之路(从小白到BAT的两年学习历程)...