Beispiel #1
0
void SBVAR::OLSReducedFormEstimate(TDenseMatrix &B, TDenseMatrix &Sigma)
{
  // Y = Data()
  // X = PredeterminedData()

  TDenseMatrix U, V;
  TDenseVector d;

  // X = U*D*V'
  SVD(U,d,V,PredeterminedData(),1);

  // Compute the generalize inverse of D.
  d.UniqueMemory();
  for (int i=d.dim-1; i > 0; i--)
    d.vector[i]=(d.vector[i] > d.vector[0]*MACHINE_EPSILON) ? 1.0/d.vector[i] : 0.0;
  d.vector[0]=(d.vector[0] > 0.0) ? 1.0/d.vector[0] : 0.0;

  // B = inv(X'*X)*X'*Y = V*D^(-2)*V'*V*D*U'*Y' = V*D^(-1)*U'*Y.
  TDenseMatrix Z=Transpose(U)*Data();
  B=Transpose(V*(DiagonalMatrix(d)*Z));

  // Sigma = (Y'*Y -  Y'*X*inv(X'*X)*X'*Y)/NumberObservatons() 
  //       = (Y'*Y - Y'*U*U*Y)/NumberObservations()
  Sigma=(1.0/(double)NumberObservations())*(YY - Transpose(Z)*Z);
}
Beispiel #2
0
 DiagonalMatrix operator-(const DiagonalMatrix &d) {
   return DiagonalMatrix(-1 * d.diag());
 }
Beispiel #3
0
 DiagonalMatrix DM::inner() const {
   return DiagonalMatrix(diagonal_elements_ * diagonal_elements_);
 }