【问题标题】:Finding extreme values in a normal distribution在正态分布中寻找极值
【发布时间】:2014-08-30 19:27:35
【问题描述】:

我想在生成一组随机数后找到极值(任何大于或小于平均值三倍标准差的值):

num = rnorm(1000)

我的代码如下所示:

extreme = function(varname) {
  for(i in varname) {
    count = 0
    m     = mean(varname)
    sd    = 3*sd(varname)
    if(i<(m-sd) || i>(m+sd)) {
      count = count + 1
    }
  }
  if(count>0) {
    print(paste("There are ", count, " extreme values found.", sep = ""))
  } else print("There are no extreme values.")
}

我总是得到“没有极端值”。我是 R 的初学者,所以在任何随机生成的服从正态分布的数字集中真的没有极值吗?

【问题讨论】:

  • 你不需要循环。看看以下内容:length(num[abs(num) &gt; 3])。您还可以将 3 替换为样本标准差:num[abs(num) &gt; 3*sd(num)]
  • 这是一个编程问题,而不是统计问题,因此我们将其迁移到 Stack Overflow。 FWIW,您的代码 if(i&lt;(m-sd)... 有错误;请记住,i 是一个 index,而不是被索引的 value
  • 我认为这是一个统计新手,他没有意识到这不会产生异常值。我认为编程问题的背后是一个统计问题。

标签: r normal-distribution


【解决方案1】:

抛开编程问题不谈,这个问题还提出了一个统计问题。

如果您的样本量很大,那么根据您的值计算出的样本 SD 将接近总体 SD,并且询问大于平均值 3SD 的值可能是有意义的。

但如果您的样本很小,任何异常值都会增加您计算为样本 SD 的值。这意味着您可能永远无法达到 3 个 SD。

将 Z 定义为。

对于 N 个观测样本,Z 永远不会大于 .因此,n 必须为 11 或更大,这样异常值才有可能与平均值相差超过 3 SD。 Grubbs 离群值检验就是基于这个想法,因此有自己的表,其中有多少个 Sds 从平均值定义了一组 alpha 值的离群值。

格拉布斯,F. E. Procedures for detecting outlying observations in samples。技术计量学 11, 1-21 (1969)。

【讨论】:

    【解决方案2】:

    您首先需要一个异常值。所有测量都表现良好,并且从相同的分布中正确得出。他们都是正态分布的合法孩子。异常值正在寻找突变体/混血儿/外星人。你需要有一个外星人。

    为了讨论起见,假设您正在测量芯片上焊球的共面性(将其接地)。假设每个零件有 1000 个焊球。可以说,将焊球放入料斗的制造技术人员洒了一些尺寸错误的(太小),并且没有告诉任何人。假设有 10% 的坏球。

    从物理上讲,这意味着有两个集群。较小的球将具有更靠近基板的中心位置,并且它们将具有较小的自然发生的方差。

    假设 POR(记录过程)焊球是 12 铣刀 +/- 1.2 铣刀,而尺寸错误的是 10 铣刀 +/- 1.0 铣刀。您可以将其模拟为两个普通组件。

    N <- 1000 #solderballs
    n1 <- N *0.90 # good solderballs
    n2 <- N * 0.10 # bad solderballs 
    
    mu1 <- -(12-10) *0.10 #weighted impact to the center of this cluster
    mu2 <- (12-10) *0.90 #weighted impact to the center of this cluster
    
    sig1 <- 1.2
    sig2 <- 1.0
    
    num = c(rnorm(n1,mean=mu1,sd=sig1),rnorm(n2,mean=mu2,sd=sig2))
    

    耶代码。

    您不想开始将其与您不确定的公式相提并论。就像一个获取信息的水桶大队一样,当您将水从一个过路人传给另一个过路人时,您希望在水桶中保留尽可能多的水。将您的数据放入汇总统计中意味着您保留一个数字并丢失 999。这可能是一个信息丢失操作。

    人脑是已知最好的计算机。它使深蓝色或天河看起来像一个算盘。首先使用它。让它看看你有什么。使用最适合这项工作的工具来处理您的数据。站在巨人的肩膀上。

    我的建议:EDA(又名探索性数据分析)。美国国家标准与技术研究院 NIST 在这里制作了很好的工具。他们的爱因斯坦很聪明,并且制造了使人们——你和我——的工具。区区凡人。所以这里是 EDA 链接。 http://www.itl.nist.gov/div898/handbook/eda/eda.htm

    制作一些情节。很好的图表,告诉你你的数据。教科书是4情节。如果你不 4-plot 你的数据,那么你就不知道它。在您制作一些人类可读和可理解的图之前,不要制作方程式。它会保护你,让你的结果很好。

    除此之外:我认为 R 没有一个好的库来制作这些图,我希望有。最好去“4plot(mydata)”并获得4-plot.

    让我们制作一个趋势图、一个滞后图、一个直方图和一个正态概率图。这些是将数据输入大脑以进行训练的方法。

    在这里,你可以用这个制作图表:

    plot(num, type="l")
    lines(lowess(num,f=1/10),col="Red")
    lag.plot(num)
    hist(num,probability=TRUE, breaks=20)
    qqnorm(num)
    grid()
    

    鉴于问题的性质,JEDEC 说“计算范围”或“计算从平均值到尾部的最大距离”。这是两个不同的指标,当您查找“Tiffanies”时,它们开始能够检测到大约 2.8 到 3.0 标准差的异常值。如果您要寻找 1 个异常值或 100 个(甚至 2 个),这是一个根本不同的命题。

    就个人而言,对于“蒂芙尼问题”,我的指标可以在与平均值有 1.55 个标准差时可靠地触发。不过,您最好的开始是 JEDEC 及其 2.8-3.0 的检测开始。

    祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多