0

我正在尝试根据 Lesmond 等计算债券流动性指标 LOT。al (1999) 和 Chen 等人。(2007 年)。因此,我需要最大化 的对数似然函数L(alpha_1_j,alpha_2_j,beta_1_j,beta_2_j,σ_j|R_j,t,∆Index)。到目前为止,我尝试使用 Python 中的 SciPy 最小化负对数似然函数来实现以下代码:

import numpy as np 
from scipy.optimize import minimize
from scipy.stats import norm
​
def negative_loglikehood(params,x):
    alpha_1, alpha_2, beta_1, beta_2, sigma = params[0], params[1], params[2],params[3],params[4] # inputs are guesses at our parameters
​
    rjt = x[:,0]
    djt = x[:,1]
    index = x[:,2]
    rft = x[:,3]
    
    term_0 = np.sum(np.log(1/(2*np.pi*sigma**2)**0.5))
​
    term_1 = np.sum( (1/ (2*sigma**2) ) * (np.sum(rjt[rjt < 0] +alpha_1-beta_1*djt[rjt < 0]*rft[rjt < 0]) - beta_2*djt[rjt < 0]*index[rjt < 0] )**2)
    
    term_2 = np.sum(np.log(1/(2*np.pi*sigma**2)**0.5))
    
    term_3 = np.sum( (1/ (2*sigma**2) ) * (np.sum(rjt[rjt > 0]+alpha_2-beta_1*djt[rjt > 0]*rft[rjt > 0]) - beta_2 *djt[rjt > 0]*index[rjt > 0] )**2)
    
    term_4 = np.sum(
              np.log(
                norm.cdf( (alpha_2 - beta_1*djt[rjt == 0]*rft[rjt == 0] - beta_2*djt[rjt == 0]*index[rjt == 0])/sigma, loc=0, scale=1)
              - norm.cdf( (alpha_1 - beta_1*djt[rjt == 0]*rft[rjt == 0] - beta_2*djt[rjt == 0]*index[rjt == 0])/sigma, loc=0, scale=1)
              ))
 
       
    LL1 = (term_0 - term_1 + term_2 - term_3 + term_4)
    return(-LL1)
​
​
# random data
x = np.random.rand(200,4)
​
iterations = 10
params = []
# create random guess and log results of minimize
for i in range(iterations):
    guess = np.random.rand(5,1)
    results = minimize(negative_loglikehood, guess,args =(x), method = 'Nelder-Mead', options={'disp': True,'maxiter': 1000})
    params.append(results.x)
​
# show that results strongly depend on initial guess
for i in range(10):
    print(" ")
    print("Random initial guess {} results in:".format(i))
    print("alpha_1 = {},alpha_2 = {}, beta_1={}, beta_2 = {},sigma = {}".format(params[i][0],params[i][1],params[i][2],params[i][3],params[i][4]))

但是,参数的结果很大程度上取决于优化之前设置的初始猜测:

Random initial guess 0 results in :
alpha_1 = -0.012500397272436473,alpha_2 = 0.010773973191702719, beta_1=-0.3233162968488953, beta_2 = -1.2046570526675584e-11,sigma = 6.752803989738158e-12
Random initial guess 1 results in :
alpha_1 = -2.343278804165103,alpha_2 = 2.0409026976734186, beta_1=-53.42300434083533, beta_2 = -1.1744114332074654e-08,sigma = 1.81719388437202e-08
Random initial guess 2 results in :
alpha_1 = 0.8595939061100132,alpha_2 = 0.16792924749865346, beta_1=0.44567972668992983, beta_2 = 0.7797633424269446,sigma = 0.6033486987256798
Random initial guess 3 results in :
alpha_1 = 0.5198960282931168,alpha_2 = 0.5923049064785911, beta_1=0.2906500746368402, beta_2 = 0.3159797859829945,sigma = 0.01579136758923083
Random initial guess 4 results in :
alpha_1 = 0.9537346594415715,alpha_2 = 0.5816004583589225, beta_1=0.765207633925507, beta_2 = 0.8177672559035956,sigma = 0.7118904754066926
Random initial guess 5 results in :
alpha_1 = -0.21066970395425055,alpha_2 = 0.18338978020271737, beta_1=-4.838568078371565, beta_2 = 0.33412894711380825,sigma = 0.09029265136271906
Random initial guess 6 results in :
alpha_1 = 0.7811426748368301,alpha_2 = 0.7189572276701269, beta_1=0.5544717009933129, beta_2 = 0.7140008939762321,sigma = 0.24136702681725497
Random initial guess 7 results in :
alpha_1 = -0.013561573045900291,alpha_2 = 0.011698266729537214, beta_1=-0.34749195523265997, beta_2 = -1.545294889778289e-10,sigma = 8.216213853207109e-11
Random initial guess 8 results in :
alpha_1 = -0.2926039930608614,alpha_2 = 0.2551836413237114, beta_1=-6.726530710699446, beta_2 = 17.4892306985573,sigma = 5.470321985230834
Random initial guess 9 results in :
alpha_1 = 0.9146284979994329,alpha_2 = 0.7440761389285213, beta_1=0.0399224271804679, beta_2 = 0.7270544555422765,sigma = 0.8113952734459978

此外,对于真实数据,我得到不一致的估计,方差很大,这取决于初始猜测值。如何找到参数的全局优化估计?

4

0 回答 0