113 lines
2.6 KiB
Julia
113 lines
2.6 KiB
Julia
|
#------------------------------------------------------------------------------
|
|||
|
"""
|
|||
|
OlsGMFn(Y,X)
|
|||
|
|
|||
|
LS of Y on X; for one dependent variable, Gauss-Markov assumptions
|
|||
|
|
|||
|
# Usage
|
|||
|
(b,u,Yhat,V,R2) = OlsGMFn(Y,X)
|
|||
|
|
|||
|
# Input
|
|||
|
- `Y::Vector`: T-vector, the dependent variable
|
|||
|
- `X::Matrix`: Txk matrix of regressors (including deterministic ones)
|
|||
|
|
|||
|
# Output
|
|||
|
- `b::Vector`: k-vector, regression coefficients
|
|||
|
- `u::Vector`: T-vector, residuals Y - yhat
|
|||
|
- `Yhat::Vector`: T-vector, fitted values X*b
|
|||
|
- `V::Matrix`: kxk matrix, covariance matrix of b
|
|||
|
- `R2::Number`: scalar, R2 value
|
|||
|
|
|||
|
"""
|
|||
|
function OlsGMFn(Y,X)
|
|||
|
|
|||
|
T = size(Y,1)
|
|||
|
|
|||
|
b = X\Y
|
|||
|
Yhat = X*b
|
|||
|
u = Y - Yhat
|
|||
|
|
|||
|
σ2 = var(u)
|
|||
|
V = inv(X'X)*σ2
|
|||
|
R2 = 1 - σ2/var(Y)
|
|||
|
|
|||
|
return b, u, Yhat, V, R2
|
|||
|
|
|||
|
end
|
|||
|
#------------------------------------------------------------------------------
|
|||
|
|
|||
|
|
|||
|
#------------------------------------------------------------------------------
|
|||
|
"""
|
|||
|
OlsNWFn(Y,X,m=0)
|
|||
|
|
|||
|
LS of Y on X; for one dependent variable, using Newey-West covariance matrix
|
|||
|
|
|||
|
# Usage
|
|||
|
(b,u,Yhat,V,R2) = OlsNWFn(Y,X,m)
|
|||
|
|
|||
|
# Input
|
|||
|
- `Y::Array`: Tx1, the dependent variable
|
|||
|
- `X::Array`: Txk matrix of regressors (including deterministic ones)
|
|||
|
- `m::Int`: scalar, bandwidth in Newey-West
|
|||
|
|
|||
|
# Output
|
|||
|
- `b::Array`: kx1, regression coefficients
|
|||
|
- `u::Array`: Tx1, residuals Y - Yhat
|
|||
|
- `Yhat::Vector`: Tx1, fitted values X*b
|
|||
|
- `V::Array`: kxk matrix, covariance matrix of b
|
|||
|
- `R2::Number`: scalar, R2 value
|
|||
|
|
|||
|
"""
|
|||
|
function OlsNWFn(Y,X,m=0)
|
|||
|
|
|||
|
T = size(Y,1)
|
|||
|
|
|||
|
b = X\Y
|
|||
|
Yhat = X*b
|
|||
|
u = Y - Yhat
|
|||
|
|
|||
|
S = CovNWFn(X.*u,m) #Newey-West covariance matrix
|
|||
|
Sxx = X'X
|
|||
|
V = inv(Sxx)'S*inv(Sxx) #covariance matrix of b
|
|||
|
R2 = 1 - var(u)/var(Y)
|
|||
|
|
|||
|
return b, u, Yhat, V, R2
|
|||
|
|
|||
|
end
|
|||
|
#------------------------------------------------------------------------------
|
|||
|
|
|||
|
|
|||
|
#------------------------------------------------------------------------------
|
|||
|
|
|||
|
"""
|
|||
|
CovNWFn(g0,m=0)
|
|||
|
|
|||
|
Calculates covariance matrix of sample average.
|
|||
|
|
|||
|
# Input
|
|||
|
- `g0::Matrix`: Txq Matrix of q moment conditions
|
|||
|
- `m:int`: scalar, number of lags to use
|
|||
|
|
|||
|
# Output
|
|||
|
- `S::Matrix`: qxq covariance matrix(average g0)
|
|||
|
|
|||
|
"""
|
|||
|
function CovNWFn(g0,m=0)
|
|||
|
|
|||
|
T = size(g0,1) #g0 is Txq
|
|||
|
m = min(m,T-1) #number of lags
|
|||
|
|
|||
|
g = g0 .- mean(g0,dims=1) #normalizing to zero means
|
|||
|
|
|||
|
S = g'g #(qxT)*(Txq)
|
|||
|
for s = 1:m
|
|||
|
Λ_s = g[s+1:T,:]'g[1:T-s,:] #same as Sum[g_t*g_{t-s}',t=s+1,T]
|
|||
|
S = S + (1 - s/(m+1))*(Λ_s + Λ_s')
|
|||
|
end
|
|||
|
|
|||
|
return S
|
|||
|
|
|||
|
end
|
|||
|
#------------------------------------------------------------------------------
|