예제 #1
0
        public IList <Physician> GetIndicatorList(PValueDbContext context)
        {
            var subGrps = context.Indicator_12
                          .GroupBy(i => i.OppePhysicianSubGroupID)
                          // .Where(i => i.Key == 27)
                          .ToList();

            IList <Physician> indList = new List <Physician>();

            foreach (var subGrp in subGrps)
            {
                var grps = context.Indicator_12
                           .Where(g => g.OppePhysicianSubGroupID == subGrp.Key)
                           .GroupBy(i => i.PayrollID);
                foreach (var item in grps)
                {
                    var phys = context.Indicator_12
                               .First(i => i.PayrollID == item.Key);

                    var grp = new Physician
                    {
                        ID              = phys.PayrollID,
                        SubGroupID      = phys.OppePhysicianSubGroupID,
                        OppeCycleID     = phys.OppeCycleID,
                        OppeIndicatorID = phys.OppeIndicatorID
                    };

                    indList.Add(grp);
                }
            }

            return(indList);
        }
예제 #2
0
        static void OldMain(string[] args)
        {
            Console.WriteLine("Calculating Stats...");

            using (var context = new PValueDbContext())
            {
                var serviceProvider = new ServiceCollection()
                                      .AddSingleton <IPValueService, PValueService>()
                                      .BuildServiceProvider();

                //----//
                var pService = serviceProvider.GetService <IPValueService>();
                var indList  = pService.GetIndicatorList(context);

                foreach (var item in indList)
                {
                    //----//
                    var phys = context.Indicator_12
                               .Where(p => p.PayrollID == item.ID);

                    if (phys.Count() >= 5)
                    {
                        var stats = pService.CalculateStats(context, item);

                        #region Insert Stats
                        var statsTable = new StatsTable()
                        {
                            PayrollID               = stats.PayrollID,
                            OppeCycleID             = item.OppeCycleID,
                            OppeIndicatorID         = item.OppeIndicatorID,
                            OppePhysicianSubGroupID = item.SubGroupID,
                            Count = stats.Count,
                            // NumeratorSum = stats.NumeratorSum,
                            // DenominatorSum = stats.DenominatorSum,
                            Mean = stats.Mean,
                            StandardDeviation = stats.StandardDeviation,
                            PeerCount         = stats.PeerCount,
                            // PeerNumeratorSum = stats.PeerNumeratorSum,
                            // PeerDenominatorSum = stats.PeerDenominatorSum,
                            PeerMean = stats.PeerMean,
                            PeerStandardDeviation   = stats.PeerStandardDeviation,
                            LevenesTest             = stats.LevenesTest,
                            PValue_EqualVariances   = stats.PValue_EqualVariances,
                            PValue_UnequalVariances = stats.PValue_UnequalVariances,
                            PValue = stats.PValue
                        };
                        context.StatsTable.Add(statsTable);
                        context.SaveChanges();
                        #endregion
                    }

                    // Console.WriteLine($"{stats.PayrollID} - Physician - {stats.Count} - {stats.Mean} - {stats.StandardDeviation} - {stats.LevenesTest} - {stats.PValue_EqualVariances}");
                    // Console.WriteLine($"        - Peers     - {stats.PeerCount} - {stats.PeerMean} - {stats.PeerStandardDeviation} -  - {stats.PValue_UnequalVariances} ---> {stats.PValue}");
                }
                Console.WriteLine("Done!");
                Console.WriteLine("Press Enter Key...");
                Console.Read();
            }
        }
예제 #3
0
        public RepoService(PValueDbContext context)
        {
            _context = context;

            REngine.SetEnvironmentVariables();
            _engine = REngine.GetInstance();
            _engine.Initialize();
        }
예제 #4
0
        public Statistics CalculateStats(PValueDbContext context, Physician item)
        {
            var phys = context.Indicator_12
                       .Where(p => p.PayrollID == item.ID)
                       .Select(p => new { num = p.NumeratorValue });

            var physCount = phys.Count();

            // string physNum = "";
            double[] x1         = new double[physCount];
            double   physNumVal = 0;
            double   physDenVal = 0;
            double   physMean   = 0;
            int      i          = 0;

            foreach (var phy in phys)
            {
                x1[i] = phy.num;
                // physNum += physNum == "" ? phy.num.ToString() : " " + phy.num.ToString();
                physNumVal += phy.num;
                physDenVal++;
                i++;
            }
            if (physDenVal != 0)
            {
                physMean = physNumVal / physDenVal;
            }

            var peers = context.Indicator_12
                        .Where(p => p.OppePhysicianSubGroupID == item.SubGroupID)
                        .Where(p => p.PayrollID != item.ID)
                        .Select(p => new
            {
                num = p.NumeratorValue
            });

            var peersCount = peers.Count();

            double[] x2 = new double[peersCount];
            // string peersNum = "";
            double peersNumVal = 0;
            double peersDenVal = 0;
            double peersMean   = 0;


            double levenesTest = 0;
            double pValueA     = 0;
            double pValueNA    = 0;

            if (peers.Count() >= 5)
            {
                int j = 0;
                foreach (var peer in peers)
                {
                    x2[j]        = peer.num;
                    peersNumVal += peer.num;
                    peersDenVal++;
                    j++;
                }
                if (peersDenVal != 0)
                {
                    peersMean = peersNumVal / peersDenVal;
                }

                #region Levene's Test
                double[][] X = new double[][]
                {
                    x1,
                    x2
                };

                var levenes = new LeveneTest(X);
                levenesTest = levenes.PValue;
                #endregion

                Console.WriteLine($"Grp = {item.SubGroupID} - Phys = {item.ID}");

                #region T-Test Equal variances assumed
                var ta = new TwoSampleTTest(x1, x2, assumeEqualVariances: true);
                pValueA = ta.PValue;
                #endregion

                #region T-Test Equal variances not assumed
                var tna = new TwoSampleTTest(x1, x2, assumeEqualVariances: false);
                pValueNA = tna.PValue;
                #endregion
            }

            var stats = new Statistics
            {
                Count                   = physCount,
                PayrollID               = item.ID,
                NumeratorSum            = physNumVal,
                DenominatorSum          = physDenVal,
                Mean                    = physMean,
                StandardDeviation       = Measures.StandardDeviation(x1),
                PeerCount               = peersCount,
                PeerNumeratorSum        = peersNumVal,
                PeerDenominatorSum      = peersDenVal,
                PeerMean                = peersMean,
                PeerStandardDeviation   = Measures.StandardDeviation(x2),
                LevenesTest             = levenesTest,
                PValue_EqualVariances   = pValueA,
                PValue_UnequalVariances = pValueNA,
                PValue                  = levenesTest > 0.05 ? pValueA : pValueNA
            };

            return(stats);
        }