Цитата(nokh @ 12.04.2015 - 06:58)

PS. В подходе р2004r не понял откуда выбирать значения, если интервал min-max не определён. Был бы признателен за код с вашим вариантом р.
1. Я сразу сказал, что берусь оценить доверительный интервал только для положения медианы. Подход точно такой же как и в вашем случае, часть выборки нам известно в каких границах лежит. Для этой части мы принимаем предположение (как и у вас) что всё линейно и делаем генерацию точек из униформного распределения с границами заданными квантиляли и медианой. Для получившейся ситуации считаем положение медианы, накапливая такие перевыборок получаем доверительный интервал .
2.
Код
# Восстановим сколько скорее всего попало при расчете в конкретный квантиль
> table(cut(1:54, quantile(1:54),5670252.lowest=T))
[1,14.2] (14.2,27.5] (27.5,40.8] (40.8,54]
14 13 13 14
> table(cut(1:37, quantile(1:37),5670252.lowest=T))
[1,10] (10,19] (19,28] (28,37]
10 9 9 9
# Перевыборка медианы происходит вот таким образом
> median(c(runif(9, min=7.0, max=7.9), runif(9, min=7.9, max=9.7)))
[1] 7.855721
> median(c(runif(9, min=7.0, max=7.9), runif(9, min=7.9, max=9.7)))
[1] 7.901809
> median(c(runif(9, min=7.0, max=7.9), runif(9, min=7.9, max=9.7)))
[1] 7.775273
> median(c(runif(9, min=7.0, max=7.9), runif(9, min=7.9, max=9.7)))
[1] 8.010139
> median(c(runif(9, min=7.0, max=7.9), runif(9, min=7.9, max=9.7)))
[1] 7.856393
Доверительный интервал для второй выборки
> quantile(replicate(10000, median(c(runif(9, min=7.0, max=7.9), runif(9, min=7.9, max=9.7)))), probs=c(0.025, 0.5, 0.975))
2.5% 50% 97.5%
7.796376 7.927046 8.167319
> quantile(replicate(100000, median(c(runif(9, min=7.0, max=7.9), runif(9, min=7.9, max=9.7)))), probs=c(0.025, 0.5, 0.975))
2.5% 50% 97.5%
7.795279 7.928610 8.165428
Для первой выборки
> quantile(replicate(10000, median(c(runif(13, min=5.6, max=6.8), runif(13, min=6.8, max=9.3)))), probs=c(0.025, 0.5, 0.975))
2.5% 50% 97.5%
6.697030 6.828900 7.062315
> quantile(replicate(100000, median(c(runif(13, min=5.6, max=6.8), runif(13, min=6.8, max=9.3)))), probs=c(0.025, 0.5, 0.975))
2.5% 50% 97.5%
6.698919 6.828830 7.073703
Медианы генсовокупностей из которых были извлечены выьорки не имеют шанса встретиться если извлечение выборок шло случайно.
Оценка получается более [s]широкой[\s] узкой чем просто бутстреп исходной выборки
Код
# модельная генсовокупность
> x<-rnorm(54, mean=6.8, sd=1.3)
> quantile(x)
0% 25% 50% 75% 100%
2.716833 6.051314 6.823896 7.658319 9.626783
> quantile(replicate(100000, median(c(runif(13, min=6.051, max=6.823), runif(13, min=6.823, max=7.65)))), probs=c(0.025, 0.5, 0.975))
2.5% 50% 97.5%
6.748091 6.824059 6.905382
# генсовокупность порождает вот такие варианты выборки в пределе
> quantile(replicate(10000, median(rnorm(54, mean=6.8, sd=1.3)) ), probs=c(0.025, 0.5, 0.975))
2.5% 50% 97.5%
6.368884 6.799687 7.231649
> quantile(replicate(100000, median(rnorm(54, mean=6.8, sd=1.3)) ), probs=c(0.025, 0.5, 0.975))
2.5% 50% 97.5%
6.371881 6.800581 7.228905
> quantile(replicate(100000, median(sample(x, )) ), probs=c(0.025, 0.5, 0.975))
x= size= replace= prob=
# настоящий бутстреп медианы выборки
> quantile(replicate(100000, median(sample(x, replace=T)) ), probs=c(0.025, 0.5, 0.975))
2.5% 50% 97.5%
6.438816 6.823896 7.119538
И поправка плывет от размера sd (и скорее всего вида распределения), хотя и не зависит похоже от размера выборки. Похоже раз такая зависимость есть, то проще фитить в эти процентили какое то семейство распределений и считать уже по нему различия.
Код
> res.butstr <- sapply(20:100, function(n) {x<- rnorm(n, mean=6.8, sd=3.3); q<- quantile(x); qn<- table(q); quantile(replicate(10000, median(c(runif(qn[2], min=q[2], max=q[3]), runif(qn[3], min=q[3], max=q[4]))) ), probs=c(0.025, 0.5, 0.975)) / quantile(replicate(10000, median(sample(x, )) ), probs=c(0.025, 0.5, 0.975)) })
> plot(20:100, t(res.butstr)[,1], ylim=range(as.vector(res.butstr)))
> points(20:100, t(res.butstr)[,2], col="green")
> points(20:100, t(res.butstr)[,3], col="red")