前言
- 在大多数现实情况下,模型可以简化并通过模型对显式进行探索,本章可以学到的东西
- 数据分析中使用基础模型
- 使用积累分布函数和概率密度来描述变量
- 使用preceding function(?)和很多工具来进行点估计和生成符合特定分布的随机数
- 离散和连续随机变量
模型和实验
- 模型倾向于统计模型,在随机实验情况下
- 需要导入的包和包别名
from pandas import Series,DateFrame
import numpy.random as rnd
import scipy.stats as st #统计相关函数
积累分布函数
- 虽然直方图能够直观感受数据的一个分布情况,但有时候我们需要精准的数据表达,那么利用积累分布函数
- 生成一个符合正态分布的随机数据
mean=0 #均值
stdev=1 #标准差
nvalues=10 #随机点的个数
norm_variate=rnd.normal(mean,stdev,nvalues)
- 这段代码生成伪随机数,电脑不可能生成完全随机数,生成数字都会服从一个给定的分布。当然,这样的随机已经能满足大多数数据分析的需要。
- 积累分布函数以后都简称为cdf,在一个实际数据集中,cdf函数会是一个阶段函数
分布
数据分布分为离散分布和随机分布,对于离散或者连续变量数据分布会使用Scipy.stats中统计模块来统计数据,官方文档地址:https://docs.scipy.org/doc/scipy/reference/stats.html
-
模块组合函数命名方式
st.< rv_name>.< function>(< argument>)- st:选择统计模块包
- rv_name:分布名称
- function:计算的具体函数
- argument:函数的参数
-
模块中每个分布都会有的部分函数:
- rvs():生成伪随机数
- cdf():积累分布函数
- pdf(),pmf():连续变量:pdf随机变量概率密度;离散变量:pmf概率质量函数
- ppf():积累分布函数的逆函数,百分数点->变量数值
- stats():分布的统计量
- mean(),std(),or var():变量均值,标准差,方差
- fit():将数据来拟合变量分布,返回数据的shape,location(位置),scale(反映数据形状)参数
对于正态分布,location对应mean,scale对应标准差std
-
例子:绘制一个正态分布的CDF函数和PDF函数图形
- 数据(模拟的是年龄超过20岁女性的身高分布):
N(样本点个数)=4857
mean(均值)=63.8
serror(标准误差)=0.06
sdev(样本标准差)=serror*sqrt(N)[公式]
rvnorm=st.norm(loc-mean,scale=sdev)
x轴数据范围:xmin=mean-3sdev,xmax=mean+3sdev (根据2
3delta原则) - 代码
xmin = mean-3*sdev xmax = mean+3*sdev xx = np.linspace(xmin,xmax,200) plt.figure(figsize=(8,3)) plt.subplot(1,2,1) plt.plot(xx, rvnorm.cdf(xx)) plt.title('Cumulative distribution function') plt.xlabel('Height (in)') plt.ylabel('Proportion of women') plt.axis([xmin, xmax, 0.0, 1.0]) plt.subplot(1,2,2) plt.plot(xx, rvnorm.pdf(xx)) plt.title('Probability density function') plt.xlabel('Height (in)') plt.axis([xmin, xmax, 0.0, 0.1]);
-
结果
- 计算这里rvnorm的1/4百分位数可以使用ppf(),那么数值为rvnorm.ppf(0.25)
- 计算该数据的点估计参数可以由如下代码得到:
mean,variance,skew,kurtosis=rvnorm.stats(moments='mvks')
- mean:变量的均值 - variance:变量方差 - skew:偏度,反映数据的对称程度 - kurtosis:峰度值,反映数据的峰是尖锐的还是平滑的,正态分布的峰度值=0,因为该分布是参考分
- 数据(模拟的是年龄超过20岁女性的身高分布):
-
weibull分布
- 参数:eta(scale参数),beta(shape参数),loc 都是正数
- 描述设备故障与时间的关系
- 参数描述
- shape参数beta:
- beta<1:
故障率随着时间递减,反映机器是有缺陷的,使用过程会很早就失灵 - beta=1:
故障率是常数,那么随机数与时间之间的分就是指数分布 - beta>1:
故障率随着时间递增而递增,反映正常使用机器的过程
- beta<1:
- scale参数 yta决定分布传播的范围,scale参数越大那么对于机器故障的估计就存在越大不确定性。注意该分布中scale参数不是模型的标准差
- shape参数beta:
- 例子:
- 数据:
eta = 1.0 beta = 1.5 rvweib = st.weibull_min(beta, scale=eta)
- 根据数据绘制直方图
weib_variates = rvweib.rvs(size=500) weib_df = DataFrame(weib_variates,columns=['weibull_variate']) weib_df.hist(bins=30)
-
结果
-
概率分布函数pdf
- 反映连续随机变量概率密度,其中一段与x轴之间面积表示概率
-
概率质量函数pmf
- 表示离散变量
模型的产生
- 模型是用来简化数据计算模式,概率模型考虑相关因素,重要指标,近似模拟数据从而简化计算模式
- 例子
- 二项分布模型(N,P)
- 有N个离散变量,变量之间相互独立,每个变量服从二次分布,每个变量=1的概率都是P
- 适用情景:质量控制系,1代表质量达标的项,0代表质量不达标的项,那么就可以得到系统中达标项的模型
- 可以利用pmf函数来查看二项分布的分布情况
- 代码
N = 20 p = 0.5 rv_binom = st.binom(N, p) xx = np.arange(N+1) cdf = rv_binom.cdf(xx) pmf = rv_binom.pmf(xx) xvalues = np.arange(N+1) plt.figure(figsize=(9,3.5)) plt.subplot(1,2,1) plt.step(xvalues, cdf, lw=2, color='brown') plt.grid(lw=1, ls='dashed') plt.title('Binomial cdf, $N=20$, $p=0.5$', fontsize=16) plt.subplot(1,2,2) left = xx - 0.5 plt.bar(left, pmf, 1.0, color='CornflowerBlue') plt.title('Binomial pmf, $N=20$, $p=0.5$', fontsize=16)#使用latex公式写法 plt.axis([0, 20, 0, .18]);
-
结果
- 当样本数量很大时,二项分布近似正态分布,那么就有de Moivre估计,估计的正态分布参数与二项分布有一样的均值和方差,mean=NP std=sqrt(NP*(1-P))
- 二项分布模型(N,P)
多变量分布
- 多变量分布就是不仅观察一个样本数据,会有多种类型的样本数据;除了数据分布情况,可能会关注变量之间的相关性
- 典型多变量分布是双变量正态分布,该分布是scipy.stats中一部分,那么就可以利用该部分生成随机变量
- 生成服从双变量正态分布的代码:
binorm_varites=st.multivariate_normal.rvs(mean=[0,0],size=300)#方差是默认值1