Чтобы получить обратный CDF, вам нужно вызвать функцию Percent point, или PPF.
Во-первых, есть вопросы по поводу вашего параметра nc
- он составляет около 5 000 000, что делает очень резкий шаг на графике.Итак, код
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import ncf
dfn = 2
dfd = 3
nc = 5 / (0.001042**2) # 1.0
rv = ncf(dfn, dfd, nc) # RV of non-central F distribution
x = np.linspace(0.01, 0.99, 100) # for inverse CDF, [0...1] is proper X interval
fig, ax = plt.subplots(1, 1)
ax.plot(x, rv.ppf(x), 'r-', lw=5, alpha=0.6, label='ncf PPF(inv.CDF)')
plt.show()
print(rv.ppf(0.9973))
создаст график
Если вы измените nc
на несколько разумных 1,0, вы будетеполучить график
В любом случае, вот код для обратного CDF (он же PPF), который вы просили.Последний вопрос: что такое 0.9973 as the p
- остались только параметры: масштаб или местоположение.Вы можете легко добавить его к вызову ncf(dfn, dfd, nc, loc, scale)
.
ОБНОВЛЕНИЕ
На самом деле, если вы испортили параметры, такие что nc
на самом деле равен 0.9973, то мой второй график был бы в значительной степениответ на ваш вопрос.
ОБНОВЛЕНИЕ II
Ну, если nc
на самом деле около 5 миллионов, то print(rv.ppf(0.9973))
действительно выдает результат 1 100 .Посмотрите на первый график и отметьте номер в левом верхнем углу.