R 'density' 函数如何使用指定的权重?

How does the R 'density' function use specified weights?

如果指定了权重,R 中的 density 函数如何合并权重(假设权重总和为 1,这正是函数想要的)?我的意思是在数学上,它是如何工作的?我知道如何查看函数的底层 R 代码,但当它只是 returns 像这样的通用方法时却不知道:

> density
function (x, ...) 
UseMethod("density")
<bytecode: 0x00000000079ee728>
<environment: namespace:stats>

我问的原因是我使用未加权和加权样本制作了一些不错的并排经验密度图,这些图显示了对样本加权以使协变量分布在组之间更加平衡的好处。这些都是连续的协变量。现在我想对二分变量做同样的事情,但密度函数不是很好。我想看看我是否可以应用相同的加权方法为我拥有的二分协变量生成并排箱线图。

这是一个源代码搜索练习,但这里是:

density.default中,相关部分(除了检查权重是否有效)只有一行:

y <- .Call(C_BinDist, x, weights, lo, up, n) * totMass

在相关的源文件中,massdist.c我们发现(评论我自己的):

for(R_xlen_t i = 0; i < XLENGTH(sx) ; i++) {
    if(R_FINITE(x[i])) {
        double xpos = (x[i] - xlo) / xdelta;
        int ix = (int) floor(xpos);
        double fx = xpos - ix;
        double wi = w[i]; // w: weights vector
        if(ixmin <= ix && ix <= ixmax) {
            y[ix] += (1 - fx) * wi;
            y[ix + 1] += fx * wi;
        }
        else if(ix == -1) y[0] += fx * wi;
        else if(ix == ixmax + 1) y[ix] += (1 - fx) * wi;
    }
}