Re: [問題] 四分位數Q1和Q3的計算

看板R_Language作者 (攸藍)時間9年前 (2015/04/06 10:41), 9年前編輯推噓1(101)
留言2則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《yeuan (心要夠堅定)》之銘言: : [問題類型]: : 一組數列 用R計算跟手算的不同 : [軟體熟悉度]: : 新手(剛開始摸索) : [問題敘述]: : 一組數列:-10,-6,-2,2,6,10 計算Q1與Q3 : Q1=0.25*6=1.5 →1.5不是整數 故找比1.5大的下一個整數為2 : 所以Q1應該為-6 以此類推Q3應該為6 : 但是R算出來Q1=-5 Q3=5 : 請問我有哪邊弄錯了嗎@@ 不太明白為什麼會不一樣 : [程式範例]: : y=c(-10,-6,-2,2,6,10) : quantile(y,probs=c(0.25,0.75)) According to R manual (部分節錄) quantile(x, probs = seq(0, 1, 0.25), na.rm = FALSE, names = TRUE, type = 7, ...) where type is an integer between 1 and 9 selecting one of the nine quantile algorithms detailed below to be used. For types 1, 2 and 3, quantile of type i at quantile p is a discontinuous function of p. For types 4 through 9, it is a continuous function of p. For R >= 2.0.0, the default type is 7. 接著實作type 7給你看 type 7: 利用內插找sample quantile,因此你要先決定每一個x是對應在哪 根據manual提供的公式,第k個x對應的p為 p[k] = (k - 1) / (n - 1) f = function(k, n) (k-1) / (n-1) f(1:6, 6) # [1] 0.0 0.2 0.4 0.6 0.8 1.0 因此,當有6個sample時,分別對應到,0, 0.2,... , 1.0 你所求的0.25就是用x的第二個跟第三個資料做內插 假設所求是xx,0.25的quantile,資料同你的,是-10, -6, -2, 2, 6, 10 -2 - (-6) xx - (-6) --------- = ----------- => 20 = (xx + 6)*20 => xx = -5 0.4 - 0.2 0.25 - 0.2 用程式算: interpolate_f = function(x, q){ y = rep(NA, length(q)) p = (seq_along(x) - 1) / (length(x)-1) for (i in seq_along(q)){ loc = sum(q[i] >= p) y[i] = (x[loc+1] - x[loc]) / (p[loc+1] - p[loc]) * (q[i] - p[loc]) + x[loc] } return(y) } interpolate_f(y, c(.25, .75)) # -5, 5 # 同quantile的答案 補充一點:你要的quatile應該是type 1 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.83.13.1 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1428288069.A.E9C.html ※ 編輯: celestialgod (111.83.13.1), 04/06/2015 10:49:48

04/06 22:12, , 1F
謝謝!
04/06 22:12, 1F

04/06 23:46, , 2F
推追根究底。
04/06 23:46, 2F
文章代碼(AID): #1L8V95wS (R_Language)
討論串 (同標題文章)
文章代碼(AID): #1L8V95wS (R_Language)