幂律拟合曲线与数据点不重合的原因及可信度疑问
幂律拟合曲线偏离数据点的原因与结果可信度分析
问题背景
我尝试使用Alstott等人开发的powerlaw包对网络度分布数据进行幂律拟合,代码如下:
import networkx as nx import powerlaw import matplotlib.pyplot as plt g = nx.powerlaw_cluster_graph(1000, 25, 0.9) degrees = list(dict(g.degree).values()) fit = powerlaw.Fit(degrees, discrete=True) fig, ax = plt.subplots(figsize = (10,10)) powerlaw.plot_pdf(degrees, color='r', marker = 'o', linestyle='', ax=ax) #plotting binned data points fit.power_law.plot_pdf(color = 'darkblue', ax=ax) #plotting fitted curve ax.set_xlabel('k', fontsize = 16) ax.set_ylabel('P(k)', fontsize = 16) ax.set_title('Degree Distribution of a Network', fontsize = 20) ax.tick_params(labelsize = 12) plt.text(0.05, 0.6, f'γ = {round(fit.power_law.alpha, 2)}', transform=plt.gca().transAxes, fontsize=20, color='darkblue') plt.text(0.05, 0.55, '$x_{min}$ = ' + f'{fit.power_law.xmin}', transform=plt.gca().transAxes, fontsize=20, color='darkblue') plt.text(0.05, 0.50, f'KS Distance: {round(fit.power_law.D, 2)}', transform=plt.gca().transAxes, fontsize=20, color='darkblue')
结果显示蓝色拟合曲线与红色分箱数据点距离较远,Kolmogorov-Smirnov(KS)距离较低,且fit.noise_flag为false(拟合有效),但拟合曲线偏离所有数据点,请问该情况的原因是什么?拟合结果是否可信?
原因分析
- 生成网络的分布特性不符:你使用的
nx.powerlaw_cluster_graph生成的是Holme-Kim网络,属于广义聚类截断幂律网络,并非严格的无标度幂律分布。当参数p=0.9时,网络的聚类倾向极强,度分布会出现明显的截断特征,纯幂律模型无法匹配这类数据的整体分布。 - xmin的自动选择逻辑:powerlaw包的
Fit函数会自动筛选xmin,仅对x >= xmin的数据段进行幂律拟合。如果xmin取值过高,拟合曲线仅对应数据的尾部区间,而你绘制的是全范围的分箱数据点,视觉上自然会出现曲线与大部分数据偏离的情况。 - 绘图与拟合的范围差异:
powerlaw.plot_pdf绘制的是全量数据的分箱概率密度,而拟合曲线是基于xmin之后的局部数据生成的,两者覆盖的数据范围不一致,导致视觉上的偏离感。
拟合结果可信度判断
这个拟合结果仅对xmin之后的尾部数据段有参考价值,对整个度分布而言不可信:
- 原网络的度分布是截断幂律,而非纯幂律,用纯幂律模型拟合本身就不符合数据的真实分布特性;
- 低KS距离仅说明拟合在
xmin限定的局部数据段上符合幂律,但无法代表整个网络的度分布特征。
内容的提问来源于stack exchange,提问作者Lifeisafartinthewind
相关产品推荐
相关产品推荐

