下面我使用 nympy 生成的绘图来比较帕累托分布的经验矩和分析矩(我使用以下链接获取均值、方差、偏度和过度峰度的公式,https://en.wikipedia.org/wiki/Pareto_distribution)。获得的均值和方差结果相似,但偏度和峰度的结果却大不相同。我究竟做错了什么?
事先谢谢你
import numpy as np
import pandas as pd
from scipy.stats import skew
from scipy.stats import kurtosis
from prettytable import PrettyTable
x_m = [1, 2, 3, 4]
alpha = [5, 6, 7, 8]
#drawing samples from distribution
for a, x in zip(alpha, x_m):
print (a, x)
data = (np.random.default_rng().pareto(a, 10000000)+1) * x
mean = np.mean(data)
var = np.var(data)
skew = skew(data)
kurt = kurtosis(data)
#Analytical estimation
for a, x in zip(alpha, x_m):
a_mean = (a*x)/(a-1)
a_var = (a*x**2)/((a-1)**2*(a-2))
a_skew = (2*(1+a)/(a-3))*(np.sqrt(a-2/a))
a_kurt = (6*(a**3+a**2-6*a-2))/(a*(a-3)*(a-4))
#Table
header = ['Moments', 'Simulated', 'Analytical']
Moments = ['Mean', 'Variance', 'Skewness', 'Excess Kurtosis']
Simulated = [round(mean,4), round(var,4), round(skew,4), round(kurt,4)]
Analytical = [round(a_mean,4), round(a_var,4), round(a_skew,4), round(a_kurt,4)]
table = PrettyTable()
table.add_column(header[0], Moments)
table.add_column(header[1], Simulated)
table.add_column(header[2], Analytical)
print(table)