Setup initial file structure
This commit is contained in:
69
Modules/ado/plus/c/cfa1_lf.ado
Normal file
69
Modules/ado/plus/c/cfa1_lf.ado
Normal file
@ -0,0 +1,69 @@
|
||||
*! Log likelihood for cfa1: linear form; v.2.1
|
||||
program define cfa1_lf
|
||||
|
||||
args lnf $CFA1theta
|
||||
* $CFA1theta contains all the names needed:
|
||||
* $CFA1theta == l_1 ... l_q v_1 ... v_q m_1 ... m_q phi
|
||||
|
||||
gettoken lnf allthenames : 0
|
||||
|
||||
tempvar lnl
|
||||
qui g double `lnl' = .
|
||||
|
||||
nobreak mata: CFA1_NormalLKHDr( "`allthenames'", "$CFA1vars", "`lnl'")
|
||||
|
||||
qui replace `lnf' = `lnl'
|
||||
|
||||
end
|
||||
|
||||
*! NormalLKHDr: normal likelihood with normal deviates in variables
|
||||
*! v.2.1 Stas Kolenikov skolenik@gmail.com
|
||||
cap mata: mata drop CFA1_NormalLKHDr()
|
||||
mata:
|
||||
void CFA1_NormalLKHDr(
|
||||
string parnames, // the parameter names
|
||||
string varnames, // the variables
|
||||
string loglkhd // where the stuff is to be returned
|
||||
) {
|
||||
|
||||
// declarations
|
||||
real matrix data, lnl, parms // views of the data
|
||||
real matrix lambda, means, vars, phi // parameters
|
||||
real matrix Sigma, WorkSigma, InvWorkSigma, SS // the covariance matrices and temp matrix
|
||||
real scalar p, n // dimension, no. obs
|
||||
|
||||
// get the data in
|
||||
st_view(data=., ., tokens(varnames) )
|
||||
st_view(lnl=., ., tokens(loglkhd) )
|
||||
st_view(parms=., 1, tokens(parnames) )
|
||||
|
||||
n=rows(data)
|
||||
p=cols(data)
|
||||
|
||||
// get the parameters in
|
||||
lambda= parms[1,1..p]
|
||||
vars = parms[1,p+1..2*p]
|
||||
means = parms[1,2*p+1..3*p]
|
||||
phi = parms[1,3*p+1]
|
||||
|
||||
Sigma = lambda'*lambda*phi + diag(vars)
|
||||
|
||||
SS = cholesky(Sigma)
|
||||
InvWorkSigma = solvelower(SS,I(rows(SS)))
|
||||
InvWorkSigma = solveupper(SS',InvWorkSigma)
|
||||
ldetWS = 2*ln(dettriangular(SS))
|
||||
|
||||
for( i=1; i<=n; i++ ) {
|
||||
lnl[i,1] = -.5*(data[i,.]-means)*InvWorkSigma*(data[i,.]-means)' - .5*ldetWS - .5*p*ln(2*pi())
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
end
|
||||
|
||||
|
||||
exit
|
||||
|
||||
History:
|
||||
v.2.0 March 10, 2006 -- re-written for Stata 9 and Mata
|
||||
v.2.1 March 10, 2006 -- everything is moved to Mata
|
Reference in New Issue
Block a user