python 比例之差z假设检验_假设检验在数据分析中的应用

  • 前言

  • Z检验

  • T检验

    • 独立样本t检验

    • 配对样本t检验

    • 单样本t检验

前言

在这篇文章中,我不会具体去推导检验统计量和相应拒绝域的得出,这对于大部分非统计学专业的人士来说是晦涩的,我只想通过一个案例告诉大部分初学者假设检验怎么在数据挖掘中使用。

%matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import seaborn as sns
from scipy import stats
from statsmodels.stats import weightstats as mstats

df_exams = pd.read_csv('./StudentsPerformance.csv')
df_exams.head()
a74c33f61e73752b956079db664e098a.png
df_exams.rename(columns={'race/ethnicity':'ethnicity'},inplace=True)
df_exams.rename(columns={'parental level of education':'parents_education'},inplace=True)
df_exams.rename(columns={'test preparation course':'test_prep_course'},inplace=True)
df_exams.rename(columns={'math score':'math_score'},inplace=True)
df_exams.rename(columns={'reading score':'reading_score'},inplace=True)
df_exams.rename(columns={'writing score':'writing_score'},inplace=True)

查看前5行的信息

df_exams.head()
dcc073934c4e23bb565edbb6b7a3b9cd.png

接下来查看类别型数据是否均匀,数值型数据是否服从正态分布。

df_exams['ethnicity'].value_counts()
group C    319
group D 262
group B 190
group E 140
group A 89
Name: ethnicity, dtype: int64

以宗族信息这一列为例,可以看出C的占比较重,group A 只有89例。这也就说明当选择从每个group抽取80个样本是不合适的,因为这对A来说每次抽取,样本信息几乎没有发生什么变化。

exams = ['math_score','reading_score','writing_score']
for exam in exams:
    y = df_exams[exam]
    plt.figure(1); plt.title('Normal')
    sns.distplot(y, kde=False, fit=stats.norm)

    plt.figure(2); plt.title('Johnson SU')
    sns.distplot(y, kde=False, fit=stats.johnsonsu)

    fig = plt.figure()
    res = stats.probplot(df_exams[exam], plot=plt)
    plt.show()
b12f8889158299ab460f7bc13612f584.png
d5725cf29bec023ee3ef9bd10f2f60da.png

646f3d76333a6815d1e2472cc8384a94.png7787ac085f82873dee511b867939394f.png

e494af45c6c5ebbb5e3c54bd05ae26a8.pngea3f339578a8169d1301b16487fb1f18.png

1ea510eca2600af08a7b182162ca80b0.png55d13475a29c8d9f007ad95d2a3d8c7a.pngfdef43b419b1d450dd163b85ceb9b521.png

这些图片说明数据并不是完全服从正态分布,密度函数的尾部与正态分布有些偏离,但大体还是可以认为近似服从正态分布的,如果数据不服从正态分布,Z检验和T检验将是无法使用的。到目前为止请注意,我们用的都是全部的数据哟,而假设检验的思想是用样本的信息来推断总体的信息,所以接下来我们要从总体中取出样本。

# 从总体中随机抽取一定比例的样本
df_exams = df_exams.sample(frac=1)

假设检验被用来以科学严谨的方式检验一个关于数据的理论,这样我们就不会仅仅依赖于偶然性或主观假设。接下来我们要进行的是两个正态总体均值的检验,以学生分数为例,就是去检验两个不同的group的分数是否有明显的不同 。当建立一个假设检验时,有一个原假设和一个备择假设。还必须设置显著性水平,通常为5%(Scipy,statsmodel)。假设检验可以分为单尾或双尾。单尾的情况,例如,“A组得分>B组”。双尾的情况例如“A组的得分与B组不同”。简单介绍了这些 接下来,我们从a组和B组各抽取50名学生作为样本,然后计算该数据样本的Z分数。

z分数可以回答这样一个问题:“一个给定数距离平均数多少个标准差?”,在平均数之上的分数会得到一个正的标准分数,在平均数之下的分数会得到一个负的标准分数。z分数是一种可以看出某分数在分布中相对位置的方法。

group_a_sample = df_exams[df_exams['ethnicity'] == 'group A']
group_a_sample = group_a_sample[:50]

# 绘制QQ图,检验正态性
fig = plt.figure()
res = stats.probplot(group_a_sample['math_score'], plot=plt)
plt.show()

group_b_sample = df_exams[df_exams['ethnicity'] == 'group B']
group_b_sample = group_b_sample[:50]

fig = plt.figure()
res = stats.probplot(group_b_sample['math_score'], plot=plt)
plt.show()

print(stats.zscore(group_a_sample['math_score']))
print(stats.zscore(group_b_sample['math_score']))
b0264f436d4f685ee9c91fa14a137176.png
8b8c5824acc2b495bd3f1a48422a7253.png
[ 0.47126865  0.05544337  2.06526555  0.26335601  0.33266022 -0.01386084
0.26335601 -0.77620719 0.05544337 0.54057286 -1.67716196 -0.01386084
-0.91481561 2.68900347 -1.19203247 1.37222342 -0.70690297 -0.56829455
0.7484855 -0.56829455 -0.70690297 -0.49899034 0.26335601 1.09500657
0.67918129 -1.60785775 0.33266022 0.47126865 -0.2910777 -0.36038191
0.67918129 -0.8455114 -1.8850746 -0.42968612 0.7484855 -1.46924932
-0.98411983 1.09500657 -0.98411983 0.47126865 -0.15246927 1.7880487
-0.2910777 0.1940518 -0.15246927 -0.56829455 0.12474758 2.48109083
-0.22177348 -1.39994511]
[-0.68278212 -2.57240054 -0.05290932 -1.69057861 0.26202709 -0.17888388
-0.24187116 0.57696349 -0.7457694 -0.17888388 0.70293805 0.82891261
0.45098893 -0.36784572 0.82891261 0.07306525 -0.93473124 -0.430833
0.26202709 -0.99771852 1.33281086 -0.87174396 1.5217727 1.89969638
1.08086173 -0.80875668 0.57696349 0.13605253 -0.99771852 0.63995077
0.51397621 -1.43862949 2.08865822 -0.36784572 1.64774726 -2.50941326
-0.55680756 -0.36784572 -0.05290932 1.14384902 -1.50161677 0.32501437
0.07306525 0.13605253 0.13605253 0.95488717 1.08086173 -0.61979484
0.19903981 -0.30485844]

Z检验

下面的代码是z测试的一个示例。测试是看A组样本的“数学平均得分”是否小于总体平均值。

A组学生的平均“数学成绩”与总体平均值相同。

A组学生的平均“数学成绩”小于总体平均值。

首先介绍一下statsmodels 包中的 ztest 函数的一般用法如下:

0ea707dcc4081df8d6cc37a43526af9a.png
# 计算总体均值和样本均值
population_mean = df_exams['math_score'].mean()
sample_group_a_mean = group_a_sample['math_score'].mean()
print(population_mean,sample_group_a_mean)

# 这是单样本检验
zstats, pvalue = mstats.ztest(group_a_sample['math_score'],x2=None,value=population_mean,alternative='smaller')
print(pvalue)
66.089 61.2
0.008850880637695917

可以看出P值非常的小,小于5%,则在显著性水平为5%的条件下,我们要拒绝原假设

T检验

在T检验中,假设样本为正态分布,且总体参数未知。有3种情况:

  • 独立样本t检验,比较两个样本所代表的两个总体均值是否存在显著差异。除了要求样本来自正态分布,还要求两个样本的总体方差相等(ttest_ind)

  • 配对样本t检验,配对样本主要是同一实验前后效果的比较,或者同一样品用两种方法检验结果的比较。可以把配对样本的差作为变量(ttest_rel)

  • 单样本t检验,单样本t检验是样本均值与总体均值的比较问题。其中总体服从正态分布,总体的方差未知,从正态总体中抽样得到n个个体组成抽样样本,计算抽样样本均值和标准差,判断总体均值与抽样样本均值是否相同。(ttest_1samp)

下面是这3个假设检验的例子。注意:样本的随机性导致他们可能通过也可能不通过假设,所以可能你得到的结论和我不同。

独立样本t检验

让我们来看看A组和B组在“数学成绩”功能上的得分是否不同。

=样本组A的平均“数学成绩”与样本组B相同。

=样本组A的平均“数学成绩”与样本组B不同。

在5%显著性水平下测试。这是一个双尾检验。

# 当不确定两总体方差是否相等时,应先利用levene检验,检验两总体是否具有方差齐性。
print(stats.levene(group_a_sample['math_score'],group_b_sample['math_score']))
print(group_a_sample['math_score'].var(),group_b_sample['math_score'].var())

tscore,pvalue = stats.ttest_ind(group_a_sample['math_score'],group_b_sample['math_score'],equal_var=False)
print(pvalue)

print(group_a_sample['math_score'].mean(),group_b_sample['math_score'].mean())
LeveneResult(statistic=0.3789408560110682, pvalue=0.5395976230546553)
212.44897959183675 257.1983673469388
0.39114162148079246
61.2 63.84

P值小于5%,则在显著性水平为5%的条件下,我们应拒绝原假设,认为两组成绩不相同。

配对样本t检验

接下来看看A组在“数学成绩”和“阅读成绩”上的得分是否不同。

=样本组A的平均“数学成绩”与“阅读成绩”相同。

=样本组A的平均“数学成绩”与“阅读成绩”不同。

在5%显著性水平下测试。使用ttest_rel,这是一个双尾检验。

tscore,pvalue = stats.ttest_rel(group_a_sample['math_score'],group_a_sample['reading_score'])
print(pvalue)

print(group_a_sample['math_score'].mean(),group_a_sample['reading_score'].mean())
0.025329567098176128
61.2 64.26

P值小于5%,则在显著性水平为5%的条件下,我们应拒绝原假设,认为两个科目的成绩不相同。

单样本t检验

让我们看看A组样本的平均“数学分数”是否与总体平均值相同。

=样本组A的平均“数学成绩”与总体“数学成绩”平均值相同。

=样本组A的平均“数学成绩”与总体“数学成绩”平均数不同。

在5%显著性水平下测试。这是一个双尾测试。

tscore,pvalue = stats.ttest_1samp(group_a_sample['math_score'],df_exams['math_score'].mean())
print(pvalue)

print(group_a_sample['math_score'].mean(),df_exams['math_score'].mean())
0.02167469754070706
61.2 66.089

P值小于5%,则在显著性水平为5%的条件下,我们应拒绝原假设。

后期文章将会涉及其他类型的检验,方差分析,一元回归分析等,我将尽量减少不必要的数学推导公式,把最通俗易懂的内容呈现给大家。

由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:

(1)点击页面最上方“小詹学Python”,进入公众号主页。

(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。

感谢支持,比心。

4736819dcfe8a7b95dd3aa9b10222290.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/271539.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java实现字母的大小写转换

String result1 "JAVA";String result2 "springcloud";/*** toLowerCase()* 大写转小写*/System.out.println(result1.toLowerCase());/*** 小写转大写* toUpperCase()*/System.out.println(result2.toUpperCase()); 运行截图如下:

iOS开发tableview二级联动的细节实现中注意的细节总结

首先说网络慢带来的数据显示问题 可以通过判断请求参数是否一致来刷新tableview。 SJBCategaryModel * categaryModel self.categarys[CategarySelectRow]; NSMutableDictionary * params [NSMutableDictionary dictionary]; categaryModel.currentPage 1; params["a&q…

linux ctrlc 退出循环_linux按行读取 (while read line与forloop)

在linux下一般用while read line与for循环按行读取文件。这两种方法有什么区别呢&#xff1f;现有如下test.txt文件&#xff1a;1while read linewhile read line; do echo $linedone < test.txt输出结果与上图一致。这里也可以写为&#xff1a;cat test.txt | while read …

计算机系统基础:计算机可靠性知识笔记

1、计算机可靠性介绍 计算机的硬件故障通常都是由于元器件失效造成的。元器件的可靠性分为三个阶段&#xff1a;开始阶段元器件处于不稳定阶段失效率比较高、第二阶段是正常工作阶段&#xff0c;失效率最低、第三阶段元器件开始老化&#xff0c;失效率就又开始提高。又称为“浴…

IDEA云行项目提示Error: java: OutOfMemoryError

idea运行项目提示如下 解决方法: 调整一下Compiler下面的Compiler Process heap size 参数&#xff0c;默认的是700。如果2048还不能解决问题&#xff0c;试着将它调得更大一些吧&#xff0c; 修改为2048 修改后运行成功

常见的BIOS硬盘故障现象及急救措施

硬盘是电脑的数据仓库&#xff0c;是最为重要的存储设备&#xff0c;由BIOS直接管理。如果硬盘出现故障&#xff0c;一般情况下系统通常会显示一些提示信息&#xff0c;说明问题所在。下面&#xff0c;将一些常见的硬盘故障信息向大家一一介绍。1 C&#xff1a;Drive Failure …

js var是什么类型_JS变量的执行环境和生命周期

温故而知新&#xff0c;这些JS基础知识你都知道吗&#xff1f;今天和大家分享的是 JavaScript 中有关变量的知识&#xff0c;希望这篇文章能让你对JS中的变量有新的认识.目录&#xff1a;变量的执行环境&#xff08;执行上下文&#xff09;执行上下文的生命周期创建变量对象变量…

网络中不能显示全部计算机,win10家庭版局域网中计算机设备无法完全显示的解决方法...

许多用户都喜欢通过局域网来共享一些文件等&#xff0c;打开局域网就可以看到所有共享的计算机&#xff0c;然而有不少win10家庭版用户却发现局域网中只能看到几台计算机设备&#xff0c;无法完全显示&#xff0c;该怎么办呢&#xff0c;现在为大家讲解一下win10家庭版局域网中…

java.lang.NoClassDefFoundError:org/apache/commons/io/Charsets (jsoup配合htmlunit 爬取异步加载的网页遇到的)

最近用jsoup配合htmlunit 爬取异步加载的网页运行代码的时候,报错java.lang.NoClassDefFoundError:org/apache/commons/io/Charsets 报错截图如下 解决措施: 1:common-fileupload 1.3.1的版本依賴的commons-io 2.2&#xff0c;而htmlunit的jar依賴的是common-io 2.4 htmlunit…

echarts 3d地球 背面光线太暗_新技术:多波长光源,同时3D打印多种光敏树脂材料...

如今&#xff0c;光固化3D打印技术已经被广泛的采用&#xff0c;在齿科、首饰、手办等领域&#xff0c;然而如上图一样的常规光固化3D打印机&#xff0c;一次仍然只能打印一种材料。 △FDM技术类型的3D打印机可以通过增加喷头数量来实现多色或者多种材料同时打印&#xff0c;图…

计算机系统基础:计算机性能评价知识笔记

1、计算机性能常用的性能评测方法 1.1 时钟频率 计算机的时钟频率可以反映出机器的运行速度。一般主频越高&#xff0c;速度越快。 1.2 指令执行速度 加法指令执行速度是衡量计算机性能指标的重要指标之一。 1.3 等效指令速度法 随着计算机指令系统发展&#xff0c;种类越来越多…

astc贴图格式是什么意思_c4d配合AEe3d导入c4d模型贴图及插件安装所有流程

所有使用的软件及插件&#xff0c;分享给大家&#xff0c;需要软件或者插件的可以留言我&#xff0c;免费分享给大家&#xff0c;其实也可以网上下载到&#xff0c;就是有的版本和相应需要的插件不兼容和支持&#xff0c;。不少小伙伴用c4d做模型&#xff0c;做好后到底怎么玩&…

前大灯是近光灯还是远光灯_汽修案例:长安福特翼博前大灯间歇自动点亮

点击↑汽修案例关注置顶&#xff0c;获得正时大全一辆行驶里程约2300km的2017年长安福特翼博。客户反映&#xff1a;该车在行驶过程中前大灯间歇出现自动点亮的故障现象。故障现象出现时大灯点亮与否不受大灯开关控制&#xff0c;如图1所示。故障诊断&#xff1a;车辆来店报修时…

commons-httpclient 和 httpclient 区别

commons-httpclient 和 httpclient 区别 项目里的pom中&#xff0c;里面有这么两个包依赖。 <dependency><groupId>commons-httpclient</groupId><artifactId>commons-httpclient</artifactId><version>3.1</version> </depend…

计算机基础:多媒体基础知识笔记

1、媒体的定义 媒体包括两面&#xff1a; 1、物理载体&#xff1a;比如磁盘、光盘、磁带以及相关的播放设备。 2、信息载体&#xff1a;也就是信息的表现形式&#xff0c;比如文字、声音、图像、动画、视频等。CCITT定义的存储媒体和表示媒体。 2、媒体的分类 1、感觉媒体&…

gnuradio上怎么使用python文件_使用Python从PDF文件中提取数据

前言数据是数据科学中任何分析的关键&#xff0c;大多数分析中最常用的数据集类型是存储在逗号分隔值(csv)表中的干净数据。然而&#xff0c;由于可移植文档格式(pdf)文件是最常用的文件格式之一&#xff0c;因此每个数据科学家都应该了解如何从pdf文件中提取数据&#xff0c;并…

Attach Volume 操作(Part I) - 每天5分钟玩转 OpenStack(53)

上一节我们创建了 volume&#xff0c;本节讨论如何将 volume attach 到 Instance&#xff0c;今天是第一部分。 Volume 的最主要用途是作为虚拟硬盘提供给 instance 使用。Volume 是通过 Attach 操作挂载到 instance 上的。本节我们就来详细讨论 Cinder 是如何实现 Attach 的。…

python如何确定拐点_多年股市老鸟买卖操作经验——如何在波段操作确定买入点!经典...

多年股市老鸟买卖操作经验——如何在波段操作确定买入点&#xff01;经典&#xff01;股市谚语&#xff1a;“长线是金,短线是银,波段操作是钻石。”这从一个侧面反映了波段操作的重要性。波段操作就是在股价趋势变化的早期阶段辨识买卖机会&#xff0c;在波动的阶段性底部(谷底…

获取后端接口请求中的参数(@PathVariable,@RequestParam,@RequestBody区别,使用postman请求

获取参数 SpringBoot提供的获取参数注解包括&#xff1a;PathVariable&#xff0c;RequestParam&#xff0c;RequestBody,三者的区别如下表&#xff1a; 一:后端接口什么都不加 postman请求后端接口 二:后端接口加RequestParam POST请求RequestParam&#xff1a; ① 用来处理…

spark shell 删除失效_Spark任务提交源码解析

1. 前言反反复复捣鼓了很久&#xff0c;终于开始学习Spark的源码了&#xff0c;果不其然&#xff0c;那真的很有趣。这里我打算一本正经的胡说八道来讲一下Spark作业的提交过程。基础mac系统基础环境如下&#xff1a;JDK 1.8IDEA 2019.3源码Spark 2.3.3Scala 2.11.8提交脚本# 事…