离散变量的非参数公差区间

机器算法验证 非参数 公差区间
2022-03-25 15:53:27

假设您有一群人以从 1 到 10 的离散量表对他们喜欢电影的程度进行评分,并且您希望区间 [ l , u ] 使得(至少)95% 的置信度,(至少)90看过这部电影的人中有 % 的人会给它评分不低于l且不高于u[ l , u ] 是一个(双边)容差区间,具有 95% 的置信度和 90% 的覆盖率。(需要明确的是,95% 的置信度意味着如果您多次重复此过程,95% 的生成区间将获得至少 90% 的总体覆盖率。)当然,我们通常希望 [ l , u ] 尽可能窄在满足我们要求的情况下是可能的。

我见过各种非参数方法来构建连续随机变量的容差区间。我还看到了为二项式和泊松变量构建公差区间的方法。(R 包tolerance实现了其中几种方法;Young,2010。)但是当分布未知时离散变量呢?对于像我的示例中的评分量表通常是这种情况,并且假设二项分布似乎并不安全,因为真实的评分量表数据经常表现出诸如多模态之类的怪异。

回归连续变量的非参数方法是否有意义?或者,蒙特卡罗方法怎么样,例如生成 1,000 个样本的自举复制并找到一个区间,在至少 950 个复制中捕获至少 90% 的样本?

杨,DS(2010)。容差:用于估计容差区间的 R 包。统计软件杂志,36(5),1-39。取自http://www.jstatsoft.org/v36/i05

1个回答

感兴趣的变量以类(单元格)概率呈多项式此外,这些类被赋予了自然顺序。p1,p2,...,p10

的最小“预测区间”90%

p     = [p1, ..., p10] # empirical proportions summing to 1
l     = 1
u     = length(p)
cover = 0.9

pmass = sum(p)

while (pmass - p[l] >= cover) OR (pmass - p[u] >= cover)
    if p[l] <= p[u]
       pmass = pmass - p[l]
       l     = l + 1  
    else # p[l] > p[u]
       pmass = pmass - p[u]
       u     = u - 1
    end        
end

分位数估计的不确定性(例如,方差、置信度)的非参数测量确实可以通过标准引导方法获得。l,u

第二种方法:直接“引导搜索”

下面我提供了可运行的 Matlab 代码,该代码直接从引导的角度来处理这个问题(代码不是最佳矢量化的)。

%% set DGP parameters:
p = [0.35, 0.8, 3.5, 2.2, 0.3, 2.9, 4.3, 2.1, 0.4, 0.2];
p = p./sum(p); % true probabilities

ncat = numel(p);
cats = 1:ncat;

% draw a sample:
rng(1703) % set seed
nsamp = 10^3; 
samp  = datasample(1:10, nsamp, 'Weights', p, 'Replace', true);

检查这是否有意义。

psamp = mean(bsxfun(@eq, samp', cats)); % sample probabilities
bar([p(:), psamp(:)])

在此处输入图像描述

运行引导模拟。

%% bootstrap simulation:
rng(240947)

nboots = 2*10^3;
cover  = 0.9;
conf   = 0.95;    

tic
Pmat = nan(nboots, ncat, ncat);
for b = 1:nboots

    boot  = datasample(samp, nsamp, 'Replace', true); % draw bootstrap sample    
    pboot = mean(bsxfun(@eq, boot', cats));      

    for l = 1:ncat
        for u = l:ncat
            Pmat(b, l, u) = sum(pboot(l:u));   
        end
    end

end
toc % Elapsed time is 0.442703 seconds.

从每个 bootstrap 过滤器复制包含至少 ,并计算这些区间的(频率论者)置信度估计。[l,u]90%

conf_mat = squeeze(mean(Pmat >= cover, 1))

     0         0         0         0         0         0         0    1.0000    1.0000    1.0000
     0         0         0         0         0         0         0    1.0000    1.0000    1.0000
     0         0         0         0         0         0         0    0.3360    0.9770    1.0000
     0         0         0         0         0         0         0         0         0         0
     0         0         0         0         0         0         0         0         0         0
     0         0         0         0         0         0         0         0         0         0
     0         0         0         0         0         0         0         0         0         0
     0         0         0         0         0         0         0         0         0         0
     0         0         0         0         0         0         0         0         0         0
     0         0         0         0         0         0         0         0         0         0

选择那些满足置信度要求的。

[L, U] = find(conf_mat >= conf);
[L, U]

 1     8
 2     8
 1     9
 2     9
 3     9
 1    10
 2    10
 3    10

说服自己上面的引导方法是有效的

Bootstrap 样本旨在成为我们想要的东西的替代品,但不是,即:从真正的基础人群中独立抽取新的、独立的数据(简称:新数据)。

在我给出的示例中,我们知道数据生成过程(DGP),因此我们可以“作弊”并将与引导重新采样有关的代码行替换为来自实际 DGP 的新的、独立的绘图。

newsamp = datasample(cats, nsamp, 'Weights', p, 'Replace', true);
pnew    = mean(bsxfun(@eq, newsamp', cats));

然后我们可以通过将引导方法与理想进行比较来验证它。以下是结果。

来自新的独立数据的置信矩阵得出:

     0         0         0         0         0         0         0    1.0000    1.0000    1.0000
     0         0         0         0         0         0         0    1.0000    1.0000    1.0000
     0         0         0         0         0         0         0    0.4075    0.9925    1.0000
     0         0         0         0         0         0         0         0         0         0
     0         0         0         0         0         0         0         0         0         0
     0         0         0         0         0         0         0         0         0         0
     0         0         0         0         0         0         0         0         0         0
     0         0         0         0         0         0         0         0         0         0
     0         0         0         0         0         0         0         0         0         0
     0         0         0         0         0         0         0         0         0         0

相应的95%-置信度下限和上限:

 1     8
 2     8
 1     9
 2     9
 3     9
 1    10
 2    10
 3    10

我们发现置信度矩阵非常一致并且边界相同......因此验证了引导方法。