最后更新于
最后更新于
scipy
计算包提供了子模块来支持与分布和概率相关的计算.
stats
子包中包含了几乎所有可能见到的连续分布和离散分布类型. 而对于所有的连续分布有着同样的方法来进行操作, 离散部分同理, 只是部分函数与连续的有区别.
因此在使用时, 需要首先选择一种分布, 然后使用这个分布中的某些方法来达成目的.
首先了解连续分布和离散分布共有的一些方法.
这里借助连续的, 离散的, 统计学三大分布其中的连续的来进行说明.
对于每种分布, 都有其自己的参数, 不同的参数对应着不同的分布. 在scipy.stats
中, 最常见的参数为loc和scale, 无论在连续还是离散分布中.
这两个参数顾名思义, 分别代表着:
loc
: 位置, 在很多分布中代表均值, 期望.
scale
: 缩放, 在很多分布中代表标准差的意思.
如果分布是与均值和标准差有关, 即这个分布中的参数包含这两者, 就使用这两者定义即可. 例如, 正态分布, 即norm
, 就可以完全只用这两个参数定义. 我们定义一个标准正态分布:
有的分布, 例如卡方分布, 需要使用额外的参数, 对于卡方分布, 需要使用自由度参数.
备注, 与本章目的无关, 对于卡方分布, 往往使用其标准分布, 它也可以像正态分布一样, 有位置的平移和峰度的区别. 如果使用loc
和scale
, chi.pdf(x, df, loc, scale)
等价于chi.pdf(y, df) / scale
, 其中y = (x - loc) / scale
.
有的分布, 完全与这两个参数无关, 例如常见的二项分布. 它需要的是n
, p
两个参数表示次数和单次概率. 这里我们模型投掷20次硬币的分布情况.
对于连续和离散分布, 有着共有的一些常用的方法.
stats(*args, moments="mv")
给出分布的统计量. 可以给出的统计量有:
m
: 均值, mean
v
: 方差, variance
s
: 偏度, skew
k
: 峰度, kurtosis
使用moments
函数指定.
cdf(x, *args)
连续
cdf(k, *args)
离散
Cumulative distribution function, 累积分布函数. 返回给定的x
(连续)或k
离散坐标值对应的累计概率值.
cdf(x, *args)
连续
cdf(k, *args)
离散
Survival function, 剩余密度的累计, 也可以定义为1 - cdf
ppf(q, *args)
Percent point function, 百分位函数. 给定一个百分数, 返回这个分布累计密度为这个数时对应的随机变量的值(即百分位).
cdf
的反函数.
mean(*args)
median(*args)
var(*args)
std(*args)
均值, 中位数, 方差, 标准差. 选定分布, 传入分布的参数, 得到对应的统计量.
正态分布
expect(func, args=(), loc=0, scale=1, lb=None, ub=None, conditional=False, **kwds)
二项分布
expect(func, args=(n, p), loc=0, lb=None, ub=None, conditional=False)
求函数的期望. 函数是关于该随机变量的单变量函数. 求在自变量为指定的分布情况下, 对应函数的期望值.
其中分布的参数由args
, loc
, scale
参数共同指定. 如果像正态分布一样, 只使用到loc
和scale
, args
传空tuple
即可.
interval(alpha, *args)
rvs(*args, size=1, random_state=None)
选定分布类型和分布参数, 就可以进行采样了. size
参数指定采样样本的数量, random_state
可以指定随机种子.
fit(data, *args)
使用数据拟合得到分布的参数. 假设这些数据来自于这种类型分布的抽样, 现在要推算出分布对应的参数.
也可以指定参数, 这里指定的参数作为先验分布来使用.
推算参数的方法为: Maximum Likelihood Estimation, MLE, 最大似然法.
只有部分分布支持拟合(原因: 参数的可导性). 以正态分布为例子进行说明.
首先使用标准正态分布, 抽样生成数据, 再对数据进行拟合.
使用更大的数据量, 拟合更准确.
在大样本量的情况下, 先验参数的选择并不重要.
pdf
: Probability density function, 连续随机变量的概率密度函数
pmf
: Probability mass function, 离散随机变量的概率质量函数
两者的意义是一样的, 只是对应连续和离散的问题.
pdf(x, *args)
pmf(k, *args)
即给定随机变量的一个值, 返回这个值对应的概率密度(连续)或概率(离散).
给定置信水平, 求出对应的区间范围. 如对于的双向检验, 使用的就是标准正态分布, 对应的区间为: