使用javascript从一组数据中删除异常值并使数据一致的准确方法是什么?

使用javascript从一组数据中删除异常值并使数据一致的准确方法是什么?,javascript,statistics,data-consistency,Javascript,Statistics,Data Consistency,假设我们有以下一组数据。 2.33,2.19,4.7,2.69,2.8,2.12,3.01,2.5,1.98,2.34 如何通过使用JavaScript或任何其他可以在JavaScript中实现的数学方法来消除异常值,从而从上述示例中选择一致的数据 我采用以下计算方法: 平均值, 标准差, 最小值(平均值-标准偏差), 最大值(平均值+标准偏差)。并考虑了介于最小值和最大值之间的数据 我们有没有更好的方法来获得准确度?我认为你的方法不够,你需要确定一个数字是非常高还是非常低,然后再决定它是否是异

假设我们有以下一组数据。 2.33,2.19,4.7,2.69,2.8,2.12,3.01,2.5,1.98,2.34

如何通过使用JavaScript或任何其他可以在JavaScript中实现的数学方法来消除异常值,从而从上述示例中选择一致的数据

我采用以下计算方法: 平均值, 标准差, 最小值(平均值-标准偏差), 最大值(平均值+标准偏差)。并考虑了介于最小值和最大值之间的数据


我们有没有更好的方法来获得准确度?

我认为你的方法不够,你需要确定一个数字是非常高还是非常低,然后再决定它是否是异常值。 为了实现这一点,我们需要找到
Q1
Q1
来计算IQR,其中
Q3–Q1

Q3和&Q1
是四分位数,了解更多信息:
IQR
is(四分位数范围)了解更多信息:

所有这些我们都可以检查异常值,这些异常值是非常低和非常高的:
极高值是大于
Q3+(1.5*IQR)

极低值是低于
Q1-(1.5*IQR)

所以在代码中

// sort array ascending
const dataSet= [2, 2.5, 2.25, 4, 1, -3, 10, 20];
const asc = arr => arr.sort((a, b) => a - b);

const quartile = (arr, q) => {
    const sorted = asc(arr);
    const pos = (sorted.length - 1) * q;
    const base = Math.floor(pos);
    const rest = pos - base;
    if (sorted[base + 1] !== undefined) {
        return sorted[base] + rest * (sorted[base + 1] - sorted[base]);
    } else {
        return sorted[base];
    }
};

const Q1 = quartile(dataSet, .25);
const Q3 = quartile(dataSet, .75);
const IQR = Q3 - Q1;

let noneOutliers=[]
dataSet.forEach(number => {
    if(number > (Q3 + (1.5 * IQR)) || number < (Q1 - (1.5 * IQR))) {
        console.log('number is outlier');
    }
    else {
        noneOutliers.push(number);
    }
});
//对数组进行升序排序
常量数据集=[2,2.5,2.25,4,1,-3,10,20];
常量asc=arr=>arr.sort((a,b)=>a-b);
常数四分位数=(arr,q)=>{
排序常数=asc(arr);
const pos=(sorted.length-1)*q;
常数基准=数学楼层(位置);
const rest=位置-基准;
如果(已排序的[base+1]!==未定义){
返回已排序的[base]+rest*(已排序的[base+1]-已排序的[base]);
}否则{
返回排序的[基];
}
};
常数Q1=四分位数(数据集,.25);
常数Q3=四分位数(数据集,.75);
常数IQR=Q3-Q1;
让非异常值=[]
dataSet.forEach(编号=>{
如果(编号>(Q3+(1.5*IQR))| |编号<(Q1-(1.5*IQR))){
console.log('编号为异常值');
}
否则{
非异常值。推送(数字);
}
});
我使用的四分位函数来自这个答案

对于方法,您可以查看此视频


我认为你的方法是不够的,你需要确定一个数字是真的非常高还是非常低,然后再决定它是否是一个异常值。 为了实现这一点,我们需要找到
Q1
Q1
来计算IQR,其中
Q3–Q1

Q3和&Q1
是四分位数,了解更多信息:
IQR
is(四分位数范围)了解更多信息:

所有这些我们都可以检查异常值,这些异常值是非常低和非常高的:
极高值是大于
Q3+(1.5*IQR)

极低值是低于
Q1-(1.5*IQR)

所以在代码中

// sort array ascending
const dataSet= [2, 2.5, 2.25, 4, 1, -3, 10, 20];
const asc = arr => arr.sort((a, b) => a - b);

const quartile = (arr, q) => {
    const sorted = asc(arr);
    const pos = (sorted.length - 1) * q;
    const base = Math.floor(pos);
    const rest = pos - base;
    if (sorted[base + 1] !== undefined) {
        return sorted[base] + rest * (sorted[base + 1] - sorted[base]);
    } else {
        return sorted[base];
    }
};

const Q1 = quartile(dataSet, .25);
const Q3 = quartile(dataSet, .75);
const IQR = Q3 - Q1;

let noneOutliers=[]
dataSet.forEach(number => {
    if(number > (Q3 + (1.5 * IQR)) || number < (Q1 - (1.5 * IQR))) {
        console.log('number is outlier');
    }
    else {
        noneOutliers.push(number);
    }
});
//对数组进行升序排序
常量数据集=[2,2.5,2.25,4,1,-3,10,20];
常量asc=arr=>arr.sort((a,b)=>a-b);
常数四分位数=(arr,q)=>{
排序常数=asc(arr);
const pos=(sorted.length-1)*q;
常数基准=数学楼层(位置);
const rest=位置-基准;
如果(已排序的[base+1]!==未定义){
返回已排序的[base]+rest*(已排序的[base+1]-已排序的[base]);
}否则{
返回排序的[基];
}
};
常数Q1=四分位数(数据集,.25);
常数Q3=四分位数(数据集,.75);
常数IQR=Q3-Q1;
让非异常值=[]
dataSet.forEach(编号=>{
如果(编号>(Q3+(1.5*IQR))| |编号<(Q1-(1.5*IQR))){
console.log('编号为异常值');
}
否则{
非异常值。推送(数字);
}
});
我使用的四分位函数来自这个答案

对于方法,您可以查看此视频


任何一组数据都可以用五个数字的摘要来描述。这五个数字为您提供了查找模式和异常值所需的信息,包括(按升序排列)。数据集的最小值或最低值为第一个四分位Q1,表示所有数据列表的四分之一——数据集的中值,表示整个数据列表的中点——第三个四分位Q3,它表示所有数据列表中四分之三的路径,即数据集的最大值或最高值


IQR=Q3-Q1。图1显示了数据是如何围绕中间值分布的。它不易受异常值的影响,因此更有用。

任何一组数据都可以用五个数字的摘要来描述。这五个数字为您提供了查找模式和异常值所需的信息,包括(按升序排列)。数据集的最小值或最低值为第一个四分位Q1,表示所有数据列表的四分之一——数据集的中值,表示整个数据列表的中点——第三个四分位Q3,它表示所有数据列表中四分之三的路径,即数据集的最大值或最高值


IQR=Q3-Q1。图1显示了数据是如何围绕中间值分布的。它比离群值的范围更不易受影响,因此可以更有用。

你所说的“一致数据”是什么意思?你认为哪些数字是数组中的离群值?你所说的“一致数据”是什么意思?你认为哪些数字是数组中的离群值?