Den 2021-07-12 kl. 15:09, skrev Matthias Gondan:
Weighted mean behaves differently:

One difference is that density has a named argument 'weights' not present in weighted.mean, which instead has 'w' for weights.
Annoying.

So, in your examples, the argument 'weights = ' is always ignored, at least for weighted.mean.default:

> stats:::weighted.mean.default
function (x, w, ..., na.rm = FALSE)
{
    if (missing(w)) {
        if (na.rm)
            x <- x[!is.na(x)]
        return(sum(x)/length(x))
    }
    if (length(w) != length(x))
        stop("'x' and 'w' must have the same length")
    if (na.rm) {
        i <- !is.na(x)
        w <- w[i]
        x <- x[i]
    }
    sum((x * w)[w != 0])/sum(w)
}

But, using 'w' for weights, missing values in weights will work only if na.rm = TRUE and they match missing values in x. As documented.

[...]
• no warning for sum(weights) != 1

and no warning for sum(w) != 1

That's because the weights w are normalized (after removing weights corresponding to missing values in x).

G,

weighted.mean(c(1, 2, 3, 4), weights=c(1, 1, 1, 1))
[1] 2.5
weighted.mean(c(1, 2, 3, NA), weights=c(1, 1, 1, 1))
[1] NA
weighted.mean(c(1, 2, 3, NA), weights=c(1, 1, 1, 1), na.rm=TRUE)
[1] 2




Von: Richard O'Keefe
Gesendet: Montag, 12. Juli 2021 13:18
An: Matthias Gondan
Betreff: Re: [R] density with weights missing values

Does your copy of R say that the weights must add up to 1?
?density doesn't say that in mine.   But it does check.

On Mon, 12 Jul 2021 at 22:42, Matthias Gondan <matthias-gon...@gmx.de> wrote:

Dear R users,

This works as expected:

• plot(density(c(1,2, 3, 4, 5, NA), na.rm=TRUE))

This raises an error

• plot(density(c(1,2, 3, 4, 5, NA), na.rm=TRUE, weights=c(1, 1, 1, 1, 1, 1)))
• plot(density(c(1,2, 3, 4, 5, NA), na.rm=TRUE, weights=c(1, 1, 1, 1, 1, NA)))

This seems to work (it triggers a warning that the weights don’t add up to 1, 
which makes sense*):

• plot(density(c(1,2, 3, 4, 5, NA), na.rm=TRUE, weights=c(1, 1, 1, 1, 1)))

Questions

• But shouldn’t the na.rm filter also filter the corresponding weights?
• Extra question: In case the na.rm filter is changed to filter the weights, 
the check for sum(weights) == 1 might trigger false positive warnings since the 
weights might not add up to 1 anymore

Best wishes,

Matthias


         [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to