数据分析为何要学统计学(2)——如何估计总体概率分布

明确总体的概率分布类型及参数是进行数据分析的基础,这项工作称为分布推断与参数估计。在总体分布及其参数不明确的情况下,我们可以利用手头掌握的样本来完成这项工作。具体过程由以下步骤组成。

第一步,样本统计特性直观估计

我们采用Seaborn软件的histplot函数绘制核密度分布图(一种通过核密度函数KDE估计得出的近似概率密度曲线与频数分布直方图的合体)。参考代码如下:

import numpy as np
#输入样本数据
x=np.array([2.12906357, 0.72736725, 1.05152821, 0.48600398, 1.91963227,1.62165678, 8.86319952, 0.24399412, 4.19883103, 2.80846683,1.34644303, 0.35146917, 1.7575424 , 3.90572887, 1.07404978,4.05247124, 0.65839571, 0.40166037, 2.03241598, 0.53592929])
import seaborn as sns
#绘制核密度分布图。kde=True会绘制概率密度曲线,否则只有直方图
sns.histplot(x,kde=True)
说明:由于KDE是对称函数,所以估计出的概率密度曲线是一条
凸曲线(最高点两侧都有曲线)。即使实际概率密度曲线为​​单调
曲线(如指数分布),其近似函数的曲线也是凸的,只不过​​​​​​一侧
曲线很长,而另一侧很短。
第二步,确定几个与之相近的候选概率分布(一般3个左右)。

从上图来看,可以根据概率密度曲线选择最相似的卡方分布、指数分布、伽玛分布。

第三步,分别拟合候选分布的参数,并使用拟合得出的分布参数检验每一个候选分布 。

代码如下:

import scipy.stats as stats
#构造候选分布集合
dists={'expon':stats.expon,'chi2':stats.chi2,'gamma':stats.gamma}for dist in dists:#拟合每一个分布,将参数存放于param。不同分布参数会不同,但最后两个分别为loc和scale#loc和scale代表的含义因分布不同而异,如正态分布norm的情况,loc是均值scale是标准差#具体可查看分布类的__doc__属性值中的相关介绍param=dists[dist].fit(x)#检验每一个分布。KS检测是分布推断的常用方法,第一个参数是样本,第二个参数是分布的累计分布函数,第三个是分布参数test=stats.kstest(x,dists[dist].cdf,params)print(dist,test.pvalue,params)
第四步,选择p值(输出结果中的第一列值)最大的作为最终的分布(括号内是分布参数)
expon 0.9001 (0.016, 1.91)
chi2  0.3800 (1.78, 0.016, 1.37)
gamma 0.8080 (0.94, 0.016, 1.95)

 从以上数据可以看出,样本最可能是参数\frac{1}{ \lambda }=1.91的指数分布。而事实上,原始样本确实是以\frac{1}{ \lambda }=2生成的随机数样本。因为用样本拟合总体总存在一定水平的误差,所以不能追求结果的完美性。


最后我们专门介绍正态分布检验及其参数估计。

正太分布有多种检验方法,分别针对不同的情况

Shapiro–Wilk test:适用于小样本(3-5000),检验函数为scipy的stats.shapiro,根据p值是否大于显著水平a进行判断。公认小样本效果最可靠

Anderson–Darling test:适用于极小样本(8-26),检验函数为scipy的stats.anderson。可以检'norm, expon, logistic, gumbel,'gumbel_l, gumbel_r, extreme1, weibull_min分布,默认正态分布(norm)。该方法不输出p值,因此需要根据统计量是否小于显著水平对于的阈值来判断。

AndersonResult(statistic=0.8978770382274689, 
critical_values=array([0.527, 0.6  , 0.719, 0.839, 0.998 ]), significance_level=array([15. , 10. ,  5. ,  2.5,  1. ]), 
fit_result=  params: FitParams(loc=1.9203141072704806, scale=0.2784872286328154,
success: True,
message: '`anderson` successfully fit the distribution to the data.')

在该结果中,统计量小于1%显著水平的阈值,所以在该水平下才可以接受服从正态分布,其他显著水平下都拒绝接受服从正态分布的假设。

D'Agostino's K-squared test (Skewness-Kurtosis test):适用于8个以上的样本,样本容量越大越有效。公认大样本最有效。检验函数为scipy的stats.normaltest,根据p值是否大于显著水平a进行判断。

当样本通过正太分布检验后,可以使用stats.norm.fit函数获得分布参数。

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

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

相关文章

在ViewPager下面加圆点指示(使用selector方式)

前面讲了如何使用ViewPager来做多个可滑动的页面。今天在页面的下面加上一排小圆点,用于指示当前在第几页。效果如下(请忽略颜色和图案): 一、产生一个小圆点的视图 1、在drawable下产生一个选中和不选中颜色不同的小圆点形状&am…

1- Electron 创建项目、初始化项目

Electron官网 Build cross-platform desktop apps with JavaScript, HTML, and CSS | Electron Electron 初始化 初始化项目 - 构造package.json npm init -y 安装Electron模块包 npm i electron -D // 注意!如果报错查看node包是否太高 配置启动脚本 {&quo…

SQL、Jdbc、JdbcTemplate、Mybatics

数据库:查询(show、select)、创建(create)、使用(use)、删除(drop)数据库 表:创建(【字段】约束、数据类型)、查询、修改(alter *add)、删除 DML:增加(inse…

MySql的增、删、改、查(MySql数据库学习——五)

增(数据添加/插入数据) 使用 INSERT INTO SQL 语句来插入数据。我们可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者 通过PHP 脚本来插入数据。 sql语句: INSERT INTO table_name ( field1, field2,...fieldN ) …

AC843. n皇后问题--60

我们只需要把蓝色的往上移动就行了 if(!col[i][j]&&!dg[ui]&&!udg[])//1y(i)向下,x(u)向右为正。yxb的by-x一定>0,y-xb的bxy可能>0,这个不考虑,只看-bxy. 为什么for里面只有一个if呢…

操作系统期末复习-内存管理

一、内存管理 分页存储管理,是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页加以编号,从0开始,如第0页、第1页等。相应地,也把内存空间分成与页面相同大小的若干个存储块&#xf…

Vue学习计划-Vue2--VueCLi(八)vuex统一状态管理实现数据共享

1. vuex是什么 概念:专门在Vue中实现集中式状态(数据)管理的一个Vue插件,对Vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信…

Javascript 嵌套函数 - 递归函数 - 内置函数详解

Javascript 嵌套函数 - 递归函数 - 内置函数详解 目录 Javascript 嵌套函数 - 递归函数 - 内置函数详解 一、嵌套函数 二、递归函数 三、内置函数 在了解了函数的定义和函数调用外,下面我们来介绍一下JavaScript中几种特殊的函数。 JavaScript特殊函数有3种&a…

AVL树-详细解析【数据结构】

AVL树是首个被发明的自平衡二叉查找树,在1962年由两位苏联科学家G.M. Adelson-Velsky和E.M. Landis提出。AVL树得名于发明者的首字母。在AVL树中,任何节点的两个子树的高度最大差别为一,确保了树的平衡度,使得查找操作相比于普通的…

JavaScript数组分组groupBy

JavaScript 最近发布了一个方法 Object.groupBy,可以对可迭代对象中的元素进行分组。 语法: Object.groupBy(items, callbackFn)items 被分组的可迭代对象,如 Array。 callbackFn 对可迭代对象中的每个元素执行的函数。 举个例子&#…

【Qt QML 入门】TextEdit

TextEdit可以显示多行可编辑的格式化文。默认是无边框的,可以和父控件完美融合。 import QtQuick import QtQuick.Window import QtQuick.ControlsWindow {id: winwidth: 800height: 600visible: trueTextEdit {id: textEditanchors.centerIn: parenttext: "He…

并发编程中常见的设计模式

文章目录 一、 终止线程的设计模式1. 简介2. Tow-phase Termination(两阶段终止模式)—优雅的停止线程 二、避免共享的设计模式1. 简介2. Immutability模式—想破坏也破坏不了3. Copy-on-Write模式4. Thread-Specific Storage模式—没有共享就没有伤害 三…

八大排序——快速排序(霍尔 | 挖空 | 前后指针 | 非递归)

我们今天来讲讲八大排序中的快速排序,快速排序最明显的特点就是排序快,时间复杂度是O(N* logN),但是坏处就是如果排序的是一个逆序的数组的时候,时间复杂度是O(N^2),还不用我们的插入…

被带偏的中国云计算,重归正途

文 | 智能相对论 作者 | 叶远风 阿里云战略聚焦公共云,对整个云计算市场而言都是一场自我审视。 从市场背景、行业发展、中外对比等多个方面,业界舆论给出了大量详实的数据分析,已经对阿里云为什么要聚焦公共云有了结论,这里不…

会 C# 应该怎么学习 C++?

会 C# 应该怎么学习 C? 在开始前我有一些资料,是我根据自己从业十年经验,熬夜搞了几个通宵,精心整理了一份「C的资料从专业入门到高级教程工具包」,点个关注,全部无偿共享给大家!!&a…

云渲染技术下的虚拟现实:技术探索与革新思考

虚拟现实(含增强现实、混合现实)是新一代信息技术的重要前沿方向,是数字经济的重大前瞻领域,将深刻改变人类的生产生活方式,产业发展战略窗口期已然形成。但是虚拟现实想要深入改变影响我们的生活,以下技术…

数据结构和算法-最小生成树(prim和krusakal)和最短路径问题(BFS和dijkastra和floyd)

文章目录 最小生成树总览生成树广度优先生成树深度优先生成树最小生成树Prim算法Kruskal算法Prim vs KrusakalPrim的实现Kruskal的实现 小结 最短路径问题单源最短路径问题BFS求无权图的单源最短路径小结Dijkastra算法算法时间复杂度不适用情况 每一对顶点的最短路径问题Floyd算…

SQL Server 远程连接服务器数据库

本文解决sql server的远程连接问题。需要开启防火墙,开启端口,并处理权限不足的报错: 【use 某数据库】The server principal "[server]" is not able to access the database "[database]" under the current security context. 【…

探秘 AJAX:让网页变得更智能的异步技术(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…