24 using namespace shogun;
35 return sum/values.
vlen;
72 if (values[low]>values[high])
73 CMath::CMath::swap(values[low], values[high]);
79 if (values[middle]>values[high])
81 if (values[low]>values[high])
83 if (values[middle]>values[low])
94 while (values[low]>values[l]);
97 while (values[h]>values[low]);
131 for (i=1; i<values.
vlen; i++)
146 for (i=0; i<values.
vlen; i++)
151 if (values[i]>maxltguess)
152 maxltguess=values[i];
154 else if (values[i]>guess)
157 if (values[i]<mingtguess)
158 mingtguess=values[i];
163 if (less<=(values.
vlen+1)/2&&greater<=(values.
vlen+1)/2)
165 else if (less>greater)
171 if (less>=(values.
vlen+1)/2)
173 else if (less+equal>=(values.
vlen+1)/2)
183 result=
median(copy,
true);
191 bool modify,
bool in_place)
198 return median(as_vector, modify, in_place);
213 return sum_squared_diff/(values.
vlen-1);
232 result[j]+=values(i,j);
244 result[j]+=values(j,i);
272 result[j]+=
CMath::pow(values(i,j)-mean[j], 2);
284 result[j]+=
CMath::pow(values(j,i)-mean[j], 2);
327 centered,
true,
false, 1.0/(observations.
num_rows-1));
343 int32_t deg=values.
vlen-1;
354 conf_int_low=mean-interval;
355 conf_int_up=mean+interval;
370 SG_SERROR(
"CStatistics::inverse_student_t_distribution(): "
435 int32_t breaknewtcycle;
436 int32_t breakihalvecycle;
442 SG_SERROR(
"CStatistics::inverse_incomplete_beta(): "
535 x=2.0/(1.0/(2.0*aaa-1.0)+1.0/(2.0*bbb-1.0));
537 -(1.0/(2.0*bbb-1.0)-1.0/(2.0*aaa-1.0))
538 *(lgm+5.0/6.0-2.0/(3.0*x));
560 if (mainlooppos==ihalve)
565 mainlooppos=ihalvecycle;
572 if (mainlooppos==ihalvecycle)
619 di=1.0-(1.0-di)*(1.0-di);
695 mainlooppos=ihalvecycle;
700 mainlooppos=breakihalvecycle;
708 if (mainlooppos==breakihalvecycle)
727 if (mainlooppos==newt)
736 mainlooppos=newtcycle;
743 if (mainlooppos==newtcycle)
779 mainlooppos=breaknewtcycle;
789 mainlooppos=breaknewtcycle;
798 xt=x0+0.5*yyy*(x-x0);
801 mainlooppos=breaknewtcycle;
808 xt=x1-0.5*yyy*(x1-x);
811 mainlooppos=breaknewtcycle;
821 mainlooppos=newtcycle;
826 mainlooppos=breaknewtcycle;
834 if (mainlooppos==breaknewtcycle)
874 big=4.503599627370496e15;
875 biginv=2.22044604925031308085e-16;
876 maxgam=171.624376956302725;
882 SG_SERROR(
"CStatistics::incomplete_beta(): "
888 SG_SERROR(
"CStatistics::incomplete_beta(): "
935 y=x*(a+b-2.0)-(a-1.0);
1021 expm2=0.13533528323661269189;
1022 s2pi=2.50662827463100050242;
1044 p0=-59.9633501014107895267;
1045 p0=98.0010754185999661536+y2*p0;
1046 p0=-56.6762857469070293439+y2*p0;
1047 p0=13.9312609387279679503+y2*p0;
1048 p0=-1.23916583867381258016+y2*p0;
1050 q0=1.95448858338141759834+y2*q0;
1051 q0=4.67627912898881538453+y2*q0;
1052 q0=86.3602421390890590575+y2*q0;
1053 q0=-225.462687854119370527+y2*q0;
1054 q0=200.260212380060660359+y2*q0;
1055 q0=-82.0372256168333339912+y2*q0;
1056 q0=15.9056225126211695515+y2*q0;
1057 q0=-1.18331621121330003142+y2*q0;
1068 p1=4.05544892305962419923;
1069 p1=31.5251094599893866154+z*p1;
1070 p1=57.1628192246421288162+z*p1;
1071 p1=44.0805073893200834700+z*p1;
1072 p1=14.6849561928858024014+z*p1;
1073 p1=2.18663306850790267539+z*p1;
1074 p1=-1.40256079171354495875*0.1+z*p1;
1075 p1=-3.50424626827848203418*0.01+z*p1;
1076 p1=-8.57456785154685413611*0.0001+z*p1;
1078 q1=15.7799883256466749731+z*q1;
1079 q1=45.3907635128879210584+z*q1;
1080 q1=41.3172038254672030440+z*q1;
1081 q1=15.0425385692907503408+z*q1;
1082 q1=2.50464946208309415979+z*q1;
1083 q1=-1.42182922854787788574*0.1+z*q1;
1084 q1=-3.80806407691578277194*0.01+z*q1;
1085 q1=-9.33259480895457427372*0.0001+z*q1;
1090 p2=3.23774891776946035970;
1091 p2=6.91522889068984211695+z*p2;
1092 p2=3.93881025292474443415+z*p2;
1093 p2=1.33303460815807542389+z*p2;
1094 p2=2.01485389549179081538*0.1+z*p2;
1095 p2=1.23716634817820021358*0.01+z*p2;
1096 p2=3.01581553508235416007*0.0001+z*p2;
1097 p2=2.65806974686737550832*0.000001+z*p2;
1098 p2=6.23974539184983293730*0.000000001+z*p2;
1100 q2=6.02427039364742014255+z*q2;
1101 q2=3.67983563856160859403+z*q2;
1102 q2=1.37702099489081330271+z*q2;
1103 q2=2.16236993594496635890*0.1+z*q2;
1104 q2=1.34204006088543189037*0.01+z*q2;
1105 q2=3.28014464682127739104*0.0001+z*q2;
1106 q2=2.89247864745380683936*0.000001+z*q2;
1107 q2=6.79019408009981274425*0.000000001+z*q2;
1151 if (
less(a+b, maxgam)
1216 xk=-x*k1*k2/(k3*k4);
1243 if (
less(t, thresh))
1321 xk=-z*k1*k2/(k3*k4);
1348 if (
less(t, thresh))
1390 igammaepsilon=0.000000000000001;
1402 if (
less(ax, -709.78271289338399))
1417 while (
greater(c/ans, igammaepsilon));
1443 igammaepsilon=0.000000000000001;
1444 igammabignumber=4503599627370496.0;
1445 igammabignumberinv=2.22044604925031308085*0.0000000000000001;
1457 if (
less(ax, -709.78271289338399))
1495 pkm2=pkm2*igammabignumberinv;
1496 pkm1=pkm1*igammabignumberinv;
1497 qkm2=qkm2*igammabignumberinv;
1498 qkm1=qkm1*igammabignumberinv;
1501 while (
greater(t, igammaepsilon));
1538 igammaepsilon=0.000000000000001;
1539 iinvgammabignumber=4503599627370496.0;
1540 x0=iinvgammabignumber;
1544 dithresh=5*igammaepsilon;
1574 if (
less(d, -709.78271289338399))
1589 if (
equal(x0, iinvgammabignumber))
1595 while (
equal(x0, iinvgammabignumber))
1615 lgm=(x0-x1)/(x1+x0);
1697 p=0.007547728033418631287834;
1698 p=0.288805137207594084924010+xsq*p;
1699 p=14.3383842191748205576712+xsq*p;
1700 p=38.0140318123903008244444+xsq*p;
1701 p=3017.82788536507577809226+xsq*p;
1702 p=7404.07142710151470082064+xsq*p;
1703 p=80437.3630960840172832162+xsq*p;
1705 q=1.00000000000000000000000+xsq*q;
1706 q=38.0190713951939403753468+xsq*q;
1707 q=658.070155459240506326937+xsq*q;
1708 q=6379.60017324428279487120+xsq*q;
1709 q=34216.5257924628539769006+xsq*q;
1710 q=80437.3630960840172826266+xsq*q;
1711 result=s*1.1283791670955125738961589031*x*p/q;
1745 p=0.5641877825507397413087057563+x*p;
1746 p=9.675807882987265400604202961+x*p;
1747 p=77.08161730368428609781633646+x*p;
1748 p=368.5196154710010637133875746+x*p;
1749 p=1143.262070703886173606073338+x*p;
1750 p=2320.439590251635247384768711+x*p;
1751 p=2898.0293292167655611275846+x*p;
1752 p=1826.3348842295112592168999+x*p;
1754 q=17.14980943627607849376131193+x*q;
1755 q=137.1255960500622202878443578+x*q;
1756 q=661.7361207107653469211984771+x*q;
1757 q=2094.384367789539593790281779+x*q;
1758 q=4429.612803883682726711528526+x*q;
1759 q=6089.5424232724435504633068+x*q;
1760 q=4958.82756472114071495438422+x*q;
1761 q=1826.3348842295112595576438+x*q;
1773 for (int32_t i=0; i<len; i++)
1801 for (int32_t i=0; i<3+2; i++)
1808 for (int32_t i=0; i<3*2; i++)
1820 for (int32_t k=0; k<=dim1; k++)
1825 x[0+0*2+counter*2*3]=k;
1826 x[0+1*2+counter*2*3]=l;
1827 x[0+2*2+counter*2*3]=m[0]-x[0+0*2+counter*2*3]-x[0+1*2+counter*2*3];
1828 x[1+0*2+counter*2*3]=m[2]-x[0+0*2+counter*2*3];
1829 x[1+1*2+counter*2*3]=m[3]-x[0+1*2+counter*2*3];
1830 x[1+2*2+counter*2*3]=m[4]-x[0+2*2+counter*2*3];
1837 #ifdef DEBUG_FISHER_TABLE
1842 SG_SPRINT(
"prob_table_log=%.18Lg\n", prob_table_log);
1843 SG_SPRINT(
"log_denomf=%.18g\n", log_denomf);
1844 SG_SPRINT(
"log_denom=%.18Lg\n", log_denom);
1846 display_vector(m, m_len,
"marginals");
1847 display_vector(x, 2*3*counter,
"x");
1848 #endif // DEBUG_FISHER_TABLE
1853 for (int32_t k=0; k<counter; k++)
1855 for (int32_t j=0; j<3; j++)
1857 for (int32_t i=0; i<2; i++)
1858 log_denom_vec[k]+=
lgammal(x[i+j*2+k*2*3]+1.0);
1862 for (int32_t i=0; i<counter; i++)
1863 log_denom_vec[i]=log_nom-log_denom_vec[i];
1865 #ifdef DEBUG_FISHER_TABLE
1866 display_vector(log_denom_vec, counter,
"log_denom_vec");
1867 #endif // DEBUG_FISHER_TABLE
1870 for (int32_t i=0; i<counter; i++)
1872 if (log_denom_vec[i]<=prob_table_log)
1876 #ifdef DEBUG_FISHER_TABLE
1877 SG_SPRINT(
"nonrand_p=%.18g\n", nonrand_p);
1879 #endif // DEBUG_FISHER_TABLE
1893 for (int32_t i=0; i<len; i++)
1894 for (int32_t j=0; j<len; j++)
1895 e+=exp(p2[j*len+i])*(p2[j*len+i]-p1[i]-p1[j]);
1904 for (int32_t i=0; i<len; i++)
1905 e+=exp(p[i])*(p[i]-q[i]);
1914 for (int32_t i=0; i<len; i++)
1923 "sample size should be less than number of indices\n");
1926 int32_t* permuted_idxs=
SG_MALLOC(int32_t,sample_size);
1931 for (i=0; i<sample_size; i++)
1932 permuted_idxs[i]=idxs[i];
1933 for (i=sample_size; i<N; i++)
1936 if (rnd<sample_size)
1937 permuted_idxs[rnd]=idxs[i];
1949 df = (((df/240-0.003968253986254)*df+1/120.0)*df-1/120.0)*df;
1950 df = df+log(x)-0.5/x-1.0/(x-1.0)-1.0/(x-2.0)-1.0/
1951 (x-3.0)-1.0/(x-4.0)-1.0/(x-5.0)-1.0/(x-6.0);