Установка распределению Парето с (Python) Scipy

У меня есть набор данных, который я знаю, имеет распределение Pareto. Кто-то может указать на меня на то, как приспособить этот набор данных в Scipy? Я заставил ниже кода работать, но я понятия не имею, что возвращается мне (a, b, c). Кроме того, после получения a, b, c, как я вычисляю различие с помощью них?

import scipy.stats as ss 
import scipy as sp

a,b,c=ss.pareto.fit(data)
8
задан Tetsujin no Oni 18 June 2014 в 18:00
поделиться

2 ответа

Будьте очень внимательны при подборе степенных законов !! Многие известные степенные законы на самом деле плохо соответствуют степенным законам. См. Clauset et al. для получения всех подробностей (также на arxiv , если у вас нет доступа к журналу). У них есть сопутствующий веб-сайт к статье, которая теперь ссылается на реализацию Python. Не знаю, использует ли он Scipy, потому что я использовал их реализацию на R в последний раз.

4
ответ дан 5 December 2019 в 20:13
поделиться

Вот быстро написанная версия, основанная на некоторых подсказках из справочной страницы, которую дал Руперт. В настоящее время эта работа ведется в scipy и statsmodels и требует MLE с некоторыми фиксированными или фиксированными параметрами, которые доступны только в основных версиях. Стандартных ошибок в оценках параметров или другой статистике результатов пока нет.

'''estimating pareto with 3 parameters (shape, loc, scale) with nested
minimization, MLE inside minimizing Kolmogorov-Smirnov statistic

running some examples looks good
Author: josef-pktd
'''

import numpy as np
from scipy import stats, optimize
#the following adds my frozen fit method to the distributions
#scipy trunk also has a fit method with some parameters fixed.
import scikits.statsmodels.sandbox.stats.distributions_patch

true = (0.5, 10, 1.)   # try different values
shape, loc, scale = true
rvs = stats.pareto.rvs(shape, loc=loc, scale=scale, size=1000)

rvsmin = rvs.min() #for starting value to fmin


def pareto_ks(loc, rvs):
    est = stats.pareto.fit_fr(rvs, 1., frozen=[np.nan, loc, np.nan])
    args = (est[0], loc, est[1])
    return stats.kstest(rvs,'pareto',args)[0]

locest = optimize.fmin(pareto_ks, rvsmin*0.7, (rvs,))
est = stats.pareto.fit_fr(rvs, 1., frozen=[np.nan, locest, np.nan])
args = (est[0], locest[0], est[1])
print 'estimate'
print args
print 'kstest'
print stats.kstest(rvs,'pareto',args)
print 'estimation error', args - np.array(true)
4
ответ дан 5 December 2019 в 20:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: