2014-08-30 120 views
0

我想找到極值(任何高於或與平均不到三倍標準差)使用產生一個隨機數集後發現極端值:在正態分佈

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的初學者,那麼在正態分佈的隨機生成的數字集合中真的沒有極端值?

+0

你不需要循環。看看下面的內容:'length(num [abs(num)> 3])'。您也可以用樣本標準偏差替換3:'num [abs(num)> 3 * sd(num)]'。 – COOLSerdash 2014-08-30 19:32:15

+1

這是一個編程問題,而不是統計問題,所以我們將它遷移到Stack Overflow。 FWIW,你的代碼有錯誤if(i <(m-sd)...';記住'i'是一個*索引*,而不是被索引的*值* – gung 2014-08-30 19:33:50

+1

我認爲這是一個統計新手,他沒有意識到這不會造成離羣值。我認爲在編程問題背後是一個統計問題。 – EngrStudent 2014-08-31 00:57:26

回答

2

撇開編程問題,這個問題也帶來了一個統計問題。

如果您的樣本量很大,那麼從您的值計算的樣本SD將接近總體SD,並且詢問平均值超過3SD的值可能是有意義的。

但是,如果您的樣本很小,則任何異常值都會增加您計算的樣本值SD。這意味着你可能永遠不會達到3個SD。

將Z定義爲enter image description here

具有N個觀察值的樣本,Z永遠不會大於enter image description here 。因此n必須是11或更大,因爲可能存在異常值超過均值3 SD以上的可能性。 格魯布斯異常值測試基於這個想法,所以有自己的表格來表示從平均值中定義了多少個偏移值,以定義一個α值的異常值。

Grubbs,F.E. Procedures for detecting outlying observations in samples。 Technometrics 11,1-21(1969)。

0

您首先需要異常值。所有的測量都表現良好,並從相同的分佈中正確地繪製。他們都是正常分配的合法孩子。離羣值正在尋找突變/半身/外星人。你需要有一個外星人混合。爲了討論起見,我們可以說你正在測量芯片上的焊球的共面性(在混凝土中研究這個問題)。假設每個零件有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的檢測開始。

祝你好運。