示例#1
0
        public MedidasDispersaoEntity Calcular(List <decimal> listaXifi, decimal media, bool amostra)
        {
            var variancia = Variancia(listaXifi, media, listaXifi.Count, amostra);

            var DP = MathCoreApp.RaizQuadrada(variancia);

            var CV = MathCoreApp.Porcentagem(DP, media);

            return(new MedidasDispersaoEntity
            {
                CV = CV,
                Variancia = variancia,
                DP = DP,
            });
        }
        public VariavelContinuaContainerEntity Build(BaseInputsEntity baseInputs)
        {
            var xMAx = baseInputs.InputValue.Max();
            var xMin = baseInputs.InputValue.Min();

            var al = (xMAx - xMin) + 1;

            var numeroPreK = (int)Math.Sqrt(baseInputs.InputValue.Count());
            var K          = new List <decimal> {
                numeroPreK - 1, numeroPreK, numeroPreK + 1
            };

            var Ic = GetIC(al, K);


            var minimo = xMin;
            var maximo = minimo + (int)Ic.IC;

            var f             = new List <int>();
            var fePorcentList = new List <decimal>();

            var listaTabelaQuantitativa = new List <VariavelContinuaEntity>();

            for (int i = 1; i <= Ic.Classes; i++)
            {
                var fePorcent = (decimal)(baseInputs.Rol.Count(x => x >= minimo && x < maximo) / (decimal)baseInputs.Rol.Count()) * 100;
                var count     = baseInputs.Rol.Count(x => x >= minimo && x < maximo);

                f.Add(count);
                fePorcentList.Add(fePorcent);

                var xi = MediaComum(new List <decimal>()
                {
                    minimo, maximo
                });

                listaTabelaQuantitativa.Add(new VariavelContinuaEntity
                {
                    Classe    = i,
                    XI        = xi,
                    Range     = new[] { minimo, maximo },
                    FI        = count,
                    FEPorcent = Math.Round(fePorcent, 2),
                    F         = f.Sum(),
                    FPorcent  = Math.Round(fePorcentList.Sum(), 2),
                    XIFI      = xi * count,
                });

                minimo = maximo;
                maximo = maximo + (int)Ic.IC;
            }

            var media = listaTabelaQuantitativa.Sum(e => e.XIFI) / listaTabelaQuantitativa.Sum(e => e.FI);

            var variancia = VarianciaContinua(listaTabelaQuantitativa.Select(q => q.XI).ToList(), listaTabelaQuantitativa.Select(x => x.FI).ToList(), media, listaTabelaQuantitativa.Sum(y => y.FI), baseInputs.Amostra);
            var dp        = MathCoreApp.RaizQuadrada(variancia);
            var cv        = MathCoreApp.Porcentagem(dp, media);

            var medidasDispersao = new MedidasDispersaoEntity
            {
                Variancia = variancia,
                DP        = dp,
                CV        = cv
            };

            var medidasTendencia = new MedidasTendenciaEntity
            {
                Media   = media,
                Mediana = MedianaQuantitativa(listaTabelaQuantitativa, Ic.IC),
                Moda    = ModaQuantitativa(listaTabelaQuantitativa)
            };

            return(new VariavelContinuaContainerEntity
            {
                InputValue = baseInputs.InputValue,
                Rol = baseInputs.Rol,
                VariavelContinuaEntity = listaTabelaQuantitativa,
                MinLinha = xMin,
                MaxLinha = xMAx,
                AL = al,
                K = K,
                IC = Ic,
                MedidasDispersaoEntity = medidasDispersao,
                MedidasTendenciaEntity = medidasTendencia,
                EXIFI = listaTabelaQuantitativa.Sum(entity => entity.XIFI),
                EFI = listaTabelaQuantitativa.Sum(entity => entity.FI),
            });
        }