本文包含以下内容:离散概率分布伯努利分布
二项分布
几何分布
泊松分布
2.连续概率分布正态分布
幂律分布
3.总体和样本(中心极限定理)
4.如何避免偏见样本偏差
幸存者偏差
概率偏见
信息茧房
一、随机变量总述
二、离散概率分布
理解概率四步骤:有什么用?
如何检验?
如何计算概率?
Python代码实践
1.伯努利分布
(1)有什么用?
统计对于一个只有两种结果且每一结果服从独立分布的实验概率
(2)如何检验?
只有两种结果,每个结果服从独立分布
(3)如何计算概率?
概率质量函数PMF:
(4)代码
#导入包
#数组包
import numpy as np
#绘图包
import matplotlib.pyplot as plt
#统计计算包的统计模块
from scipy import stats
'''第1步,定义随机变量:1次抛硬币成功指正面朝上记录为1,失败指反面朝上记录为0'''
X = np.arange(0, 2,1)
#第2步,#求对应分布的概率:概率质量函数 (PMF)
#它返回一个列表,列表中每个元素表示随机变量中对应值的概率
p = 0.5 # 硬币朝上的概率
pList = stats.bernoulli.pmf(X, p)
# mac解决中文乱码
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
#第3步,绘图
'''plot默认绘制折线,这里我们只绘制点,所以传入下面的参数:marker:点的形状,值o表示点为圆圈标记(circle marker)linestyle:线条的形状,值None表示不显示连接各个点的折线'''
plt.plot(X, pList, marker='o',linestyle='None')
'''vlines用于绘制竖直线(vertical lines),参数说明:vline(x坐标值, y坐标最小值, y坐标值最大值)我们传入的X是一个数组,是给数组中的每个x坐标值绘制竖直线,竖直线y坐标最小值是0,y坐标值最大值是对应pList中的值官网文档:https://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.vlines'''
plt.vlines(X, 0, pList)
#x轴文本
plt.xlabel('随机变量:抛硬币1次')
#y轴文本
plt.ylabel('概率')
#标题
plt.title('伯努利分布:p=%.2f' % p)
#显示图形
plt.show()
2.二项分布
(1)有什么用?
二项分布为n次伯努利实验,用于统计k次的成功概率是多少
(2)如何检验?做某事的次数是固定的,次数用n来表示,n次某事件是相互独立的
每一次事件只有两种可能(成功或者失败)
每一次成功的概率都相等用P来表示
用于统计成功k次的概率
(3)如何计算概率?
公式:
期望E=nP 方差=nP(1-P)
n:做某件事的次数
p:做某件事成功的概率
k:成功的次数
(4)代码
绘制抛硬币五次至少三次正面朝上的概率分布图
#导入包
#数组包
import numpy as np
#绘图包
import matplotlib.pyplot as plt
#统计计算包的统计模块
from scipy import stats
'''arange用于生成一个等差数组,arange([start, ]stop, [step, ]使用见文档:https://docs.scipy.org/doc/numpy/reference/generated/numpy.arange.html'''
#第1步,定义随机变量:5次抛硬币,正面朝上的次数
n = 5 # 做某件事情的次数
p = 0.5 # 做某件事情成功的概率
X = np.arange(0, n+1,1)
#第2步,#求对应分布的概率:概率质量函数 (PMF)
#它返回一个列表,列表中每个元素表示随机变量中对应值的概率
pList = stats.binom.pmf(X, n, p)
# mac解决中文乱码
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
#第3步,绘图
'''plot默认绘制折线,这里我们只绘制点,所以传入下面的参数:marker:点的形状,值o表示点为圆圈标记(circle marker)linestyle:线条的形状,值None表示不显示连接各个点的折线'''
plt.plot(X, pList, marker='o',linestyle='None')
'''vlines用于绘制竖直线(vertical lines),参数说明:vline(x坐标值, y坐标最小值, y坐标值最大值)我们传入的X是一个数组,是给数组中的每个x坐标值绘制竖直线,竖直线y坐标最小值是0,y坐标值最大值是对应pList中的值官网文档:https://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.vlines'''
plt.vlines(X, 0, pList)
#x轴文本
plt.xlabel('随机变量:抛硬币正面朝上次数')
#y轴文本
plt.ylabel('概率')
#标题
plt.title('二项分布:n=%i,p=%.2f' % (n,p))
#显示图形
plt.show()
3.几何分布
(1)有什么用?
用于统计第K次做某件事情采取得第一次成功的概率
(2)如何检验?做某件事的次数是固定的,次数用n来表示,n次某事件是相互独立的
每一次事件都有两个可能的结果(成功或失败)
每一次成功的概率都相等用P来表示
用于统计第K次做某件事情采取得第一次成功的概率
(3)如何计算概率?
公式:
期望=
方差=
P:做某件事成功的概率
k:第k次做某件事采取得成功
(4)代码
绘制表白第五次才成功的概率
#导入包
#数组包
import numpy as np
#绘图包
import matplotlib.pyplot as plt
#统计计算包的统计模块
from scipy import stats
'''第1步,定义随机变量:首次表白成功的次数,可能是1次,2次,3次等'''
#第k次做某件事情,才取到第1次成功
#这里我们想知道5次表白成功的概率
k = 5
# 做某件事情成功的概率,这里假设每次表白成功概率都是60%
p = 0.6
X = np.arange(1, k+1,1)
#第2步,#求对应分布的概率:概率质量函数 (PMF)
#它返回一个列表,列表中每个元素表示随机变量中对应值的概率
#分别表示表白第1次才成功的概率,表白第2次才成功的概率,表白第3次才成功的概率,表白第4次才成功的概率,表白第5次才成功的概率
pList = stats.geom.pmf(X,p)
# mac解决中文乱码
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
#第3步,绘图
'''plot默认绘制折线,这里我们只绘制点,所以传入下面的参数:marker:点的形状,值o表示点为圆圈标记(circle marker)linestyle:线条的形状,值None表示不显示连接各个点的折线'''
plt.plot(X, pList, marker='o',linestyle='None')
'''vlines用于绘制竖直线(vertical lines),参数说明:vline(x坐标值, y坐标最小值, y坐标值最大值)我们传入的X是一个数组,是给数组中的每个x坐标值绘制竖直线,竖直线y坐标最小值是0,y坐标值最大值是对应pList中的值官网文档:https://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.vlines'''
plt.vlines(X, 0, pList)
#x轴文本
plt.xlabel('随机变量:表白第k次才首次成功')
#y轴文本
plt.ylabel('概率')
#标题
plt.title('几何分布:p=%.2f' % p)
#显示图形
plt.show()
4.泊松分布
(1)有什么用?
用于统计某个时间范围内发生某件事情k次的概率有多大
(2)如何检验?事件是独立事件
在任意相同的时间范围内,事件发生的概率相同
用于统计某个时间范围内发生某件事情k次的概率有多大
(3)如何计算概率?
公式:
期望
方差
:给定时间范围内某件事情发生的平均次数
k :事情发生的次数
(4)代码
已知路口每天发生事故比率为2次,绘制路口一天内发生k次事故的概率分布图
import numpy as np
'''第一步,定义随机变量:已知某路口发生事故的比率是每天两次,那么在此处一天内发生k次事故的概率是多少?'''
mu = 2 #平均值:每天发生2次事故
k = 4 #次数:想知道一天内发生k次事故的概率是多少
X = np.arange(0,k+1,1)
# 第二步:求概率质量函数PMF
#返回一个列表,列表中每个元素表示随机变量中对应值的概率
#分别表示发生1次、2次、3次、4次事故的概率
from scipy import stats
plist = stats.poisson.pmf(X,mu)
import matplotlib.pyplot as plt
# mac解决中文乱码
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
#第三步,绘图
'''plot默认绘制折线,这里我们只绘制点,所以传入下面的参数:marker:点的形状,值o表示点为圆圈标记(circle marker)linestyle:线条的形状,值None表示不显示连接各个点的折线'''
plt.plot(X, plist, marker='o',linestyle='None')
'''vlines用于绘制竖直线(vertical lines),参数说明:vline(x坐标值, y坐标最小值, y坐标值最大值)我们传入的X是一个数组,是给数组中的每个x坐标值绘制竖直线,竖直线y坐标最小值是0,y坐标值最大值是对应plist中的值'''
plt.vlines(X,0,plist)
#x轴文本
plt.xlabel('随机变量:某路口发生k次事故')
#y轴文本
plt.ylabel('概率')
#标题
plt.title('泊松分布:平均值mu=%i'% mu)
#显示图像
plt.show()
三、连续概率分布
1.正态分布
(1)有什么用?
生活中的大部分连续随机变量都服从正态分布,例如:员工绩效的活力曲线、产品质量、人群身高等。通过研究有助于我们研究生活中的普适性规律
(2)如何检验?连续随机变量X服从数学期望为
,方差为
的正太分布,记为
(3)如何计算概率?
公式:
数学期望为
,方差为
(4)代码
#导入包
#数组包
import numpy as np
#绘图包
import matplotlib.pyplot as plt
#统计计算包的统计模块
from scipy import stats
'''第1步,定义随机变量:'''
mu=0 #平均值
sigma= 1 #标准差
X = np.arange(-5, 5,0.1)
#第2步,概率密度函数(PDF)
y=stats.norm.pdf(X,mu,sigma)
# mac解决中文乱码
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
#第3步,绘图
'''plot默认绘制折线'''
plt.plot(X, y)
#x轴文本
plt.xlabel('随机变量:x')
#y轴文本
plt.ylabel('概率:y')
#标题
plt.title('正态分布:$\mu$=%.1f,$\sigma^2$=%.1f' % (mu,sigma))
#网格
plt.grid()
#显示图形
plt.show()
2.幂律分布
(1)有什么用?
自然界与社会生活中存在各种各样性质迥异的幂律分布现象,因而对它们的研究具有广泛而深远的意义,例如:家庭收入、城市GDP
(2)如何验证?
某个具有分布性质的变量,只要其分布密布函数是幂函数(由于分布密度函数必然满足“归一律”,所以这里的幂函数,一般规定小于负1),都可以称其满足幂律分布规律。
(3)如何计算概率?
公式:
(4)概率分布图
四、总体和样本
1.总体和样本
总体:总体是想要观察某一数量指标的全部可能的观察值。比如人口普查想要调查的项目之一包含全国人民的身高数据。
样本:样本是总体中抽取的用于调查和观测的部分客体。各个样本相互独立,且和总体拥有相同分布。由于生活中往往无法获得想要调查的全部数据,故选取其中部分数据进行研究。例如一个市人口的平均身高就是全国人口普查的身高数据总体的样本
样本大小:即样本容量,每一个样本里面有多少个数据
抽样分布:将样本平均值的分布可视化
2.中心极限定理样本平均值约等于总体平均值
不管总体是什么分布,任意一个总体的样本平均值都会围绕在总体的平均值周围,并且样本均值分布呈现正态分布
掷骰子中心极限定理:
(1)生成均匀分布的掷骰子随机数
import numpy as np
import seaborn as sns
data = np.random.randint(1, 7, 10000)
sns.distplot(data)可以看到1-6的点数是比较均匀的分布的
(2)从data中随机抽取一组数
sample1 = []
for i in range(0, 10):
rnd = int(np.random.random() * len(data))#0-9999的随机数生产
sample1.append(data[rnd])
print(sample1)
返回结果:[2, 3, 2, 1, 1, 4, 2, 1, 5, 3]
(3)抽取1000组数据:我们在生产的随机数中,一次抽取50个作为一组并计算它的平均值,共抽取1000次,得到1000个平均值,然后通过seaborn的distplot看着1000个数值的分布。
samples = []
s_mean = []
for i in range(0, 1000):
sample = []
for j in range(0, 50):
rnd = int(np.random.random() * len(data))#0-9999的随机数生产
sample.append(data[rnd])#循环50次的结果存放在samples
s_mean.append(np.mean(sample))#得到的50次sample的平均数放到s_mean后,重新循环第二次的50次循环,samples清空
sns.distplot(s_mean)
当采样的数量接近无穷大时,我们的抽样分布就会近似于正态分布。这个统计学基础理论意味着我们能根据个体样本推断所有样本。结合正态分布的其他知识,我们可以轻松计算出给定平均值的值的概率。在理论上保证了我们可以用只抽样一部分的方法,达到推测研究对象统计参数的目的。
3.样本估计总体
样本标准差:
总体标准差:
标准误差:
中心极限定理:样本平均值约等于总体平均值用样本来估计总体:民意调查
根据总体信息,判断某个样本是否属于总体
五、如何避免偏见
1.样本偏差:以偏概全以个例来概括总体情况,例如:以个别清华毕业生就业情况不如二本院校毕业生就业情况,来下结论学历对找工作作用不大
避免方法:随机抽样,增大样本容量
2.幸存者偏差:指的是只能看到经过某种筛选而产生的结果,而没有意识到筛选的过程,因此忽略了被筛选掉的关键信息。
避免方法:可以用对照试验和贝叶斯公式来消除幸存者偏差。
3.概率偏见:行为经济学家把人类自以为是的概率称之为:心理概率;心理概率和客观概率的不吻合,就叫做偏见概率。
避免方法:常见概率偏见:代表性偏差、可得性偏差、沉锚偏差
4.信息茧房:人们的信息领域会习惯性地被自己的兴趣所引导,从而将自己的生活桎梏于像蚕茧一般的“茧房”中的现象。
避免方法:多元信息化的生活,避免井底之蛙看世界