【问题标题】:Calculating Median Absolute Deviation in C#在 C# 中计算中值绝对偏差
【发布时间】:2017-09-22 10:42:38
【问题描述】:

我需要对一个数字集执行一些统计计算,其中我需要计算的一件事是中值绝对偏差。我得到了一个 ISO 标准,它告诉我的只是

我不知道如何处理这些信息,因为我没有接受过任何统计数学培训。因此,我无法将上述内容转换为 C# 函数。

【问题讨论】:

  • 我应该补充一点,原本有用的 Math.Net 库不包含 MAD 函数。
  • 什么是 med(x) ?中位数?
  • 数学没有这个。您需要为此创建自己的方法。你需要有一个清晰的算法。然后从他们开始走下坡路。
  • med(x) 可以是所有 x 的中位数吗? (即 0.50%。)

标签: c# math statistics


【解决方案1】:

如何编写一个函数,它会计算中位数,你会发现here

那么你的函数可以是这样的

var arrOfValues = new int[] { 1, 3, 5, 7, 9 };

var di = new List<int>();  //List where all di will be stored
var median = calcMedian();  //See the link how to write it
foreach(var elem in arrOfValues)
{
   di.Add(Math.Abs(elem - median));
}

【讨论】:

    【解决方案2】:

    Median 是 sorted 数组的 middle 元素(如果数组有偶数项,则为两个中间项的平均值):

      double[] source = new double[] { 1, 2, 3, 4, 5 };
    
      Array.Sort(source);
    
      double med = source.Length % 2 == 0
        ? (source[source.Length / 2 - 1] + source[source.Length / 2]) / 2.0
        : source[source.Length / 2];
    
      double[] d = source
        .Select(x => Math.Abs(x - med))
        .OrderBy(x => x)
        .ToArray();
    
      double MADe = 1.483 * (d.Length % 2 == 0
        ? (d[d.Length / 2 - 1] + d[d.Length / 2]) / 2.0
        : d[d.Length / 2]);
    

    【讨论】:

    • 我会相信你,因为我喜欢你的胡子。谢谢。
    • @Captain Kenpachi:与其信任,我更愿意进行一些测试;)
    • 当然。我确实有一组可以比较的结果。
    【解决方案3】:

    制作简单的步骤:
    1.求x[]数组的中位数med(你可以对数组进行排序,得到中间值,但还有更有效的方法)
    2. 构建与中位数绝对差的数组d[]
    3.求d[]数组的中位数
    4. 计算量

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-03
      • 1970-01-01
      • 2022-10-30
      • 2022-11-22
      • 1970-01-01
      • 2022-08-17
      • 2017-09-26
      相关资源
      最近更新 更多