1、分布是概率密度函数还是互补累积分布


2、如何辨别幂律分布还是指数分布



import numpy as np
import matplotlib.pyplot as plt
# 生成幂律分布数据
power_data = np.random.pareto(2, 1000) + 1 # α=2
# 生成指数分布数据
exp_data = np.random.exponential(scale=1, size=1000) # λ=1
# 画双对数观察
def plot_loglog(data, title):
counts, bins = np.histogram(data, bins=50)
pdf = counts / (sum(counts) * np.diff(bins)) # 计算概率密度
plt.loglog(bins[:-1], pdf, 'o') # 双对数图
plt.title(title)
plt.xlabel('Value')
plt.ylabel('Probability Density')
plt.figure(figsize=(12, 5))
plt.subplot(121)
plot_loglog(power_data, 'Power Law Distribution')
plt.subplot(122)
plot_loglog(exp_data, 'Exponential Distribution')
plt.show()
from powerlaw import Fit
# 检验幂律分布
fit = Fit(power_data)
print(f"Estimated alpha: {fit.alpha}") # 是估计的幂律指数
print(f"Log-likelihood: {fit.power_law.loglikelihood}")
# 绘制拟合结果
fig = fit.plot_pdf(color='b', label='Empirical Data')
fit.power_law.plot_pdf(color='r', linestyle='--', label='Power Law Fit')
plt.legend()
plt.show()
from scipy.stats import expon
# 拟合指数分布参数
lambda_hat = 1 / np.mean(exp_data) # λ的估计值
ks_stat, p_value = expon.fit(exp_data) # 如果P值较大(如 >0.05),则不能拒绝数据符合指数分布的假设。
print(f"Estimated lambda: {lambda_hat}")
print(f"KS Statistic: {ks_stat}, P-value: {p_value}")
# 绘制经验数据与拟合结果
counts, bins = np.histogram(exp_data, bins=50, density=True)
plt.hist(exp_data, bins=50, density=True, alpha=0.5, label='Empirical Data')
plt.plot(bins, expon.pdf(bins, scale=1/lambda_hat), 'r--', label='Exponential Fit')
plt.legend()
plt.xlabel('Value')
plt.ylabel('Probability Density')
plt.title('Exponential Fit')
plt.show()
# 评估两种你和效果
from scipy.stats import expon
# 幂律拟合
fit_power = Fit(power_data)
log_likelihood_power = fit_power.power_law.loglikelihood
# 指数拟合
lambda_hat = 1 / np.mean(exp_data)
log_likelihood_exp = sum(np.log(expon.pdf(exp_data, scale=lambda_hat)))
# 比较似然比
likelihood_ratio = log_likelihood_power - log_likelihood_exp
print(f"Likelihood Ratio: {likelihood_ratio}")
3、特殊的幂律分布
https://www.jianshu.com/p/b7e06c4839b2
截断幂律、尺度不变性、胖尾 长尾