Changeset d218846 in tol


Ignore:
Timestamp:
Jan 20, 2014, 11:26:47 AM (13 years ago)
Author:
Víctor de Buen <vdebuen@…>
Branches:
1941-docker-image-to-test, devel, master
Children:
f18965c
Parents:
0e51c9d
Message:

Enhandling statistical diagnostics

git-svn-id: ​https://www.tol-project.org/svn/tolp/trunk@6134 be4846ae-f051-483a-831f-b64e7d08527f

Location:
tol
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • tol/bmath/bstat/stat.cpp

    r0e51c9d rd218846  
    10481048    PartAutoCor(q,p);
    10491049}
    1050 
    10511050
    10521051//--------------------------------------------------------------------
    … …  
    15161515  const BArray<BDat>& mean,
    15171516  const BArray<BDat>& stdErr,
    1518   int dataLength)
     1517  int freeDeg)
    15191518//--------------------------------------------------------------------
    15201519{
    … …  
    15221521  if(!numParam) { return(false); }
    15231522
    1524   BTStudentDist T(dataLength-numParam);
     1523  BTStudentDist T(freeDeg);
    15251524  BInt i;
    15261525  statValue=BDat::PosInf();
  • tol/btol/real_type/datgrast.cpp

    r0e51c9d rd218846  
    3232#include <tol/tol_bstat.h>
    3333#include <tol/tol_btest.h>
     34#include <tol/tol_btsrgra.h>
     35#include <tol/tol_bvmatgra.h>
    3436
    3537//--------------------------------------------------------------------
    … …  
    10461048}
    10471049
     1050//--------------------------------------------------------------------
     1051  bool fillVectorType(
     1052    const BText& caller,
     1053    const BText& argument,
     1054    BArray<BDat>& vec,
     1055    const BSyntaxObject* obj)
     1056//--------------------------------------------------------------------
     1057{
     1058  BGrammarId gid = obj->Grammar()->Gid();
     1059  switch(gid)
     1060  {
     1061    case BGI_Serie :
     1062    {
     1063      BUserTimeSerie* serie = (BUserTimeSerie*)obj;
     1064      BData data;
     1065      serie->GetData(data);
     1066      vec.Copy(data.Size(), data.Buffer());
     1067      return(true);
     1068    };
     1069    case BGI_Matrix :
     1070    {
     1071      BUserMat* mat  = (BUserMat*)obj;
     1072      vec = mat->Contens().Data();
     1073      return(true);
     1074    };
     1075    case BGI_VMatrix :
     1076    {
     1077      BUserVMat* vmat  = (BUserVMat*)obj;
     1078      BMatrix<BDat> mat;
     1079      vmat->Contens().DMat2dense(*((BMatrix<double>*)(&mat)));
     1080      vec = mat.Data();
     1081      return(true);
     1082    };
     1083    case BGI_Set :
     1084    {
     1085      BUserSet* uset  = (BUserSet*)obj;
     1086      BSet& set = uset->Contens();
     1087      if(!CheckRealElement(caller,set)) { return(false); }
     1088      vec.ReallocBuffer(set.Card());
     1089      for(BInt n=0; n<vec.Size(); n++)
     1090      {
     1091        vec[n] = Dat(set[n+1]);
     1092      }
     1093      return(true);
     1094    } 
     1095    default :
     1096    {
     1097      Error(BText("[")+caller+"] Not allowed type "+obj->Grammar()->Name()+
     1098      " for vectorial argument "<<argument+"\n"
     1099      "Allowed vectorial types are: Set, Matrix, VMatrix, Serie");
     1100      return false;
     1101    }
     1102  };
     1103};
     1104
    10481105
    10491106//--------------------------------------------------------------------
    10501107  DeclareContensClass(BSet, BSetTemporary, BSetHannShapiroWTest);
    1051   DefExtOpr(1, BSetHannShapiroWTest, "HannShapiroWTest", 2, 2, "Set Real",
    1052   I2("(Set set, Real alfa)",
    1053      "(Set conjunto, Real alfa)"),
     1108  DefExtOpr(1, BSetHannShapiroWTest, "HannShapiroWTest", 2, 2,
     1109    "{Set|Matrix|VMatrix|Serie} Real",
     1110    "({Set|Matrix|VMatrix|Serie} sample, Real alfa)",
    10541111  I2(".",
    10551112     "Contruye el test de normalidad de Hann-Shapiro para una muestra con el "
    … …  
    10661123//--------------------------------------------------------------------
    10671124{
    1068   BSet& set  = Set(Arg(1));
    1069   if(!CheckRealElement("HannShapiroWTest",set)) { return; }
     1125  BArray<BDat> vec;
     1126  if(!fillVectorType("HannShapiroWTest","sample",vec,Arg(1))) { return; }
    10701127  BDat  alfa = Dat(Arg(2));
    1071   BArray<BDat> vec;
    1072   vec.ReallocBuffer(set.Card());
    1073   for(BInt n=0; n<vec.Size(); n++)
    1074   {
    1075     vec[n] = Dat(set[n+1]);
    1076   }
    10771128  BDat  b2;
    10781129  BDat W = HannShapiroW(vec,b2);
    … …  
    10891140//--------------------------------------------------------------------
    10901141  DeclareContensClass(BSet, BSetTemporary, BSetDAgostinoDTest);
    1091   DefExtOpr(1, BSetDAgostinoDTest, "DAgostinoDTest", 2, 2, "Set Real",
    1092   I2("(Set set, Real alfa)",
    1093      "(Set conjunto, Real alfa)"),
     1142  DefExtOpr(1, BSetDAgostinoDTest, "DAgostinoDTest", 2, 2,
     1143  "{Set|Matrix|VMatrix|Serie} Real",
     1144  "({Set|Matrix|VMatrix|Serie} sample, Real alfa)",
    10941145  I2(".",
    10951146     "Contruye el test de normalidad de DAgostinoD para una muestra con el "
    … …  
    11061157//--------------------------------------------------------------------
    11071158{
    1108   BSet& set  = Set(Arg(1));
     1159  BArray<BDat> vec;
     1160  if(!fillVectorType("DAgostinoDTest","sample",vec,Arg(1))) { return; }
    11091161  BDat  alfa = Dat(Arg(2));
    1110   if(!CheckRealElement("DAgostinoDTest",set)) { return; }
    1111   BArray<BDat> vec;
    1112   vec.ReallocBuffer(set.Card());
    1113   for(BInt n=0; n<vec.Size(); n++)
    1114   {
    1115     vec[n] = Dat(set[n+1]);
    1116   }
    11171162  BDat T;
    11181163  BDat D = DAgostinoD(vec, T);
    … …  
    11271172
    11281173
    1129 
     1174bool Diagnostic_NormalReg_Res_Pearson(
     1175  BDat& statValue,
     1176  BDat& refuseProb,
     1177  const BArray<BDat>& res);
     1178
     1179
     1180//--------------------------------------------------------------------
     1181  DeclareContensClass(BSet, BSetTemporary, BSetNormalPearsonChiSqrTest);
     1182  DefExtOpr(1, BSetNormalPearsonChiSqrTest, "NormalPearsonChiSqrTest", 1, 1,
     1183  "{Set|Matrix|VMatrix|Serie}",
     1184  "({Set|Matrix|VMatrix|Serie} sample)",
     1185  "Performs Pearson chi-square test of normality for a given sample.\n"
     1186  "http://en.wikipedia.org/wiki/Pearson%27s_chi-squared_test",
     1187     BOperClassify::Statistic_);
     1188  void BSetNormalPearsonChiSqrTest::CalcContens()
     1189//--------------------------------------------------------------------
     1190{
     1191  BArray<BDat> vec;
     1192  if(!fillVectorType("NormalPearsonChiSqrTest","sample",vec,Arg(1))) { return; }
     1193  BDat statValue;
     1194  BDat refuseProb;
     1195  Diagnostic_NormalReg_Res_Pearson(statValue,refuseProb,vec);
     1196  BList* lst    = NIL;
     1197  BList* aux    = NIL;
     1198  LstFastAppend(lst,aux, BContensDat::New("StatValue",  statValue,  "Chi-square value"));
     1199  LstFastAppend(lst,aux, BContensDat::New("RefuseProb", refuseProb, "Refuse probability"));
     1200  contens_.RobElement(lst);
     1201}
     1202
     1203void AutoCor(const BArray<BDat>& vec,BArray<BDat>& cor,BInt order,BInt demean);
     1204
     1205bool Diagnostic_ARIMA_ResAcf_BoxPierceLjung(
     1206  BDat& statValue,
     1207  BDat& refuseProb,
     1208  const BArray<BDat>& acf,
     1209  int dataLength,
     1210  int p,
     1211  int q);
     1212
     1213//--------------------------------------------------------------------
     1214  DeclareContensClass(BSet, BSetTemporary, BSetBoxPierceLjungTest);
     1215  DefExtOpr(1, BSetBoxPierceLjungTest, "BoxPierceLjungTest", 3, 3,
     1216  "{Set|Matrix|VMatrix|Serie} Real Real",
     1217  "({Set|Matrix|VMatrix|Serie} sample, Real numAcf, Real freeDegree)",
     1218  "The Ljung–Box test (named for Greta M. Ljung and George E. P. Box) "
     1219  "is a type of statistical test of whether any of a group of numAcf "
     1220  "autocorrelations of a time series are different from zero. Instead "
     1221  "of testing randomness at each distinct lag, it tests the overall "
     1222  "randomness based on a number of lags, and is therefore a portmanteau "
     1223  "test.\n"
     1224  "http://en.wikipedia.org/wiki/Ljung%E2%80%93Box_test",
     1225     BOperClassify::Statistic_);
     1226  void BSetBoxPierceLjungTest::CalcContens()
     1227//--------------------------------------------------------------------
     1228{
     1229  BArray<BDat> vec, acf;
     1230  if(!fillVectorType("BoxPierceLjungTest","sample",vec,Arg(1))) { return; }
     1231  int numAcf = (int)Real(Arg(2));
     1232  int freeDegree = (int)Real(Arg(3));
     1233  BDat statValue;
     1234  BDat refuseProb;
     1235  int dataLength = vec.Size();
     1236  AutoCor(vec,acf,numAcf,1);
     1237  Diagnostic_ARIMA_ResAcf_BoxPierceLjung(statValue,refuseProb,acf,dataLength,freeDegree,0);
     1238  BList* lst    = NIL;
     1239  BList* aux    = NIL;
     1240  LstFastAppend(lst,aux, BContensDat::New("StatValue",  statValue,  "Chi-square value"));
     1241  LstFastAppend(lst,aux, BContensDat::New("RefuseProb", refuseProb, "Refuse probability"));
     1242  contens_.RobElement(lst);
     1243}
     1244
     1245bool Diagnostic_ARIMA_ResAcf_BoxPierceMod(
     1246  BDat& statValue,
     1247  BDat& refuseProb,
     1248  const BArray<BDat>& acf,
     1249  int dataLength,
     1250  int p,
     1251  int q);
     1252 
     1253//--------------------------------------------------------------------
     1254  DeclareContensClass(BSet, BSetTemporary, BSetBoxPierceModifiedTest);
     1255  DefExtOpr(1, BSetBoxPierceModifiedTest, "BoxPierceModified", 3, 3,
     1256  "{Set|Matrix|VMatrix|Serie} Real Real",
     1257  "({Set|Matrix|VMatrix|Serie} sample, Real numAcf, Real freeDegree)",
     1258  "Performs the Chung-Ming Kuan modified version of serial "
     1259  "uncorrelatedness test of Box-Pierce.\n"
     1260  "http://homepage.ntu.edu.tw/~ckuan/pdf/Lec-DiagTest_0902.pdf",
     1261     BOperClassify::Statistic_);
     1262  void BSetBoxPierceModifiedTest::CalcContens()
     1263//--------------------------------------------------------------------
     1264{
     1265  BArray<BDat> vec, acf;
     1266  if(!fillVectorType("BoxPierceModified","sample",vec,Arg(1))) { return; }
     1267  int numAcf = (int)Real(Arg(2));
     1268  int freeDegree = (int)Real(Arg(3));
     1269  BDat statValue;
     1270  BDat refuseProb;
     1271  int dataLength = vec.Size();
     1272  AutoCor(vec,acf,numAcf,1);
     1273  Diagnostic_ARIMA_ResAcf_BoxPierceMod(statValue,refuseProb,acf,dataLength,freeDegree,0);
     1274  BList* lst    = NIL;
     1275  BList* aux    = NIL;
     1276  LstFastAppend(lst,aux, BContensDat::New("StatValue",  statValue,  "Chi-square value"));
     1277  LstFastAppend(lst,aux, BContensDat::New("RefuseProb", refuseProb, "Refuse probability"));
     1278  contens_.RobElement(lst);
     1279}
     1280
     1281 
     1282/* 
     1283void Frequency(const BArray<BDat>& vec, BMatrix<BDat>& M ,
     1284               BInt parts, BDat min, BDat max);
     1285
     1286//--------------------------------------------------------------------
     1287  DeclareContensClass(BMat, BMatTemporary, BMatFrequenceHistogram);
     1288  DefExtOpr(1, BMatFrequenceHistogram, "FrequenceHistogram", 1, 4,
     1289  "{Set|Matrix|VMatrix|Serie}, Real, Real, Real",
     1290  "({Set|Matrix|VMatrix|Serie} sample "
     1291  "[, Real parts=100, Real min=-1/0, Real max = +1/0])",
     1292  "Builds the histogram of frequencies of a given sample",
     1293     BOperClassify::Statistic_);
     1294  void BMatFrequenceHistogram::CalcContens()
     1295//--------------------------------------------------------------------
     1296{
     1297  BArray<BDat> vec;
     1298  if(!fillVectorType("FrequenceHistogram","sample",vec,Arg(1))) { return; }
     1299  BInt parts  =100;
     1300  BDat min = BDat::NegInf();
     1301  BDat max = BDat::PosInf();
     1302  if(Arg(2)) { parts = Dat(Arg(2); }
     1303  if(Arg(3)) { min = Dat(Arg(3); }
     1304  if(Arg(4)) { max = Dat(Arg(4); }
     1305 
     1306void Frequency(const BArray<BDat>& vec, BMatrix<BDat>& M ,
     1307               BInt parts, BDat min, BDat max);
     1308 
     1309}
     1310   
     1311*/   
Note: See TracChangeset for help on using the changeset viewer.