Re: [問題] 四分位數Q1和Q3的計算
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
R_Language 近期熱門文章
PTT數位生活區 即時熱門文章