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 = {}
if len(name_x) != k*T and len(name_x) != k: raise Exception("Names of columns in X must have exactly either k or k*t elements.") if len(name_x) > k: name_bigx = [] for i in range(k): name_bigx.append(''.join([j for j in name_x[i*T] if not j.isdigit()])) name_x = name_bigx return bigy, bigx, name_y, name_x ols = OLS.BaseOLS(y=y, x=x) x, y, n, k, xtx = ols.x, ols.y, ols.n, ols.k, ols.xtx N = w.n T = y.shape[0]//N moments, trace_w2 = _moments_kkp(w.sparse, ols.u, 0) lambda1, sig_v = optim_moments(moments, all_par=True) Tw = SP.kron(SP.identity(T),w.sparse) ub = Tw.dot(ols.u) ulu = ols.u - lambda1*ub Q1 = SP.kron(np.ones((T,T))/T,SP.identity(N)) sig_1 = float(np.dot(ulu.T,Q1.dot(ulu))/N) #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]))