Python 对于scipy中的非中心卡方,如何输入';nc&x27;定义

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”应该是平

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,是的,看起来该声明是错误的。