def __init__(self, y, x, w): #1a. OLS --> \tilde{betas} ols = OLS.BaseOLS(y=y, x=x) self.n, self.k = ols.x.shape self.x = ols.x self.y = ols.y #1b. GMM --> \tilde{\lambda1} moments = _momentsGM_Error(w, ols.u) lambda1 = optim_moments(moments) #2a. OLS -->\hat{betas} xs = get_spFilter(w, lambda1, self.x) ys = get_spFilter(w, lambda1, self.y) ols2 = OLS.BaseOLS(y=ys, x=xs) #Output self.predy = spdot(self.x, ols2.betas) self.u = y - self.predy self.betas = np.vstack((ols2.betas, np.array([[lambda1]]))) self.sig2 = ols2.sig2n self.e_filtered = self.u - lambda1*w*self.u self.vm = self.sig2 * ols2.xtxi se_betas = np.sqrt(self.vm.diagonal()) self._cache = {}
def __init__(self, y, x, yend, q, w): #1a. TSLS --> \tilde{betas} tsls = TSLS.BaseTSLS(y=y, x=x, yend=yend, q=q) self.n, self.k = tsls.z.shape self.x = tsls.x self.y = tsls.y self.yend, self.z = tsls.yend, tsls.z #1b. GMM --> \tilde{\lambda1} moments = _momentsGM_Error(w, tsls.u) lambda1 = optim_moments(moments) #2a. 2SLS -->\hat{betas} xs = get_spFilter(w, lambda1, self.x) ys = get_spFilter(w, lambda1, self.y) yend_s = get_spFilter(w, lambda1, self.yend) tsls2 = TSLS.BaseTSLS(ys, xs, yend_s, h=tsls.h) #Output self.betas = np.vstack((tsls2.betas, np.array([[lambda1]]))) self.predy = spdot(tsls.z, tsls2.betas) self.u = y - self.predy self.sig2 = float(np.dot(tsls2.u.T,tsls2.u)) / self.n self.e_filtered = self.u - lambda1*w*self.u self.vm = self.sig2 * tsls2.varb self._cache = {}
def __init__(self, y, x, yend, q, w): # 1a. TSLS --> \tilde{betas} tsls = TSLS.BaseTSLS(y=y, x=x, yend=yend, q=q) self.n, self.k = tsls.z.shape self.x = tsls.x self.y = tsls.y self.yend, self.z = tsls.yend, tsls.z # 1b. GMM --> \tilde{\lambda1} moments = _momentsGM_Error(w, tsls.u) lambda1 = optim_moments(moments) # 2a. 2SLS -->\hat{betas} xs = get_spFilter(w, lambda1, self.x) ys = get_spFilter(w, lambda1, self.y) yend_s = get_spFilter(w, lambda1, self.yend) tsls2 = TSLS.BaseTSLS(ys, xs, yend_s, h=tsls.h) # Output self.betas = np.vstack((tsls2.betas, np.array([[lambda1]]))) self.predy = spdot(tsls.z, tsls2.betas) self.u = y - self.predy self.sig2 = float(np.dot(tsls2.u.T, tsls2.u)) / self.n self.e_filtered = self.u - lambda1 * w * self.u self.vm = self.sig2 * tsls2.varb self._cache = {}
def __init__(self, y, x, w): # 1a. OLS --> \tilde{betas} ols = OLS.BaseOLS(y=y, x=x) self.n, self.k = ols.x.shape self.x = ols.x self.y = ols.y # 1b. GMM --> \tilde{\lambda1} moments = _momentsGM_Error(w, ols.u) lambda1 = optim_moments(moments) # 2a. OLS -->\hat{betas} xs = get_spFilter(w, lambda1, self.x) ys = get_spFilter(w, lambda1, self.y) ols2 = OLS.BaseOLS(y=ys, x=xs) # Output self.predy = spdot(self.x, ols2.betas) self.u = y - self.predy self.betas = np.vstack((ols2.betas, np.array([[lambda1]]))) self.sig2 = ols2.sig2n self.e_filtered = self.u - lambda1 * w * self.u self.vm = self.sig2 * ols2.xtxi se_betas = np.sqrt(self.vm.diagonal()) self._cache = {}
#print('initial_lamb_sig:',lambda1,sig_v,sig_1) #print('theta:', 1 - np.sqrt(sig_v)/ np.sqrt(sig_1)) Xi_a = SP.diags([(sig_v*sig_v)/(T-1),sig_1*sig_1]) if full_weights: Tau = _get_Tau(w.sparse,trace_w2) else: Tau = SP.identity(3) Xi = SP.kron(Xi_a,Tau) moments_b,_ = _moments_kkp(w.sparse, ols.u, 1,trace_w2) G = np.vstack((np.hstack((moments[0],np.zeros((3,1)))),moments_b[0])) moments6 = [G,np.vstack((moments[1],moments_b[1]))] lambda2,sig_vb,sig_1b = optim_moments(moments6, vcX=Xi.toarray(), all_par=True, start=[lambda1,sig_v,sig_1]) # 2a. reg -->\hat{betas} theta = 1 - np.sqrt(sig_vb)/np.sqrt(sig_1b) #print('theta:', theta) gls_w = SP.identity(N*T) - theta*Q1 #With omega xs = gls_w.dot(get_spFilter(w, lambda2, x)) ys = gls_w.dot(get_spFilter(w, lambda2, y)) ols_s = OLS.BaseOLS(y=ys, x=xs) self.predy = spdot(self.x, ols_s.betas) self.u = self.y - self.predy self.vm = ols_s.vm #Check self.betas = np.vstack((ols_s.betas, lambda2, sig_vb, sig_1b)) self.e_filtered = self.u - lambda2 * SP.kron(SP.identity(T), w.sparse).dot(self.u) self.t, self.n = T, N self._cache = {}