Changeset a05bd10 in tol
- Timestamp:
- Nov 27, 2012, 6:20:43 PM (14 years ago)
- Branches:
- 1941-docker-image-to-test, devel, master
- Children:
- bab7ea7
- Parents:
- 42b635f
- File:
-
- 1 edited
-
tol/bmath/bstat/stat.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
tol/bmath/bstat/stat.cpp
r42b635f ra05bd10 35 35 #include <tol/tol_bsvdsep.h> 36 36 #include <tol/tol_bratio.h> 37 #include <tol/tol_bprdist.h> 38 #include <tol/tol_barma.h> 37 39 38 40 … … 1347 1349 } 1348 1350 } 1351 1352 //-------------------------------------------------------------------- 1353 static BDat AbsNormal(BDat x) 1354 //-------------------------------------------------------------------- 1355 { 1356 return(2*BNormalDist::Dist01(Abs(x)) - BDat(1)); 1357 } 1358 1359 //-------------------------------------------------------------------- 1360 bool Diagnostic_ARIMA_ResAcf_NormalUnivariate( 1361 BDat& statValue, 1362 BDat& refuseProb, 1363 const BArray<BDat>& acf, 1364 int dataLength, 1365 int lag) 1366 //-------------------------------------------------------------------- 1367 { 1368 if(acf.Size()<lag) { return(false); } 1369 statValue = acf[lag]; 1370 refuseProb = AbsNormal(statValue*Sqrt(dataLength)); 1371 return(true); 1372 } 1373 1374 //-------------------------------------------------------------------- 1375 bool Diagnostic_ARIMA_ResAcf_BoxPierceLjung( 1376 BDat& statValue, 1377 BDat& refuseProb, 1378 const BArray<BDat>& acf, 1379 int dataLength, 1380 int p, 1381 int q) 1382 //-------------------------------------------------------------------- 1383 { 1384 if(acf.Size()<=p+q) { return(false); } 1385 int m = acf.Size(); 1386 statValue = BoxPierceLjungACF(acf, m, dataLength); 1387 BChiSquareDist Chi(m-p-q); 1388 refuseProb = Chi.Dist(statValue); 1389 return(true); 1390 } 1391 1392 //-------------------------------------------------------------------- 1393 bool Diagnostic_ARIMA_ResAcf_BoxPierceMod( 1394 BDat& statValue, 1395 BDat& refuseProb, 1396 const BArray<BDat>& acf, 1397 int dataLength, 1398 int p, 1399 int q) 1400 //-------------------------------------------------------------------- 1401 { 1402 if(acf.Size()<=p+q) { return(false); } 1403 int m = acf.Size(); 1404 statValue = BoxPierceModACF(acf, m, dataLength); 1405 BChiSquareDist Chi(m-p-q); 1406 refuseProb = Chi.Dist(statValue); 1407 return(true); 1408 } 1409 1410 //-------------------------------------------------------------------- 1411 bool Diagnostic_NormalReg_Res_Pearson( 1412 BDat& statValue, 1413 BDat& refuseProb, 1414 const BArray<BDat>& res) 1415 //-------------------------------------------------------------------- 1416 { 1417 int N_ = res.Size(); 1418 if(N_<=100) { return(false); } 1419 BInt i,j; 1420 //Std(BText("\nTRACE PearsonNormalityTest ")); 1421 BNormalDist U(0,1); 1422 //Cálculo de la desviación típica en base a cuantiles para filtrar outliers 1423 BDat sQ = 0; 1424 { 1425 int nQ = (N_>30)?3:1; 1426 BArray<BDat> q(nQ), p(nQ), Q(nQ); 1427 if(nQ==1) 1428 { 1429 q[0]=1.0; 1430 } 1431 else 1432 { 1433 q[0]=0.9; 1434 q[1]=1.0; 1435 q[2]=1.1; 1436 } 1437 for(i=0; i<nQ; i++) { p[i] = U.Dist(q[0]); } 1438 BArray<BDat> A(N_); 1439 for(i=0; i<N_; i++) { A[i] = Abs(res(i)); } 1440 Quantile(A, p, Q); 1441 for(i=0; i<nQ; i++) 1442 { 1443 sQ += Q[i]/(Abs(q[i])*Sqrt(2.0)); 1444 } 1445 sQ /= nQ; 1446 } 1447 1448 //Filtrado de outliers 1449 BArray<BDat> Y(N_); 1450 BDat kSig = -U.Inverse(1.0/N_,0); 1451 for(i=j=0; i<N_; i++) 1452 { 1453 BDat x = res(i)/sQ; 1454 if(Abs(x) <= kSig) { Y(j++) = x; } 1455 } 1456 int N = j; 1457 Y.ReallocBuffer(N); 1458 1459 //Pearson goodness of fit test statistic 1460 BInt nQ = (N>=900)?(int)sqrt((double)N):(N>=400)?30:(N>=100)?6:4; 1461 //Std(BText("TRACE BModel::PearsonNormalityTest nQ=")+nQ+" sQ="+sQ+"\n"); 1462 BChiSquareDist Chi(nQ-3); 1463 BArray<BDat> q(nQ+1); 1464 BDat chi=0; 1465 BDat step = (((double)N_-2.0)/double(N_*nQ)); 1466 BDat p = 1.0/N_; 1467 for(j=0; j<=nQ; j++, p+=step) 1468 { 1469 q[j] = U.Inverse(p,0); 1470 } 1471 p = 1.0/nQ; 1472 for(j=1; j<=nQ; j++) 1473 { 1474 BDat q0 = q[j-1]; 1475 BDat q1 = q[j]; 1476 BDat Q = 0; 1477 for(i=0; i<N; i++) 1478 { 1479 Q += And(q0 <= Y[i], Y[i] < q1); 1480 } 1481 Q/=N; 1482 BDat dif = Q-p; 1483 BDat dif2 = dif*dif; 1484 BDat dif2p = dif2/p; 1485 //Std(BText("TRACE BModel::PearsonNormalityTest Q=")+Q+" p="+p+" dif="+dif+" dif2="+dif2+" dif2p="+dif2p+"\n"); 1486 chi += dif2p; 1487 } 1488 statValue = chi; 1489 refuseProb = Chi.Dist(chi); 1490 return(true); 1491 } 1492 1493 //-------------------------------------------------------------------- 1494 bool Diagnostic_NormalReg_ParamSignif( 1495 BDat& statValue, 1496 BDat& refuseProb, 1497 const BArray<BDat>& mean, 1498 const BArray<BDat>& stdErr, 1499 int dataLength) 1500 //-------------------------------------------------------------------- 1501 { 1502 int numParam = mean.Size(); 1503 if(!numParam) { return(false); } 1504 1505 BTStudentDist T(dataLength-numParam); 1506 BInt i; 1507 statValue=BDat::PosInf(); 1508 for(i=0; i<numParam; i++) 1509 { 1510 BDat t = Abs(mean[i]/stdErr[i]); 1511 if(!t.IsKnown()) 1512 { 1513 statValue = t; 1514 refuseProb = 1; 1515 break; 1516 } 1517 else if(statValue > t) 1518 { 1519 statValue = t; 1520 } 1521 } 1522 refuseProb = 2*(1-T.Dist(statValue)); 1523 return(true); 1524 } 1525 1526 //-------------------------------------------------------------------- 1527 bool Diagnostic_NormalReg_ParamMulticolinearity( 1528 BDat& statValue, 1529 BDat& refuseProb, 1530 const BArray<BDat>& mean, 1531 const BArray<BDat>& covEigenValues, 1532 const BMatrix<BDat>& covEigenVectors, 1533 int dataLength, 1534 BDat standardError) 1535 //-------------------------------------------------------------------- 1536 { 1537 int numParam = mean.Size(); 1538 if(!numParam) { return(false); } 1539 if(covEigenValues.Size()!=numParam || 1540 covEigenVectors.Rows()!=numParam || 1541 covEigenVectors.Columns()!=numParam || 1542 standardError.IsUnknown()) 1543 { 1544 statValue = BDat::Unknown(); 1545 refuseProb = 1; 1546 return(true); 1547 } 1548 int i,j; 1549 BTStudentDist T(dataLength-numParam); 1550 statValue = 0; 1551 for(j=0; j<numParam; j++) 1552 { 1553 BDat c = 0; 1554 for(i=0;i<numParam;i++) { c +=mean[i]*covEigenVectors(i,j); } 1555 BDat d = Sqrt(covEigenValues(i)); 1556 BDat s = standardError/d; 1557 BDat t = c/s; 1558 BDat p = 2*(1-T.Dist(Abs(t))); 1559 if(p>statValue) 1560 { 1561 statValue = t; 1562 refuseProb = p; 1563 } 1564 } 1565 return(true); 1566 } 1567 1568 //-------------------------------------------------------------------- 1569 bool Diagnostic_ARIMA_ParamUnitRoots( 1570 BDat& statValue, 1571 BDat& refuseProb, 1572 const BArray<BARIMAFactor>& factors, 1573 const BMatrix<BDat>& z, 1574 const BMatrix<BDat>& w0, 1575 const BMatrix<BDat>& a0) 1576 //-------------------------------------------------------------------- 1577 { 1578 BARIMA arima; 1579 arima.PutFactors(factors); 1580 arima.PutOutputData(z); 1581 1582 statValue = 0; 1583 refuseProb = 1; 1584 return(true); 1585 } 1586 1587 1588
Note: See TracChangeset
for help on using the changeset viewer.
