如何有效地优化带宽

时间:2019-06-03 17:36:54

标签: r for-loop bandwidth

我想解决以下问题。我编写了一个代码,其中使用带宽构造了时间序列中某个时间点附近的数据以执行OLS。对于每个时间点,我们使用一个本地窗口,该窗口是内核加权的数据窗口,并对此进行OLS。在代码中,它看起来非常棘手,但是构造的矩阵是每个时间点周围的数据,并用于回归。但是,由于下一个目标是找到最佳带宽,因此最佳带宽是使SSR最小的带宽。因此,应该对h进行调整以使其做到这一点。由于我不知道执行此操作的任何有效方法,因此我陷入了这个问题。 有人知道找到使SSR最小的h值的有效方法吗?

PS:这段代码可能效率很低或看起来很复杂,对不起,我不知道该怎么办。

h = 0.01 #Bandwidth
T = 1045
y = runif(T-1, min=0, max=100)
X = runif(T-1, min=0, max=100)

K <- function(u, h) {
      0.75*(1-(u/(T*h))^2)}
k = 800
#Create empty arrays
Y_1 = matrix(data = 0, nrow = length((k-T*h):(k+T*h)), ncol = T-1-(2*T*h))
X_1 = matrix(data = 0, nrow = length((k-T*h):(k+T*h)), ncol = T-1-(2*T*h))
gamma_1 = matrix(data = NA, nrow = 2, ncol = T-1-(2*T*h))
e_1 = matrix(data = NA, nrow = T-1-(2*T*h), ncol = 1)
CCAPM_1 = matrix(data = NA, nrow = T-1-(2*T*h), ncol = 1)

##Fill the empty matrices such that the OLS regression can be performed
for (i in (T*h):(T-2-(T*h))){
Y_1[,(i-1-(T*h))] = (K(((i-T*h):(i+T*h))-i, h)^(.5))*y[((i-T*h)+1):((i+T*h)+1)]       
X_1[,(i+1-(T*h))] = (K(((i-T*h):(i+T*h))-i, h)^(.5))*X[((i-T*h)+1):((i+T*h)+1)]  
}

for (s in (1:(T-1-(2*T*h)))){                                        #Only this interval such that boundary regrions are avoided
  gamma_1[,s] = coefficients(lm(Y_1[,s] ~ X_1[,s]))                  #OLS regression within small time window
  CCAPM_1[s] = gamma_1[1,s] + gamma_1[2,s]*t(X[s+1])
  e_1[s] = y[s] - CCAPM_1[s]
  SSR_1 = sum(e_1^2, na.rm = TRUE)
}

我个人唯一想到的就是为h构造很多值,并检查SSR最小的h,但这会花费很多计算时间。

0 个答案:

没有答案