什么是sigma剪辑?你怎么知道什么时候申请呢?

时间:2017-08-14 03:17:00

标签: python pandas numpy statistics data-science

我正在阅读一本关于Python的数据科学的书,作者应用'sigma-clipping operation'来删除因拼写错误而导致的异常值。但是这个过程根本没有解释。

什么是sigma剪辑?它是否仅适用于某些数据(例如,它用于美国的出生率)?

根据文字:

quartiles = np.percentile(births['births'], [25, 50, 75]) #so we find the 25th, 50th, and 75th percentiles
mu = quartiles[1] #we set mu = 50th percentile
sig = 0.74 * (quartiles[2] - quartiles[0]) #???

This final line is a robust estimate of the sample mean, where the 0.74 comes 
from the interquartile range of a Gaussian distribution.

为什么是0.74?有证据吗?

3 个答案:

答案 0 :(得分:7)

  

最后一行是对样本均值的有力估计,其中为0.74   来自高斯分布的四分位数范围

那是真的......

代码尝试使用四分位数范围来估计sigma,以使其对异常值具有鲁棒性。 0.74是校正因子。以下是如何计算它:

// burgers-controller.js
router.get('/', (req, res)=> {
    burgers
        .selectAll()
        .then((result) => {
            let handlebarsObj = {
                burgers: result
            }
            res.render('index', handlebarsObj)
        })
        .catch((err) => {
            let errMsg = {
                message: err.message,
                error: err
            }
            res.render('index', errMsg)
        })
})

// burgers.js
let burgers = {
    selectAll: () => {
        return new Promise((resolve, reject) => {
            orm
                .selectAll('burgers')
                .then((result) => {
                    resolve(result)
                })
                .catch((err) => {
                    reject(err)
                })
        })
    }
}

// orm.js
let orm = {
    selectAll: (tableName) => {
        return new Promise((resolve, reject) => {
            let queryString = "SELECT * FROM ??"

            connection.query(queryString, tableName, (err, data)=>{
                if (err) {
                    console.error("ERROR: " + err.stack)
                    reject(err)
                } else {
                    resolve(data)
                }
            })
        })
    }
}

在标准正态分布p1 = sp.stats.norm.ppf(0.25) # first quartile of standard normal distribution p2 = sp.stats.norm.ppf(0.75) # third quartile print(p2 - p1) # 1.3489795003921634 sig = 1 # standard deviation of the standard normal distribution factor = sig / (p2 - p1) print(factor) # 0.74130110925280102 中,四分位数间距为sig==1。所以1.35是将四分位数范围变为西格玛的修正因子。当然,这仅适用于正态分布。

答案 1 :(得分:4)

假设您有一组数据。计算其中位数m及其标准差sigma。仅保留范围(m-a*sigmam+a*sigma)内的数据为a的某个值,并丢弃其他所有内容。这是sigma裁剪的一次迭代。继续迭代预定次数,和/或当西格玛值的相对减少很小时停止。

Sigma剪切旨在去除异常值,以允许例如分布均值的更稳健(即,抵抗异常值)估计。因此,它适用于您希望找到异常值的数据。

至于0.74,它来自高斯分布的四分位数范围,根据文本。

答案 2 :(得分:0)

我认为这句话有一个小的错别字:“这最后一行是对样本平均值的有力估计”。根据以前的证据,我认为如果遵循正态分布,最后的结论是对出生的1 Sigma的可靠估计。