Esempio n. 1
0
        public void CouldReadVariantSeries()
        {
            var sm = new SortedMap <int, string>();

            for (int i = 0; i < 100; i++)
            {
                sm.Add(i, (i * 100).ToString());
            }

            var vs = new VariantSeries <int, string>(sm);


            foreach (var item in vs)
            {
                System.Console.WriteLine(item.Key.Get <int>() + ": " + item.Value.Get <string>());
            }

            Assert.AreEqual(Variant.Create(0), vs.First.Key);
            Assert.AreEqual(Variant.Create("0"), vs.First.Value);
            Assert.AreEqual(Variant.Create(99), vs.Last.Key);
            Assert.AreEqual(Variant.Create("9900"), vs.Last.Value);


            var cursorSeries = new CursorSeries <int, string>(sm);

            Assert.AreEqual(0, cursorSeries.First.Key);
        }
Esempio n. 2
0
        public static Series <DateTime, Matrix <double> > MovingRegression(this Series <DateTime, double> y, Series <DateTime, double[]> xs, uint window, uint step = 1)
        {
            var xpx = xs.Zip(y, (dt, xrow, yrow) =>
            {
                // first x row transposed
                var xt    = Matrix <double> .Build.DenseOfColumnArrays(new[] { xrow });
                var xpxi  = xt.Multiply(xt.Transpose());
                var xpy   = xt.Multiply(yrow);
                var tuple =
                    new ValueTuple <Matrix <double>, Matrix <double> >(xpxi, xpy);
                //return xpxi;
                return(tuple);
            });

            // then we need to sum xpxi and xpy over a window, make inverse of the first and multiply
            // - the result is betas
            var dim           = xs.First.Value.Length;
            var cursorFactory = new Func <ScanLagAllowIncompleteCursor <DateTime, ValueTuple <Matrix <double>, Matrix <double> >, ValueTuple <Matrix <double>, Matrix <double> > > >(() =>
                                                                                                                                                                                     new ScanLagAllowIncompleteCursor <DateTime, ValueTuple <Matrix <double>, Matrix <double> >, ValueTuple <Matrix <double>, Matrix <double> > >(
                                                                                                                                                                                         xpx.GetCursor, window, step,
                                                                                                                                                                                         () => new ValueTuple <Matrix <double>, Matrix <double> >(Matrix <double> .Build.Dense(dim, dim), Matrix <double> .Build.Dense(dim, 1)),
                                                                                                                                                                                         (st, add, sub, cnt) =>
            {
                var cov = st.Value1.Add(add.Value.Value1);
                if (sub.Value.Value1 != null)
                {
                    cov = cov.Subtract(sub.Value.Value1);
                }
                var variance = st.Value2.Add(add.Value.Value2);
                if (sub.Value.Value2 != null)
                {
                    variance = variance.Subtract(sub.Value.Value2);
                }
                return(new ValueTuple <Matrix <double>, Matrix <double> >(cov, variance));
            }, false));

            Series <DateTime, Matrix <double> > betas;

            betas = new CursorSeries <DateTime, ValueTuple <Matrix <double>, Matrix <double> > >(cursorFactory).Map(
                tpl =>
            {
                return(tpl.Value1.Inverse().Multiply(tpl.Value2));
            });
            return(betas);
        }