要获得逆CDF,您必须调用百分点函数,即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)电话。
UPDATE
实际上,如果你搞砸了nc实际上等于0.9973的参数,那么我的第二个图就会是你问题的答案。
更新II
好吧,如果nc真的大约有500万,那么print(rv.ppf(0.9973))真的产生了1100的输出。看看左上角的第一个图表和注释编号。