Нестандартные переменные распределения для тестирования KS?

Не могли бы вы использовать kstest в scipy.stats для нестандартных функций распределения (например, изменить степень свободы для студентов t или изменить гамму для Коши)? Моя конечная цель - найти максимальное значение p и соответствующий параметр для моего распределения, но это не проблема.

ИЗМЕНИТЬ:

"

Коши scipy.stat в формате PDF:

cauchy.pdf(x) = 1 / (pi * (1 + x**2))

где это подразумевает x_0 = 0 для параметра местоположения и для гаммы, Y = 1. Мне действительно нужно, чтобы это выглядело так

cauchy.pdf(x, x_0, Y) = Y**2 / [(Y * pi) * ((x - x_0)**2 + Y**2)]

"

Q1) Могли бы Студенты t, по крайней мере, можно было бы использовать таким образом, возможно, как

stuff = []
for dof in xrange(0,100):
    d, p, dof = scipy.stats.kstest(data, "t", args = (dof, ))
    stuff.append(np.hstack((d, p, dof)))

поскольку у него, кажется, есть возможность изменить параметр?

Q2) Как бы вы поступили, если бы вам понадобилось полное уравнение нормального распределения (необходимо варьировать сигму) и Коши, как написано выше (необходимо варьировать гамму)? РЕДАКТИРОВАТЬ: вместо поиска scipy.stats нестандартных дистрибутивов действительно возможно передать функцию, которую я пишу в kstest, которая найдет p-значение?

Спасибо любезно


person layces    schedule 24.08.2016    source источник
comment
Мне кажется, вы пытаетесь оценить параметры распределения по некоторым данным? Вы должны использовать метод .fit для соответствующего дистрибутива. .   -  person juanpa.arrivillaga    schedule 29.08.2016
comment
@juanpa.arrivillaga Dang.. да, мне нужно провести отдельные тесты KS для каждого параметра распределения, и я не могу использовать метод .fit из-за того, что соответствующие распределения не учитывают приведенные выше примеры параметров (сигма для нормы, гамма для Коши), поскольку они являются стандартными формулами и упрощают возможность изменения этих параметров. Позвольте мне добавить редактирование для визуального элемента.   -  person layces    schedule 29.08.2016
comment
@Нет, не было. Например, для распределения norm сигма соответствует параметру scale. мю соответствует loc. Точно так же для Коши гамма равна scale, а x0 равна loc.   -  person juanpa.arrivillaga    schedule 29.08.2016
comment
@juanpa.arrivillaga О боже, эй. Вау.. так я могу изменить их i и j каким-нибудь cauchy(x, loc=i,scale=j) способом?   -  person layces    schedule 29.08.2016
comment
Да, точно. Это решило бы вашу первоначальную проблему, но вы, вероятно, все еще хотите .fit   -  person juanpa.arrivillaga    schedule 29.08.2016
comment
@ juanpa.arrivillaga И это позволит минимизировать параметры хи-квадрата, верно?   -  person layces    schedule 29.08.2016
comment
хи-квадрат нужно минимизировать? Нет, это МЛЭ. Почему вы поднимаете хи-квадрат?   -  person juanpa.arrivillaga    schedule 29.08.2016
comment
Ах, неважно, я запутался в том, как уменьшенный квадрат хи играет роль в curve_fit и методе наименьших квадратов. Не могли бы вы опубликовать сообщение в разделе ответов, чтобы я мог отметить вас как принятый ответ? Спасибо за помощь.   -  person layces    schedule 30.08.2016


Ответы (1)


Кажется, что вы действительно хотите сделать оценку параметров. Использование KT-теста таким образом не совсем то, для чего он предназначен. Вы должны использовать метод .fit для соответствующего дистрибутива< /а>.

>>> import numpy as np, scipy.stats as stats
>>> arr = stats.norm.rvs(loc=10, scale=3, size=10) # generate 10 random samples from a normal distribution
>>> arr
array([ 11.54239861,  15.76348509,  12.65427353,  13.32551871,
        10.5756376 ,   7.98128118,  14.39058752,  15.08548683,
         9.21976924,  13.1020294 ])
>>> stats.norm.fit(arr)
(12.364046769964004, 2.3998164726918607)
>>> stats.cauchy.fit(arr)
(12.921113834451496, 1.5012714431045815)

Теперь, чтобы быстро проверить документацию:

>>> help(cauchy.fit)

Help on method fit in module scipy.stats._distn_infrastructure:

fit(data, *args, **kwds) method of scipy.stats._continuous_distns.cauchy_gen instance
    Return MLEs for shape, location, and scale parameters from data.

    MLE stands for Maximum Likelihood Estimate.  Starting estimates for
    the fit are given by input arguments; for any arguments not provided
    with starting estimates, ``self._fitstart(data)`` is called to generate
    such.

    One can hold some parameters fixed to specific values by passing in
    keyword arguments ``f0``, ``f1``, ..., ``fn`` (for shape parameters)
    and ``floc`` and ``fscale`` (for location and scale parameters,
    respectively).

...

Returns
-------
shape, loc, scale : tuple of floats
    MLEs for any shape statistics, followed by those for location and
    scale.

Notes
-----
This fit is computed by maximizing a log-likelihood function, with
penalty applied for samples outside of range of the distribution. The
returned answer is not guaranteed to be the globally optimal MLE, it
may only be locally optimal, or the optimization may fail altogether.

Итак, допустим, я хотел сохранить один из этих параметров постоянным, вы могли бы легко сделать:

>>> stats.cauchy.fit(arr, floc=10)
(10, 2.4905786982353786)
>>> stats.norm.fit(arr, floc=10)
(10, 3.3686549590571668)
person juanpa.arrivillaga    schedule 29.08.2016