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
Antworten:
Skalare können keine Populationsvarianz haben, obwohl es sich um einzelne Stichproben aus Populationen handeln kann, die eine (Populations-) Varianz aufweisen. Wenn Sie dies abschätzen möchten, benötigen Sie mindestens: mehr als einen Datenpunkt in der Stichprobe, eine weitere Stichprobe aus derselben Verteilung oder einige vorherige Informationen zur Populationsvarianz anhand eines Modells.
Übrigens hat R fehlendes (NA) nicht NaN zurückgegeben
quelle
NA
vs zu erkennenNaN
. Schön, dass es beides hat ...Ich bin mir sicher, dass die Leute in diesem Forum bessere Antworten haben werden. Ich denke Folgendes:
Ich denke, Rs Antwort ist logisch. Die Zufallsvariable hat eine Populationsvarianz, aber es stellt sich heraus, dass Sie mit 1 Stichprobe nicht genügend Freiheitsgrade haben, um die Stichprobenvarianz abzuschätzen, dh Sie versuchen, Informationen zu extrahieren, die NICHT vorhanden sind.
In Bezug auf Matlabs Antwort weiß ich nicht, wie ich 0 rechtfertigen soll, außer dass es vom Zähler stammt.
Folgen können bizarr sein. Aber ich kann mir noch etwas anderes vorstellen, das mit der Schätzung zusammenhängt.
quelle
Ich denke, Matlab verwendet die folgende Logik für einen Skalar (analog zur Definition der Populationsvarianz), um zu vermeiden, dass NA und NAN behandelt werden müssen.
Ihre Definition ist wahrscheinlich eine Programmierkonvention, die möglicherweise einige Aspekte der Codierung erleichtert.
quelle
var
die Stichprobenvarianz für einen Skalar zurückgegeben wird, während die Populationsvarianz zurückgegeben wird. Ob es sich um ein Problem handelt oder nicht, hängt davon ab, welche Art von Fehlerbehandlungsroutinen sie intern haben. Ich stimme jedoch zu, dass ihre Konvention fehleranfällig ist.