Java中的绝对偏差中位数

时间:2017-07-29 07:25:43

标签: java statistics

如何从列表中计算Median Absolute Deviation(MAD) (例如List<Double> list)?

我在编程我不知道的语言(例如in C#in R)中找到了stackoverflow的一些实现,但没有一个是Java语言。

1 个答案:

答案 0 :(得分:2)

计算中位数: 您可以使用Arrays.sort()input数组进行排序,然后if arrayLength%2==0,然后median值为(array[array.length/2-1] + array[array.length/2])/2,否则中位数为(array[array.length/2])

计算MAD: 创建Double[] intermediate - new Double[array.length]并使用intermediate为每个元素计算intermediate[i] = Math.abs(input[i]-median)数组,然后以与第一步相同的方式计算intermediate数组的中位数,并且您已做好准备。

我为你做的例子:

import java.util.Arrays;
import java.util.List;

public class MAD {

    public static void main(String[] args) {
        List<Double> input = Arrays.asList(new Double[] {1d, 1d, 2d, 2d, 4d, 6d, 9d});
        System.out.println(mad(input));
    }

    private static Double mad(List<Double> inputList) {
        Double[] input = inputList.toArray(new Double[inputList.size()]);
        Double median = median(input);
        arrayAbsDistance(input, median);
        return median(input);

    }

    private static void arrayAbsDistance(Double[] array, Double value) {
        for (int i=0; i<array.length;i++) {
            array[i] = Math.abs(array[i] - value);
        }
    }

    private static Double median(Double[] input) {
        if (input.length==0) {
            throw new IllegalArgumentException("to calculate median we need at least 1 element");
        }
        Arrays.sort(input);
        if (input.length%2==0) {
            return (input[input.length/2-1] + input[input.length/2])/2;
        } 
        return input[input.length/2];
    }
}