2011-02-05 88 views
4

比方說,我得到了這組數據。排序後,可以像下面那樣繪製分佈。簡單的數據處理

M=[-99 -99 -44.5 -7.375 -5.5 -1.666666667 -1.333333333 -1.285714286 0.436363636 2.35 3.3 4.285714286 5.052631579 6.2 7.076923077 7.230769231 7.916666667 9.7 10.66666667 16.16666667 17.4 19.2 19.6 20.75 24.25 34.5 49.5] 

plot for the data

我的問題是我怎麼找到那些中間範圍中值並記錄索引。使用正態分佈還是其他的東西?感謝你的幫助!

圖片爲喬納斯enter image description here

+1

你的選擇是什麼 「中間」 的範圍肯定是相當主觀的。 – 2011-02-05 13:55:39

+0

而不是說'中間'範圍,我認爲可能會說'一個有限的方差值序列'更好。實際上,範圍應該隨着不同的數據集而改變。 – view 2011-02-05 15:40:30

回答

6

假設您的中段取值範圍爲[-10 10],則指數將是:

> find(-10< M & M< 10) 
ans = 

    4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 

請注意,您可以通過邏輯編制索引還存取權限的值,比如:

> M(-10< M & M< 10) 
ans = 

Columns 1 through 15: 

    -7.37500 -5.50000 -1.66667 -1.33333 and so on ... 

而且讓你的中檔,只是:

> q= quantile(M(:), [.25 .75]) 
q = 

    -1.3214 
    17.0917 

> find(q(1)< M & M< q(2)) 
ans = 

    8 9 10 11 12 13 14 15 16 17 18 19 20 

此外還請注意M(:)用於確保quantileM作爲向量。你可以採用約定,你的程序中的所有向量都是列向量,然後大部分函數會自動正確處理它們。

更新:現在
,對於位數的一個非常短的描述是:它們是從一個隨機變量的累積分佈函數(cdf)取點。 (現在你的M被認爲是一種cdf,因爲它的非降低,可以歸一化爲1)。現在'簡單'是一個分位數.5的數據意味着50%的數值低於這個分位數'。關於分位數的更多細節可以在例如here中找到。

+0

你好吃。感謝您的回答。但是你能否在分位數函數中詳細解釋一下[.25.75]?非常感謝! – view 2011-02-05 18:46:16

1

如果你不知道先驗你的中間範圍是什麼,但你知道你想放棄曲線開始和結束時的異常值,如果你有統計工具箱,可以使用ROBUSTFIT對您的數據進行強健的線性迴歸,只保留內點。

M=[-99 -99 -44.5 -7.375 -5.5 -1.666666667 -1.333333333 -1.285714286 0.436363636 2.35 3.3 4.285714286 5.052631579 6.2 7.076923077 7.230769231 7.916666667 9.7 10.66666667 16.16666667 17.4 19.2 19.6 20.75 24.25 34.5 49.5]; 

%# robust linear regression 
x = find(isfinite(M)); %# eliminate NaN or Inf 
[u,s]=robustfit(x,M(x)); 

%# inliers have a weight > 0.25 (raise this value to be stricter) 
inlierIdx = s.w > 0.25; 
middleRangeX = x(inlierIdx) 
middleRangeValues = M(x(inlierIdx)) 

%# plot with the regression in red and the good values in green 
plot(x,M(x),'-b.',x,u(1)+u(2)*x,'r') 
hold on,plot(middleRangeX,middleRangeValues,'*r') 

the plot

middleRangeX = 
    Columns 1 through 21 
    4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 
    Column 22 
    25 
middleRangeValues = 
    Columns 1 through 10 
     -7.375   -5.5  -1.6667  -1.3333  -1.2857  0.43636   2.35   3.3  4.2857  5.0526 
    Columns 11 through 20 
      6.2  7.0769  7.2308  7.9167   9.7  10.667  16.167   17.4   19.2   19.6 
    Columns 21 through 22 
     20.75  24.25