获取scipy.stats发行版的参数名称

时间:2015-05-26 08:16:18

标签: python numpy scipy

我正在编写一个脚本,使用scipy.stats在数据集上找到最适合的分布。 我首先有一个分发名称列表,我在其中迭代:

dists = ['alpha', 'anglit', 'arcsine', 'beta', 'betaprime', 'bradford', 'norm']
for d in dists:
    dist = getattr(scipy.stats, d)
    ps = dist.fit(selected_data)
    errors.loc[d,['D-Value','P-Value']] = kstest(selected.tolist(), d, args=ps)
    errors.loc[d,'Params'] = ps

现在,在此循环之后,我选择最小D值以获得最佳拟合分布。现在,每个分布都返回ps中的一组特定参数,每个参数都带有它们的名称等等(例如,对于' alpha'它将是alpha,而对于' norm'它们会是卑鄙的和标准的。)

有没有办法在scipy.stats中获取估计参数的名称?

提前谢谢

2 个答案:

答案 0 :(得分:1)

此代码演示了ev-br在其答案中提供的信息,以防其他人来到这里。

>>> from scipy import stats
>>> dists = ['alpha', 'anglit', 'arcsine', 'beta', 'betaprime', 'bradford', 'norm']
>>> for d in dists:
...     dist = getattr(scipy.stats, d)
...     dist.name, dist.shapes
... 
('alpha', 'a')
('anglit', None)
('arcsine', None)
('beta', 'a, b')
('betaprime', 'a, b')
('bradford', 'c')
('norm', None)

我想指出 shapes 参数会为分布产生无值,例如法线,这些分布是按位置和比例参数化的。

答案 1 :(得分:0)

Warren Weckesser和我开发了一个更强大的解决方案:

import sys
import scipy.stats

def list_parameters(distribution):
    """List parameters for scipy.stats.distribution.
    # Arguments
        distribution: a string or scipy.stats distribution object.
    # Returns
        A list of distribution parameter strings.
    """
    if isinstance(distribution, str):
        distribution = getattr(scipy.stats, distribution)
    if distribution.shapes:
        parameters = [name.strip() for name in distribution.shapes.split(',')]
    else:
        parameters = []
    if distribution.name in scipy.stats._discrete_distns._distn_names:
        parameters += ['loc']
    elif distribution.name in scipy.stats._continuous_distns._distn_names:
        parameters += ['loc', 'scale']
    else:
        sys.exit("Distribution name not found in discrete or continuous lists.")
    return parameters

可以在here上找到讨论内容。