最近在学习数理统计时对T分布与标准正态分布的图形变化以及它们的峰度变化有所困惑。现用Python可视化它们的图像。
一、图像
根据以下代码进行作图:
import numpy as np
from scipy.stats import norm
from scipy.stats import t
import matplotlib.pyplot as plt
x = np.linspace( -4, 4, 150)
plt.plot(x, t.pdf(x,1), label='df=1')
plt.plot(x, t.pdf(x,4), label='df=4')
plt.plot(x, t.pdf(x,8), label = 'df=8')
plt.plot(x, t.pdf(x,1000), label = 'df=1000')
# loc:期望 scale:标准差
plt.plot( x[::5], norm.pdf(x[::5],loc=0,scale=1), 'o',label='normal')
plt.legend()
plt.grid(True)
plt.show()
运行结果:
从上图中可以看出:
-
在中心区域(即x=0处)T分布图像在标准正态分布的下方;
-
T分布的尾部比标准正态分布尾部更厚,意味着对于分位数 α 有|tα|>|Zα|;
-
T分布的自由度 df 越大,曲线中间越高;自由度越小,曲线越平坦;
-
当 n→+∞ 时,T分布与标准正态分布重合。
二、偏度和峰度
执行下列代码:
import pandas as pd
from scipy.stats import norm
from scipy.stats import t
s1 = pd.Series(norm.rvs(loc=0, scale=1, size=10000000))
print('标准正态分布的偏度:', s1.skew()) # 偏度
print('标准正态分布的峰度:', s1.kurt()) # 峰度
s2 = pd.Series(t.rvs(df=1, size=10000000))
print('自由度为1的t分布的偏度:', s2.skew()) # 偏度
print('自由度为1的t分布的峰度:', s2.kurt()) # 峰度
s3 = pd.Series(t.rvs(df=4, size=10000000))
print('自由度为4的t分布的偏度:', s3.skew()) # 偏度
print('自由度为4的t分布的峰度:', s3.kurt()) # 峰度
s4 = pd.Series(t.rvs(df=8, size=10000000))
print('自由度为8的t分布的偏度:', s4.skew()) # 偏度
print('自由度为8的t分布的峰度:', s4.kurt()) # 峰度
s5 = pd.Series(t.rvs(df=1000, size=10000000))
print('自由度为1000的t分布的偏度:', s5.skew()) # 偏度
print('自由度为1000的t分布的峰度:', s5.kurt()) # 峰度
运行结果:
标准正态分布的偏度: -0.00025376272629468855
标准正态分布的峰度: 0.002797179141346806
自由度为1的t分布的偏度: -822.0059763402147
自由度为1的t分布的峰度: 2662880.507418152
自由度为4的t分布的偏度: 0.07261539534446709
自由度为4的t分布的峰度: 23.318943321746254
自由度为8的t分布的偏度: -0.000441936469050757
自由度为8的t分布的峰度: 1.5325883782814964
自由度为1000的t分布的偏度: 0.00033678878697355417
自由度为1000的t分布的峰度: 0.003821891909086883
从上面结果可以看出(当自由度>2时):
-
T分布峰度大于0;
-
T分布的自由度 df 越大,其峰度越小,最终趋于(标准)正态分布的峰度0;
-
T分布的偏度为0。
三、小结
对于自由度>2的T分布而言,自由度越小,曲线越平坦,意味着尾部更厚,而此时峰度越大。
关于峰度与偏度的问题可以参照:https://blog.csdn.net/m0_56676945/article/details/129287096