一、编写一次估计函数
import numpy as np
np.random.seed(1)
2. 编写makeY函数,生成用于模拟实验的Y
def makeY(rho, sigma2true, Ysize):
I = np.identity(Ysize)
W = I/rho
# 使用while语句,必须保证I - rho * W可逆
while np.linalg.det(I - rho * W) == 0:
# 生成一列epsilon
epsilon = np.random.normal(0, sigma2true, Ysize)
# 生成邻接矩阵
A = I
for i in range(0 , Ysize) :
for j in range(0 , Ysize) :
if i < j:
A[i, j] = np.random.binomial(1, rho)
A[j, i] = A[i, j]
# 标准化带权邻接矩阵A,得到W
W = A/sum(A)
# 求所生成网络的密度,衡量其稀疏性
Ydensity = sum(sum(A)) / (Ysize * (Ysize - 1))
# 利用输入参数和随机数生成样本Y
Y = np.matmul(np.linalg.inv(I - rho * W), epsilon)
return [Y, W, Ydensity]
3. 编写主函数SAR_MLE_newton
def SAR_MLE_newton (rho, sigma2true, Ysize):
for i in range(1,1000):
Y = makeY(rho, sigma2true, Ysize)[0]
W = makeY(rho, sigma2true, Ysize)[1]
Ydensity = makeY(rho, sigma2true, Ysize)[