有两种估计分位数,一种是在估计指定的分位数,另一种是估计全部的分位数,也就得到分布函数。这种估计存在的误差满足
\[\Pr(|\overline{Y}-E[\overline{Y}]|\ge\epsilon) \le 2\exp(\dfrac{-2\epsilon^2n}{1^2}) = \delta \]
这在前面的章节已有讨论。
我们先考虑某一分位数,例如给定一个集合 \(P=\{p_1,\cdots,p_n\}\) ,要估计 \(\phi\) 分位数 \(t\) ,即要找到
\[F_X(t) \approx \mathrm{nrank}_P(t) = \dfrac{|\{p_i\le t\mid p_i\in P\}|}{n} \]
方法非常简单:先将集合 \(P\) 中的元素从小到大排序,然后找到前 \(\phi\cdot n\) 个元素,其中的最后一个元素就是 \(\phi\) 分位数。
对于分布函数估计,考虑将误差分为两部分 \(\epsilon=\epsilon_1+\epsilon_2\) ,然后取 \(1/\epsilon_1\) 个分位数
\[\{\phi_1,\cdots,\phi_{1/\epsilon_1}\},\quad \phi_j = j\cdot \epsilon_1 + \dfrac{\epsilon_1}{2} \]
我们按照之前的方法依次估计这 \(1/\epsilon_1\) 个分位数,这样就得到了分布函数的 \(1/\epsilon_1\) 个离散点,将它们连接起来近似分布函数。
根据超出 \(\epsilon\) 误差的概率估计
\[\Pr(|\mathrm{nrank}_P(t)-F_X(t)|\ge\epsilon) \le \dfrac{4}{\epsilon}\exp(-\dfrac{\epsilon^2n}{2}) \]
我们常常令
\[\dfrac{4}{\epsilon}\exp(-\dfrac{\epsilon^2n}{2}) < \delta,\quad n > \dfrac{2}{\epsilon^2}\ln(\dfrac{4}{\epsilon\delta}) \]
这样 \(n\) 就是至少要取的样本点数。一般来说,我们常常不需要取到这个下界,即使 \(n\) 略小于这一下界也能得到较好的估计。
最后给出两个估计案例,分别估计
\[f(x) = \dfrac{8x}{\pi^2},\quad x\in\left[0,\dfrac{\pi}{2}\right] \]
的分布函数和 \([0,1]\) 上的均匀分布的分布函数,取样本点 \(n=100,1000,2000\) ,以及 \(\epsilon=0.1\) 。
% 设为0.1,设为0.01
epsilon = 0.1;
delta = 0.01;
% 取一半进行划分
epsilon1 = epsilon / 2;
N = [100 1000 2000];
pic = 1;
for j = 1:3
n = N(j);
phi = epsilon1 + epsilon1/2 : epsilon1 : 1 + epsilon1/2;
t = zeros(1, length(phi));
ind = 1;
x = random_number(n);
x = sort(x);
for i = 1:n
if (i / n) >= phi(ind)
t(ind) = x(i);
ind = ind + 1;
end
end
phi(ind) = 1;
t(ind) = pi/2;
phi = [0 phi];
t = [0 t];
figure(pic);
plot(t, phi, 'r');
pic = pic + 1;
end
for j = 1:3
n = N(j);
phi = epsilon1 + epsilon1/2 : epsilon1 : 1 + epsilon1/2;
t = zeros(1, length(phi));
ind = 1;
x = rand(1,n);
x = sort(x);
for i = 1:n
if (i / n) >= phi(ind)
t(ind) = x(i);
ind = ind + 1;
end
end
phi(ind) = 1;
t(ind) = 1;
phi = [0 phi];
t = [0 t];
figure(pic);
plot(t, phi, 'r');
pic = pic + 1;
end