C#与Minitab:合并标准差Sigma计算

需要引用Nuget包 MathNet.Numerics

公式

Minitab 合并标准差公式说明

    https://support.minitab.com/zh-cn/minitab/18/help-and-how-to/quality-and-process-improvement/control-charts/how-to/variables-charts-for-subgroups/i-mr-r-s-chart/methods-and-formulas/estimating-sigma-for-the-r-chart-or-the-s-chart/#pooled-standard-deviation-method

代码

using MathNet.Numerics.Statistics;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Spc.Core
{
    /// <summary>
    /// 合并标准差方法
    /// </summary>
    public class PooledEstimateSigma : IEstimateSigma
    {
        public double GetSigma(double[] vs, bool useUnbiasedConstant = false, int sampleSize = 0, int movingRangeLength = 2)
        {
            var sp = 0d;
            var n = 0;
            if (sampleSize <= 0)
            {
                n = 2;
            }
            else
            {
                n = sampleSize;
            }
            sp = vs.Average();

            if (useUnbiasedConstant)
            {
                var d = vs.Sum(x => n - 1);
                var c4 = SigmaConstants.C4AddOne(d);
                sp = sp.Div(c4);
            }
            return sp;
        }

        public double GetSigma(double[][] vs, bool useUnbiasedConstant = false, int sampleSize = 0, int movingRangeLength = 2)
        {
            var sp = 0d;
            var counts = vs.Select(m => m.Length).ToArray();
            if (counts.Min() != counts.Max())
            {
                var sn = vs.Sum(x => Math.Pow(x.Sum(x1 => x1.Sub(x.Average())), 2));
                var ni = vs.Sum(x => x.Length - 1);
                sp = Math.Sqrt(sn.Div(ni));
            }
            else
            {
                sp = vs.Average(x => Statistics.StandardDeviation(x));
            }

            if (useUnbiasedConstant)
            {
                var d = vs.Sum(x => x.Length - 1);
                var c4 = SigmaConstants.C4(d + 1);
                sp = sp.Div(c4);
            }
            return sp;
        }
    }
}

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空