簡體   English   中英

使用python顯示卡方分布的pdf

[英]Show the pdf of a chi-squared distribution using python

我正在嘗試從模擬樣本中以3個自由度重建卡方分布的pdf。 這是我的python代碼:

import numpy as np
import scipy.stats as stats
import matplotlib.pyplot as plt

norm = stats.norm(0, 1)

x1 = [x * x for x in np.random.randn(1000)]
x2 = [x * x for x in np.random.randn(1000)]
x3 = [x * x for x in np.random.randn(1000)]

f = x1 + x2 + x3

plt.hist(f, 100)
plt.show()

我得到的結果就是這個。

具有3個自由度的Chi分布

當然這是錯誤的。 如Wikipedia所示,具有3個自由度的卡方分布的pdf應該先從零開始向上,然后再向下,而不是像我這樣不斷攀登。 我的代碼有什么問題嗎? 我使用的公式如下:

Q = x1 ^ 2 + x2 ^ 2 + x3 ^ 2

其中x1,x2和x3是獨立的標准正態隨機變量。

盡管我嘗試了您的代碼並獲得了與您相同的結果,但是如果您使用“ norm”變量生成隨機值,則它似乎可以工作。

import numpy as np
import scipy.stats as stats
import matplotlib.pyplot as plt

norm = stats.norm(0, 1)

x1 = norm.rvs(size=100000)**2
x2 = norm.rvs(size=100000)**2
x3 = norm.rvs(size=100000)**2

f = x1 + x2 + x3

plt.hist(f, 60, normed=True)

# Plot the theoretical density of f
x = np.arange(0, 30, .05)
plt.plot(x, stats.chi2.pdf(x, df=3), color='r', lw=2)
plt.show()

我得到的結果是

Chi2的直方圖

“ +”運算符在Python列表上的工作方式不同於在Numpy數組上的工作方式。

f = x1 + x2 + x3

將三個列表合並為一個。 但是,您想逐個元素地添加三個列表的內容,可以這樣進行:

f = np.array(x1) + np.array(x2) + np.array(x3)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM