Note:(Grouped) Network Autoregression Model (2)

上一篇Note【(Grouped) Network Autoregression Model (1)】学习了GNAR模型的基本设定和参数估计方法,这一篇Note将补充部分内容,并且介绍作者自己一些测试和不成熟想法,可能存在错误!!

1 Selection of Group Number

参考 Zhu et al. (2025) 的方法,作者提出了一个基于组信息准则(group information criterion,GIC)的选择方法:

其中

根据作者给出的范例,我们可以设定tuning parameter为:

其中 nodal out-degrees第90百分位数,可以根据这一准则选择最合适的 组数目。

例如上图,当 时,GIC值最小,因此选择 作为最优组数。

2 Time Variant GNAR

这一部分完全基于我自己的一些数值模拟,尝试性的调整,无严格推证

我们进一步假设网络结构是时间变化的,或者(和)控制变量也是时间变化的,模型变为:

在新的设定下,首先,原先的K-means分组方法不再适用,因为网络结构和控制变量都是时间变化的,因此无法通过简单的去均值来消除固定效应,需要引入改进的K-means初始化

首先,在初始参数估计方面,同样可通过对每个节点分别做最小二乘回归获得,但此时不再使用去均值的方式,而是直接使用原始数据进行回归,同时也需要纳入控制变量的完全系数!! 令 ,其中 。 则有 其中 为回归参数。

如何理解上述操作?

新设定下,原先的所谓固定效应被细化成了控制变量的回归系数,因此,kmeans的聚类也从的空间转变为控制变量的回归系数空间。

新设定的好处如下: - 由于控制变量是时间变化的,在回归中,其实际有意义的样本数从增加到了,这使得模型能够更好地捕捉到时间变化带来的影响 - 由于网络效应同样随时间变化,模型能够更好地捕捉到网络结构的变化对节点行为的影响,对的估计也更为准确

使用随机系数进行数值模拟,结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
sim = simulator.GNAR_simulator(N=100, T=300, G=3, network_time_varying=True, CV_time_varying=True)
beta = np.array([[0.15,0.2,-0.1],[0.1,0.3,-0.2],[0.15,0.1,0.3]]).T
v = np.array([0.2,0.4,0.6])
#beta, v, gamma, group = sim.generate_para(beta=beta, v=v)
beta, v, gamma, group = sim.generate_para()
Y, CV, network = sim.generate_data()
est = estimator.GNAR_estimator(Y, CV, network,G=3)
group_est_0 = est.k_means_clustering(method='networkeffect',time_varying=True)
group_est, beta_est = est.update_all_para()
print(beta)
print(v)
print(beta_est)
'''
100%|██████████| 100/100 [00:03<00:00, 26.68it/s]
Epoch 0: 0 nodes updated
Convergence reached
[[0.23457801 0.22121888 0.04764032]
[0.33318105 0.02456799 0.37209593]
[0.04396837 0.04075084 0.276216 ]]
[0.53957165 0.7045408 0.42471186]
[[ 0.27675469 0.37250482 0.04731419]
[ 0.04031485 0.02641971 0.22076745]
[ 0.04350052 0.33138305 0.23508159]
[ 0.42439437 0.70449122 0.53957243]
[-0.37458463 0.7889177 -0.28970793]
[-0.49728413 -0.64000801 0.31258883]
[ 0.24437562 -0.10160471 0.3148274 ]
[ 0.02428095 -0.07410229 -0.07048587]]

此时,无论初始通过网络效应还是控制变量系数(固定效应)进行k-means聚类,模型都能收敛到真实参数,且分组效果非常良好。

3 Normal Regression with Network Effect

上述模型均采用的是自回归的形式,对于非自回归形式的模型,能否采用相似的方法进行估计?

例如,在Zacchia (2020) ,马宇贝等(2025)的论文中,使用了一个基于网络效应的回归模型:

上述模型的中网络效应没有考虑节点的异质性,即对应着非自回归形式的NAR模型,对于GNAR模型,如果不考虑自回归形式,则类似于上述模型增加节点网络效应的异质性:

模型的估计方法不变,仍然使用K-means进行初始分组,使用最小二乘回归进行参数估计,再根据损失函数进行调整分组,直到收敛为止。

同样使用随机系数进行数值模拟,结果仍然是收敛的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
sim = simulator.GNAR_simulator(N=100, T=300, G=3, network_time_varying=True, CV_time_varying=True, autoregression=False)
beta, v, gamma, group = sim.generate_para()
Y, X, CV, network = sim.generate_data()
est = estimator.GNAR_estimator(Y, CV, network,G=3, X=X)
group_est_0 = est.k_means_clustering(method='fixedeffect',time_varying=True)
group_est, beta_est = est.update_all_para()
print(beta)
print(v)
print(beta_est)
'''
100%|██████████| 100/100 [00:03<00:00, 26.12it/s]
Epoch 0: 0 nodes updated
[[0.25512572 0.28429104 0.08813121]
[0.25222439 0.30741513 0.12913207]
[0.58207591 0.40368118 0.06614511]]
[0.34115232 0.40497262 0.76074739]
[[ 0.16532267 0.17817329 -0.09255621]
[ 0.43814787 0.35591896 0.28881225]
[ 0.5946116 0.20994557 0.39476289]
[ 0.72721084 0.39495027 0.32545707]
[-0.44433633 -0.07401277 -0.80522431]
[ 0.17479726 0.53849551 0.17512806]
[ 0.64179798 0.05402368 0.77177667]
[ 0.61620139 -0.23846542 -0.08431044]]

上一篇Note:(Grouped) Network Autoregression Model (1)

上述测试所用的完整代码附于:https://github.com/Ardentem/GNAR_python,已经封装成了一个完整的包,可以直接进行计算和输出回归结果,具体使用方法请参考该仓库中的文档。