2016-05-24 7 views
1

Ich versuche einen Kolmogorov-Smirnov-Test durchzuführen, um eine empirische Verteilung mit der F-Verteilung zu vergleichen (ich weiß, dass diese nicht direkt verglichen werden können, aber ich werde Bootstrapping verwenden). Ich habe ein Problem mit dem scipy KS-Test:TypeError: ndarray nicht aufrufbar in scipy.stats.ksstest()

readLengths = [list,of,int,values,...] 
x = stats.f.fit(readLengths) 
dfn=x[0] 
dfd=x[1] 
stats.kstest(readLengths,stats.f.rvs(dfn,dfd,size=100)) 

Ich erhalte den Fehler

TypeError: 'numpy.ndarray' object is not callable 

und es verweist auf die stats.kstest Linie. Ich nehme an, das ist ein Problem mit dem Array readLengths, aber die Dokumente sagen, es kann ein 1D-Array nehmen, also nicht sicher, warum ich dieses Problem habe. Interessant ist auch, dass Sie in dieser Funktion die Normalverteilung mit "Norm" benennen können, aber "f" scheint nicht gültig zu sein, obwohl dies der Name der F-Verteilung ist.

+0

Versuchen Sie readLenghts auf 'Liste (readLenghts) zu ändern' – RafaelC

Antwort

3

Von the docs:

cdf : str or callable

If a string, it should be the name of a distribution in scipy.stats. If rvs is a string then cdf can be False or the same as rvs. If a callable, that callable is used to calculate the cdf.

Das zweite Argument von kstest sollte entweder eine Zeichenfolge oder ein aufrufbare Objekt sein, die Quantile als Eingänge und gibt die CDF annimmt. Stattdessen sind vorbei Sie es

stats.f.rvs(dfn,dfd,size=100) 

, die zu einem np.ndarray auswertet.


Eine Möglichkeit wäre, eine gefrorene PDF zu erstellen, um Ihre gewünschten Parameter verwendet wird, dann seine .cdf Methode als zweites Argument übergeben zu kstest:

fdist = stats.f(dfn, dfd) 
d, p = stats.kstest(readLengths, fdist.cdf) 
Verwandte Themen