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.