卡方分布密度曲线python代码
卡方分布(Chi-squared distribution),也称为χ²分布,是一种连续概率分布,在统计学中常用于检验数据的拟合度或其他变量的相关性。在Python中,我们可以使用scipy.stats
库来生成卡方分布的密度函数图。
以下是一个简单的例子,展示如何使用Python和matplotlib库绘制卡方分布的密度曲线:
```python import matplotlib.pyplot as plt from scipy.stats import chi2
设置随机数种子以便于复现结果
import numpy as np np.random.seed(0)
定义x轴的取值范围和步长
df = 4 # 分布自由度,例如正态分布的残差平方次数 x = np.linspace(chi2.ppf(0.001, df), chi2.ppf(0.999, df), 100) # 概率积分变换得到均匀分布的区间
计算每个x值对应的卡方密度
pdf = chi2.pdf(x, df)
绘制密度曲线
plt.figure(figsize=(8, 6)) plt.plot(x, pdf, 'r-', linewidth=2, label=f"χ²(df={df})") plt.title('Chi-Squared Distribution Density Curve') plt.xlabel('Value') plt.ylabel('Density') plt.legend() plt.grid(True) plt.show()
1、分布曲线 编写正态分布,二项分布,泊松分布、负二项分布、t 分布、卡方分布密度函数, 并用其函数画出每个分布的三条不同参数的密度曲线
正态分布密度函数: $$f(x)=\frac{1}{\sigma\sqrt{2\pi}}e^{-\frac{(x-\mu)^2}{2\sigma^2}}$$ 其中,$\mu$为均值,$\sigma$为标准差。
二项分布密度函数: $$f(x)=\binom{n}{x}p^x(1-p)^{n-x}$$ 其中,$n$为试验次数,$p$为每次试验成功的概率。
泊松分布密度函数: $$f(x)=\frac{\lambda^x}{x!}e^{-\lambda}$$ 其中,$\lambda$为单位时间内事件发生的平均次数。
负二项分布密度函数: $$f(x)=\binom{x-1}{r-1}(1-p)^{x-r}p^r$$ 其中,$r$为成功的次数,$p$为每次试验成功的概率。
t分布密度函数: $$f(x)=\frac{\Gamma(\frac{\nu+1}{2})}{\sqrt{\nu\pi}\Gamma(\frac{\nu}{2})}(1+\frac{x^2}{\nu})^{-\frac{\nu+1}{2}}$$ 其中,$\nu$为自由度。
卡方分布密度函数: $$f(x)=\frac{1}{2^{\frac{\nu}{2}}\Gamma(\frac{\nu}{2})}x^{\frac{\nu}{2}-1}e^{-\frac{x}{2}}$$ 其中,$\nu$为自由度。
以下是每个分布的三条不同参数的密度曲线:
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm, binom, poisson, nbinom, t, chi2
# 正态分布
mu = [0, 0, 0]
sigma = [1, 2, 3]
x = np.linspace(-10, 10, 200)
fig, ax = plt.subplots(nrows=1, ncols=3, figsize=(12, 4))
for i in range(3):
ax[i].plot(x, norm.pdf(x, loc=mu[i], scale=sigma[i]))
ax[i].set_title(f"mu={mu[i]}, sigma={sigma[i]}")
plt.show()
# 二项分布
n = [10, 20, 30]
p = [0.2, 0.5, 0.8]
fig, ax = plt.subplots(nrows=1, ncols=3, figsize=(12, 4))
for i in range(3):
ax[i].bar(range(n[i]+1), binom.pmf(range(n[i]+1), n[i], p[i]))
ax[i].set_title(f"n={n[i]}, p={p[i]}")
plt.show()
# 泊松分布
lam = [1, 3, 5]
fig, ax = plt.subplots(nrows=1, ncols=3, figsize=(12, 4))
for i in range(3):
ax[i].bar(range(20), poisson.pmf(range(20), lam[i]))
ax[i].set_title(f"lambda={lam[i]}")
plt.show()
# 负二项分布
r = [5, 10, 15]
p = [0.2, 0.5, 0.8]
fig, ax = plt.subplots(nrows=1, ncols=3, figsize=(12, 4))
for i in range(3):
ax[i].bar(range(r[i], 100), nbinom.pmf(range(r[i], 100), r[i], p[i]))
ax[i].set_title(f"r={r[i]}, p={p[i]}")
plt.show()
# t分布
nu = [5, 10, 30]
fig, ax = plt.subplots(nrows=1, ncols=3, figsize=(12, 4))
for i in range(3):
ax[i].plot(x, t.pdf(x, nu[i]))
ax[i].set_title(f"nu={nu[i]}")
plt.show()
# 卡方分布
nu = [5, 10, 20]
fig, ax = plt.subplots(nrows=1, ncols=3, figsize=(12, 4))
for i in range(3):
ax[i].plot(x, chi2.pdf(x, nu[i]))
ax[i].set_title(f"nu={nu[i]}")
plt.show()
非中心卡方分布概率密度函数
非中心卡方分布的概率密度函数
非中心卡方分布(Noncentral Chi-Squared Distribution)是一种广义的卡方分布,在统计学中有重要应用。它通常用于描述具有非零均值的正态随机变量平方和的分布特性。
数学定义
假设 ( X \sim \chi^2(k, \lambda) ),其中 ( k ) 是自由度,( \lambda ) 是非中心参数,则其概率密度函数可以表示为:
[ f(x; k, \lambda) = e^{-(x+\lambda)/2} \left( \frac{x}{\lambda} \right)^{k/4 - 1/2} I_{k/2-1}\left(\sqrt{\lambda x}\right), ]
这里 ( I_\nu(z) ) 表示修正的第一类贝塞尔函数[^3]。该表达式可以通过数值方法计算,许多数学库提供了实现这一功能的方法。
Python 实现
以下是使用 SciPy 库来计算非中心卡方分布概率密度的一个例子:
import numpy as np
from scipy.stats import ncx2
import matplotlib.pyplot as plt
# 定义参数
df = 5 # 自由度
nc = 2.5 # 非中心参数
x = np.linspace(ncx2.ppf(0.01, df, nc), ncx2.ppf(0.99, df, nc), 100)
# 计算 PDF
pdf_values = ncx2.pdf(x, df, nc)
# 绘制图形
plt.plot(x, pdf_values, label=f'PDF (df={df}, nc={nc})')
plt.title('Noncentral Chi-Squared Distribution Probability Density Function')
plt.xlabel('Value')
plt.ylabel('Probability Density')
plt.legend()
plt.show()
这段代码展示了如何利用 scipy.stats.ncx2
来绘制非中心卡方分布的概率密度曲线[^4]。
正常性和模型评估的关系
在回归分析中,残差的分布对于验证模型的有效性至关重要。如果残差不符合正态分布或者存在显著偏差,则可能表明当前使用的模型并不适合数据集[^1]。然而需要注意的是,即使训练误差较低也不能完全证明模型性能良好,因为可能存在过拟合现象[^2]。
相关性质讨论
当非中心参数 ( \lambda=0 ) 时,非中心卡方分布退化为中心卡方分布;随着样本量增大以及自由度增加,此分布逐渐接近于正态分布形态。
相关推荐
















