Ich war entsetzt, als ich kürzlich feststellte, dass Matlab für die Stichprobenvarianz einer skalaren Eingabe zurückgibt :
>> var(randn(1),0) %the '0' here tells var to give sample variance
ans =
0
>> var(randn(1),1) %the '1' here tells var to give population variance
ans =
0
Irgendwie wird die Stichprobenvarianz in diesem Fall nicht durch . R gibt ein NaN für einen Skalar zurück:
> var(rnorm(1,1))
[1] NA
Was ist Ihrer Meinung nach eine sinnvolle Methode, um die Populationsstichprobenvarianz für einen Skalar zu definieren ? Welche Konsequenzen könnte es für die Rückgabe einer Null anstelle eines NaN haben?
edit : aus der Hilfe für Matlab's var
:
VAR normalizes Y by N-1 if N>1, where N is the sample size. This is
an unbiased estimator of the variance of the population from which X is
drawn, as long as X consists of independent, identically distributed
samples. For N=1, Y is normalized by N.
Y = VAR(X,1) normalizes by N and produces the second moment of the
sample about its mean. VAR(X,0) is the same as VAR(X).
ein kryptischer Kommentar im m-Code für var-Zustände:
if w == 0 && n > 1
% The unbiased estimator: divide by (n-1). Can't do this
% when n == 0 or 1.
denom = n - 1;
else
% The biased estimator: divide by n.
denom = n; % n==0 => return NaNs, n==1 => return zeros
end
Das heißt, sie entscheiden sich ausdrücklich dafür, kein NaN
Selbst zurückzugeben, wenn der Benutzer eine Stichprobenvarianz für einen Skalar anfordert. Meine Frage ist, warum sie sich dafür entscheiden sollten, nicht wie.
edit : Ich sehe, dass ich fälschlicherweise gefragt habe, wie man die Populationsvarianz eines Skalars definieren soll (siehe durchgestrichene Linie oben). Dies hat wahrscheinlich viel Verwirrung gestiftet.
var()
.
var(randn(1),0)
Gewichtet die Varianz tatsächlich mit 0 und daher ist die Ausgabe 0. Das zweite Element wird verwendet, um einen gewichteten Durchschnitt zu erstellen,var