Exemple #1
0
        private float CalculateUnequalVariance(TTestGroupsDTO tTestGroupsDto)
        {
            NumericVector group1 = tTestGroupsDto.Group1;
            NumericVector group2 = tTestGroupsDto.Group2;

            _engine.SetSymbol("group1", group1);
            _engine.SetSymbol("group2", group2);

            GenericVector testResult = _engine.Evaluate("t.test(group1, group2, var.equal=FALSE)").AsList();

            float p = (float)testResult["p.value"].AsNumeric().First();

            return(p);
        }
Exemple #2
0
        private async Task <TTestGroupsDTO> CreateGroupsForTTest(BusinessKey businessKey)
        {
            var rawData = await _oppeDBService.GetRawDataFactList(businessKey);

            if (!rawData.Any())
            {
                return(null);
            }

            var grp1 = Array.ConvertAll(rawData.Where(r => r.Name == "Peers").Select(r => r.Value).ToArray(), x => (double)x);
            var grp2 = Array.ConvertAll(rawData.Where(r => r.Name != "Peers").Select(r => r.Value).ToArray(), x => (double)x);

            var tTestGroupsDto = new TTestGroupsDTO
            {
                Group1 = _engine.CreateNumericVector(grp1),
                Group2 = _engine.CreateNumericVector(grp2)
            };

            return(tTestGroupsDto);
        }
Exemple #3
0
        public async Task <PValueDTO> GeneratePValueFactRecord(BusinessKey businessKey)
        {
            float leveneValue           = 0;
            float pValueUnequalVariance = 0;
            float pValueEqualVariance   = 0;
            float chiRatio = 0;
            float pValue   = 0;

            var phys = await _oppeDBService.GetRawDataFactList(businessKey);

            var   physCount = phys.Count(p => p.Name != "Peers");
            float physSum   = (float)phys.Where(p => p.Name != "Peers").Sum(p => p.Value);
            float physMean  = (float)(physCount == 0 ? 0 : physSum / physCount);

            var   peersCount = phys.Count(p => p.Name == "Peers");
            float peersSum   = (float)phys.Where(p => p.Name == "Peers").Sum(p => p.Value);
            float peersMean  = (float)(peersCount == 0 ? 0 : peersSum / peersCount);

            if (businessKey.isTTest)
            {
                LeveneTestDTO leveneTestDTO = await CreateGroupsForLevene(businessKey);

                if (leveneTestDTO == null)
                {
                    return(null);
                }
                leveneValue = CalculateLeveneValue(leveneTestDTO);

                TTestGroupsDTO tTestGroupsDto = await CreateGroupsForTTest(businessKey);

                if (tTestGroupsDto == null)
                {
                    return(null);
                }
                pValueUnequalVariance = CalculateUnequalVariance(tTestGroupsDto);
                pValueEqualVariance   = CalculateEqualVariance(tTestGroupsDto);

                pValue = leveneValue > 0.05 ? pValueEqualVariance : pValueUnequalVariance;

                if (float.IsNaN(leveneValue) || float.IsNaN(pValueUnequalVariance) || float.IsNaN(pValueEqualVariance))
                {
                    return(null);
                }
            }
            else
            {
                if (phys.Any())
                {
                    CalculateChiForPhys(phys, out chiRatio, out pValue);
                }
            }


            PValueDTO pValueDTO = new PValueDTO
            {
                CycleId               = businessKey.CycleId,
                SubGroupId            = (int)businessKey.SubGroupId,
                IndicatorId           = (int)businessKey.IndicatorId,
                PayrollId             = businessKey.PayrollId,
                PhysicianCount        = physCount,
                PhysicianSum          = physSum,
                PhysicianMean         = physMean,
                PeersCount            = peersCount,
                PeersSum              = peersSum,
                PeersMean             = peersMean,
                LeveneValue           = leveneValue,
                PValueUnequalVariance = pValueUnequalVariance,
                PValueEqualVariance   = pValueEqualVariance,
                ChiRatio              = chiRatio,
                PValue = pValue
            };

            return(pValueDTO);
        }