Python 对于scipy中的非中心卡方,如何输入';nc&x27;定义
scipy.stats.ncx2为非中心卡方分布实现一些函数。这些功能有一个输入“nc” 假设N(mu,1)中有k个独立的随机数 我的问题是nc应该定义为kmu^2还是\sqrt(kmu^2) 我这样问是因为维基百科明确指出: “或者,pdf可以写成 实验(-nc+df)/2)*1/2*(x/nc)**((df-2)/4)*I(df-2)/2 其中,本公式中的非中心性参数是平方和的平方根。” 在scipy.stats.ncx2的文档中,pdf的格式与上面的格式完全相同 因此,输入“nc”应该是平方和,还是平方和的平方根Python 对于scipy中的非中心卡方,如何输入';nc&x27;定义,python,scipy,Python,Scipy,scipy.stats.ncx2为非中心卡方分布实现一些函数。这些功能有一个输入“nc” 假设N(mu,1)中有k个独立的随机数 我的问题是nc应该定义为kmu^2还是\sqrt(kmu^2) 我这样问是因为维基百科明确指出: “或者,pdf可以写成 实验(-nc+df)/2)*1/2*(x/nc)**((df-2)/4)*I(df-2)/2 其中,本公式中的非中心性参数是平方和的平方根。” 在scipy.stats.ncx2的文档中,pdf的格式与上面的格式完全相同 因此,输入“nc”应该是平
是否有某种方法可以从数字上验证这一点?维基百科页面中PDF的这两种表示形式中的非中心参数的含义是相同的。他们没有改变λ的定义,λ是正态分布均值的平方和 下面是一个脚本,它生成的曲线与维基百科页面中的绘图相同。彩色线是使用
scipy.stats.ncx2.pdf
计算的,灰色线是使用wikipedia页面中给出的无限系列的前10项计算的。该图验证这些只是相同值的不同表达式
import numpy as np
from scipy.stats import ncx2, chi2
import matplotlib.pyplot as plt
def approx_pdf(x, k, lam):
p = np.zeros_like(x, dtype=np.float64)
f = 1
for i in range(10):
p += np.exp(-lam/2) * (lam/2)**i * chi2.pdf(x, k + 2*i) / f
f *= (i + 1)
return p
# df == k on wikipedia
# nc == lambda on wikipedia
x = np.linspace(0, 8, 400)
linestyle = '-'
for df in [2, 4]:
for nc in [1, 2, 3]:
plt.plot(x, ncx2.pdf(x, df, nc), linestyle=linestyle,
label=f'k = {df}, λ = {nc}')
plt.plot(x, approx_pdf(x, df, nc), 'k', alpha=0.1, linewidth=6)
linestyle = '--'
plt.title("Noncentral chi-square distribution\nProbability density function")
plt.xlabel('x')
plt.legend(shadow=True)
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()
脚本生成的绘图:
这是另一个简短的脚本,用来证明非中心参数实际上是正态分布均值的平方和。它生成一个大样本值,每个值分别是平均值为1、1.5和3的三个正态随机变量的平方和。该样本的分布应为非中心卡方分布,具有3个自由度,非中心参数等于平均值的平方和
import numpy as np
from scipy.stats import ncx2
import matplotlib.pyplot as plt
# Means of the normal distributions.
mu = np.array([1, 1.5, 3])
k = len(mu) # df in scipy.stats.ncx2
lam = (mu**2).sum() # nc in scipy.stats.ncx2
# The distribution of sample should be a noncentral chi-square
# with len(mu) degrees of freedom and noncentrality sum(mu**2).
sample = (np.random.normal(loc=mu, size=(100000, k))**2).sum(axis=1)
# Plot the normalized histogram of the sample.
plt.hist(sample, bins=60, density=True, alpha=0.4)
# This plot of the PDF should match the histogram.
x = np.linspace(0, sample.max(), 800)
plt.plot(x, ncx2.pdf(x, k, lam))
plt.xlabel('x')
plt.grid(alpha=0.3)
plt.show()
如图中所示,理论PDF与样本的标准化直方图相匹配
谢谢您的明确解释。这是否意味着Wikipedia页面上的声明“此公式中的非中心性参数为平方和的平方根”是错误的?@Paradox,是的,看起来该声明是错误的。