Chi2cdf верхний питон

Итак, я перевожу Matlab в код Python и наткнулся на эту строку

Pv = chi2cdf(Devk,Md,'upper');

Где Devk — трехмерная матрица, а Md — df=10.

Я искал эквивалент в Python. Я нашел это:

from scipy.stats import chi2
Pv = chi2.cdf(Devk,Md)

Однако это не дает аналогичных результатов, я думаю, из-за «верхнего» аргумента Matlab. Кто-нибудь знает, как это реализовать на Python?

Кто-то попросил сделать какие-нибудь игрушечные данные, чтобы показать проблему:

Матлаб:

Devk = [1,2,3,4,5]
Md = 10
Pv = chi2cdf(Devk,Md,'upper')
Pv =
0.9998    0.9963    0.9814    0.9473    0.8912

Питон:

from scipy.stats import chi2
Devk = np.array([1,2,3,4,5])
Md = 10
Pv = chi2.cdf(Devk,Md)
Pv
Out[125]: array([0.00017212, 0.00365985, 0.01857594, 0.05265302, 0.10882198])

person JoeyvH    schedule 05.02.2019    source источник
comment
Я бы добавил к вашему вопросу выходные данные MATLAB и Python для игрушечных входов Devk и Md.   -  person norok2    schedule 05.02.2019
comment
Ну девка это действительно большая матрица 500х8х8 в которой цифры могут сильно различаться. Но аналогично как для Matlab, так и для Python. И Md - это просто цифра 10 для обоих.   -  person JoeyvH    schedule 05.02.2019
comment
Хорошо, но можете ли вы воспроизвести неожиданное поведение с игрушечными данными?   -  person norok2    schedule 05.02.2019
comment
А, заметил и добавил   -  person JoeyvH    schedule 05.02.2019


Ответы (1)


Я считаю, что имеет место следующее:

chi2cdf(..., 'upper') == (1 .- chi2cdf(...))

Итак, в вашем коде Python, вероятно, вам нужно сделать:

from scipy.stats import chi2

Pv = 1 - chi2.cdf(Devk, Md)

РЕДАКТИРОВАТЬ:

Еще лучше использовать:

Pv = chi2.sf(Devk, Md)

потому что, согласно документации, функция выживания sf() (также определяемая как 1 - cdf()) иногда более точна.

person norok2    schedule 05.02.2019