it("gives the correct regression equation, R^2, and function for a sample input with no correlation", ()=>{
            const data:[number,number][] = [
                [0.10198768, 0.10165061],
                [0.10150876, 0.47896164],
                [0.30063469, 0.43840858],
                [0.24547808, 0.63594344],
                [0.05588675, 0.93228701],
                [0.95760052, 0.53645723],
                [0.02858332, 0.79155903],
                [0.49389574, 0.54855519],
                [0.77610317, 0.9879552],
                [0.00350206, 0.73565457]
            ];

            const computations = getRegressionComputations(data);
            // target values computed via python: scipy.stats.linregress
            const m = 0.079113612612723011;
            const b = 0.59449349756220937;
            const r2 = 0.010257434869772463;
            // test regression equation to make sure its approximately the same as what python gives
            const match = computations.string.match(/y = ([\d.]+)x \+ ([\d.]+)/);
            assert.isNotNull(match, "equation has correct form");
            const M = parseFloat(match![1]);
            const B = parseFloat(match![2]);
            assert.approximately(M, m, 0.05);
            assert.approximately(B, b, 0.05);
            // make sure `predict` gives the same result as the equation
            for (let i=0; i<100; i+=1) {
                assert.approximately(computations.predict(i)[1], M*i + B, 0.0000005, `value for ${i}`);
            }
            // test R^2
            assert.approximately(computations.r2,  r2, 0.05, "R^2");

        });
Пример #2
0
export function assertCoords(coords: coord) {
  assert.isArray(coords);
  assert.lengthOf(coords, 2);

  assert.approximately(coords[0], 13, 1);
  assert.approximately(coords[1], 51, 3);
}
Пример #3
0
 dvb.findAddress(lng, lat).then((address) => {
   assert.isDefined(address);
   assert.strictEqual(address!.name, "Nöthnitzer Straße 46");
   assert.strictEqual(address!.city, "Dresden");
   assert.strictEqual(address!.type, dvb.POI_TYPE.Coords);
   assert.approximately(address!.coords[0], lng, 0.001);
   assert.approximately(address!.coords[1], lat, 0.001);
 }));
 it("gives the correct result on sample data", ()=>{
     // source: https://www.wessa.net/rwasp_spearman.wasp
     assert.approximately(
         computeCorrelationPValue(-0.423285542595266, 23),
         0.0441623330731344,
         0.0000000005
     );
 });
        it("gives the correct regression equation, R^2, and function for a sample input with strong correlation", ()=>{
            const data:[number,number][] = [
                [0,0.33517481],
                [1,3.00712561],
                [2,6.73118302],
                [3,9.25128682],
                [4,12.0432596],
                [5,15.9087018],
                [6,18.71122156],
                [7,21.69213527],
                [8,24.57708193],
                [9,27.98002031],
                [10,30.67017471],
                [11,33.55231386],
                [12,36.20724938],
                [13,39.21414698],
                [14,42.74163248],
                [15,45.95986539],
                [16,48.28399276],
                [17,51.52361803],
                [18,54.62495359]
            ];

            const computations = getRegressionComputations(data);
            // target values computed via python: scipy.stats.linregress
            const m = 3.0120636256561446;
            const b = 0.41853989070105158;
            const r2 = 0.99970735279778178;
            // test regression equation to make sure its approximately the same as what python gives
            const match = computations.string.match(/y = ([\d.]+)x \+ ([\d.]+)/);
            assert.isNotNull(match, "equation has correct form");
            const M = parseFloat(match![1]);
            const B = parseFloat(match![2]);
            assert.approximately(M, m, 0.05);
            assert.approximately(B, b, 0.05);
            // make sure `predict` gives the same result as the equation
            for (let i=0; i<100; i+=1) {
                assert.approximately(computations.predict(i)[1], M*i + B, 0.0000005, `value for ${i}`);
            }
            // test R^2
            assert.approximately(computations.r2,  r2, 0.05, "R^2");
        });
Пример #6
0
  it("adds two numeric stats together", () => {
    const aData = [1.1, 3.3, 2.2];
    const bData = [2.0, 3.0, 5.5, 1.2];

    let countA = 0;
    let countB = 0;
    let countAB = 0;

    let sumA = 0;
    let sumB = 0;
    let sumAB = 0;

    const a = emptyStats();
    const b = emptyStats();
    const ab = emptyStats();

    aData.forEach(v => {
      countA++;
      sumA += v;
      record(a, countA, v);
    });

    bData.forEach(v => {
      countB++;
      sumB += v;
      record(b, countB, v);
    });

    bData.concat(aData).forEach(v => {
      countAB++;
      sumAB += v;
      record(ab, countAB, v);
    });

    assert.approximately(a.mean, 2.2, 0.0000001);
    assert.approximately(a.mean, sumA / countA, 0.0000001);
    assert.approximately(b.mean, sumB / countB, 0.0000001);
    assert.approximately(ab.mean, sumAB / countAB, 0.0000001);

    const combined = addNumericStats(a, b, countA, countB);

    assert.approximately(combined.mean, ab.mean, 0.0000001);
    assert.approximately(combined.squared_diffs, ab.squared_diffs, 0.0000001);

    const reversed = addNumericStats(b, a, countB, countA);

    assert.deepEqual(reversed, combined);
  });
Пример #7
0
  it("combines statement statistics", () => {
    const a = randomStats();
    const b = randomStats();
    const c = randomStats();

    const ab = combineStatementStats([a, b]);
    const ac = combineStatementStats([a, c]);
    const bc = combineStatementStats([b, c]);

    // tslint:disable:variable-name
    const ab_c = combineStatementStats([ab, c]);
    const ac_b = combineStatementStats([ac, b]);
    const bc_a = combineStatementStats([bc, a]);
    // tslint:enable:variable-name

    assert.equal(ab_c.count.toString(), ac_b.count.toString());
    assert.equal(ab_c.count.toString(), bc_a.count.toString());

    assert.equal(ab_c.first_attempt_count.toString(), ac_b.first_attempt_count.toString());
    assert.equal(ab_c.first_attempt_count.toString(), bc_a.first_attempt_count.toString());

    assert.equal(ab_c.max_retries.toString(), ac_b.max_retries.toString());
    assert.equal(ab_c.max_retries.toString(), bc_a.max_retries.toString());

    assert.approximately(ab_c.num_rows.mean, ac_b.num_rows.mean, 0.0000001);
    assert.approximately(ab_c.num_rows.mean, bc_a.num_rows.mean, 0.0000001);
    assert.approximately(ab_c.num_rows.squared_diffs, ac_b.num_rows.squared_diffs, 0.0000001);
    assert.approximately(ab_c.num_rows.squared_diffs, bc_a.num_rows.squared_diffs, 0.0000001);

    assert.approximately(ab_c.parse_lat.mean, ac_b.parse_lat.mean, 0.0000001);
    assert.approximately(ab_c.parse_lat.mean, bc_a.parse_lat.mean, 0.0000001);
    assert.approximately(ab_c.parse_lat.squared_diffs, ac_b.parse_lat.squared_diffs, 0.0000001);
    assert.approximately(ab_c.parse_lat.squared_diffs, bc_a.parse_lat.squared_diffs, 0.0000001);

    assert.approximately(ab_c.plan_lat.mean, ac_b.plan_lat.mean, 0.0000001);
    assert.approximately(ab_c.plan_lat.mean, bc_a.plan_lat.mean, 0.0000001);
    assert.approximately(ab_c.plan_lat.squared_diffs, ac_b.plan_lat.squared_diffs, 0.0000001);
    assert.approximately(ab_c.plan_lat.squared_diffs, bc_a.plan_lat.squared_diffs, 0.0000001);

    assert.approximately(ab_c.run_lat.mean, ac_b.run_lat.mean, 0.0000001);
    assert.approximately(ab_c.run_lat.mean, bc_a.run_lat.mean, 0.0000001);
    assert.approximately(ab_c.run_lat.squared_diffs, ac_b.run_lat.squared_diffs, 0.0000001);
    assert.approximately(ab_c.run_lat.squared_diffs, bc_a.run_lat.squared_diffs, 0.0000001);

    assert.approximately(ab_c.service_lat.mean, ac_b.service_lat.mean, 0.0000001);
    assert.approximately(ab_c.service_lat.mean, bc_a.service_lat.mean, 0.0000001);
    assert.approximately(ab_c.service_lat.squared_diffs, ac_b.service_lat.squared_diffs, 0.0000001);
    assert.approximately(ab_c.service_lat.squared_diffs, bc_a.service_lat.squared_diffs, 0.0000001);

    assert.approximately(ab_c.overhead_lat.mean, ac_b.overhead_lat.mean, 0.0000001);
    assert.approximately(ab_c.overhead_lat.mean, bc_a.overhead_lat.mean, 0.0000001);
    assert.approximately(ab_c.overhead_lat.squared_diffs, ac_b.overhead_lat.squared_diffs, 0.0000001);
    assert.approximately(ab_c.overhead_lat.squared_diffs, bc_a.overhead_lat.squared_diffs, 0.0000001);
  });
Пример #8
0
 it("WmOrGK4toWGS84 GK4", () => {
   const point = utils.WmOrGK4toWGS84(`${gk4[0]}`, `${gk4[1]}`);
   assert.isArray(point);
   assert.approximately(point![0], wgs84[0], 0.0001);
   assert.approximately(point![1], wgs84[1], 0.0001);
 });
Пример #9
0
 it("WGS84toWm", () => {
   const point = utils.WGS84toWm(wgs84[0], wgs84[1]);
   assert.approximately(point[0], wm[0], 3);
   assert.approximately(point[1], wm[1], 3);
 });
Пример #10
0
 it("WGS84toGK4", () => {
   const point = utils.WGS84toGK4(wgs84[0], wgs84[1]);
   assert.approximately(point[0], gk4[0], 3);
   assert.approximately(point[1], gk4[1], 3);
 });