(1)模拟求解和使用分布函数求解的对比,基本一致
from scipy import stats
X = stats.norm(loc=1.5, scale=0.5)
# p{1.8
print(X.cdf(2.9) - X.cdf(1.8))
# 模拟求解
cnt = 0
all_num = 100000
for i in range(all_num):
t = X.rvs()
# print(t)
if 2.9 > t > 1.8:
cnt += 1
print(cnt / all_num)
0.27169798742
0.27318
(2) 直接使用分位函数
X = stats.norm(loc=1.5, scale=0.5)
print(X.ppf(0.95))
2.32242681348
(3)
X = stats.norm(loc=0, scale=1)
Y = stats.norm(loc=0, scale=2)
Z = stats.norm(loc=0, scale=4)
t = np.arange(-5, 5, 0.01)
pl.plot(t, X.pdf(t), label="$X$", color="red")
pl.plot(t, Y.pdf(t), label="$Y$", color="blue")
pl.plot(t, Z.pdf(t), label="$Z$", color="yellow")
pl.show()
X = stats.norm(loc=0, scale=1)
Y = stats.norm(loc=2, scale=1)
Z = stats.norm(loc=-2, scale=1)
t = np.arange(-5, 5, 0.01)
# sns.distplot(X.rvs(size=10000))
# pl.show()
pl.plot(t, X.pdf(t), label="$X$", color="red")
pl.plot(t, Y.pdf(t), label="$Y$", color="blue")
pl.plot(t, Z.pdf(t), label="$Z$", color="yellow")
pl.show()
(3) 使用参数为1的指数分布验证中心极限定理
from scipy import stats
from scipy.stats import expon
from scipy.stats import norm
import pylab as pl
import numpy as np
import seaborn as sns
# 参数为1 的指数分布
e = expon()
print(e.mean(), e.var(), e.std())
d = e.rvs(size=10000)
# 指数分布的概率密度图像
sns.distplot(d, hist=False, color="r", kde_kws={"shade": False})
pl.show()
# 十个指数分布的随机变量和的概率密度图像
all_num = 100
# 只需要加n-1次
for i in range(all_num-1):
d += e.rvs(size=10000)
sns.distplot(d, hist=False, color="g", kde_kws={"shade": False})
print(norm.fit(d))
# 理论值
print(all_num, all_num ** 0.5)
pl.show()
n=10
(9.9733002779022275, 3.1794247621538174)
10 3.1622776601683795
n=100
(99.968901023434967, 9.9684825279139382)
100 10.0
(4)
t 分布,红色是标准正态分布,蓝色是t分布
from scipy import stats
from scipy.stats import expon
from scipy.stats import norm
import pylab as pl
from scipy.stats import t
import numpy as np
import seaborn as sns
# t 分布的颜色和维度关系
colors = {
'red': 1,
'black': 5,
'blue': 10,
'green': 20,
'yellow': 40,
}
nm = norm.rvs(size=1000)
for color, n in colors.items():
d = t.rvs(n, size=1000)
sns.distplot(d, color='red', hist=False, kde_kws={"shade": False})
sns.distplot(nm, color='blue', hist=False, kde_kws={"shade": False})
pl.show()
n=1
n=5
n=10
n=20
n=40
f分布
from scipy import stats
from scipy.stats import expon
from scipy.stats import norm
import pylab as pl
from scipy.stats import t
from scipy.stats import f
import numpy as np
import seaborn as sns
# t 分布的颜色和维度关系
lst = [
1, 3, 5, 7, 10, 15, 20
]
for i in lst:
rv = f(10, i)
d = rv.rvs(size=1000)
sns.distplot(d, color='red', hist=False, kde_kws={"shade": False})
pl.show()
f(10,1)
f(10,15)