在正态分布
我想找到极值(任何高于或与平均不到三倍标准差)使用产生一个随机数集后发现极端值:在正态分布
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的初学者,那么在正态分布的随机生成的数字集合中真的没有极端值?
撇开编程问题,这个问题也带来了一个统计问题。
如果您的样本量很大,那么从您的值计算的样本SD将接近总体SD,并且询问平均值超过3SD的值可能是有意义的。
但是,如果您的样本很小,则任何异常值都会增加您计算的样本值SD。这意味着你可能永远不会达到3个SD。
将Z定义为。
具有N个观察值的样本,Z永远不会大于 。因此n必须是11或更大,因为可能存在异常值超过均值3 SD以上的可能性。 格鲁布斯异常值测试基于这个想法,所以有自己的表格来表示从平均值中定义了多少个偏移值,以定义一个α值的异常值。
Grubbs,F.E. Procedures for detecting outlying observations in samples。 Technometrics 11,1-21(1969)。
您首先需要异常值。所有的测量都表现良好,并从相同的分布中正确地绘制。他们都是正常分配的合法孩子。离群值正在寻找突变/半身/外星人。你需要有一个外星人混合。为了讨论起见,我们可以说你正在测量芯片上的焊球的共面性(在混凝土中研究这个问题)。假设每个零件有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))
Yay code。
你不想开始将它扔到你不确定的公式上。就像一个桶形信息公司一样,当你从过路人传给他们时,你想要在桶中保留尽可能多的水。将您的数据归入汇总统计表示您保留一个数字并丢失999.这可能是一个信息损失操作。
人类的大脑是已知最好的计算机。它使深蓝或天河看起来像算盘。首先使用它。让它看看你有什么。用最适合这项工作的工具打败你的数据。站在巨人的肩膀上。
我的建议:EDA(aka探索性数据分析)。美国国家标准与技术研究院NIST在这里制造了很好的工具。他们的爱因斯坦是聪明的,并且制作工具来使人们 - 你和我。区区凡人。所以这里是EDA链接。 http://www.itl.nist.gov/div898/handbook/eda/eda.htm
做一些情节。好的情节,告诉你关于你的数据。教科书是4情节。如果你不4绘制你的数据,那么你不知道它。直到你制作了一些人类可读和易理解的图表之前,不要创造一个方程式。它会保护你,使你的结果很好。
另外:我不认为有一个好的图书馆让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的检测开始。
祝你好运。
你不需要循环。看看下面的内容:'length(num [abs(num)> 3])'。您也可以用样本标准偏差替换3:'num [abs(num)> 3 * sd(num)]'。 – COOLSerdash 2014-08-30 19:32:15
这是一个编程问题,而不是统计问题,所以我们将它迁移到Stack Overflow。 FWIW,你的代码有错误if(i gung 2014-08-30 19:33:50
我认为这是一个统计新手,他没有意识到这不会造成离群值。我认为在编程问题背后是一个统计问题。 – EngrStudent 2014-08-31 00:57:26