Wie soll man die Stichprobenvarianz für die Skalareingabe definieren?


8

Ich war entsetzt, als ich kürzlich feststellte, dass Matlab für die Stichprobenvarianz einer skalaren Eingabe zurückgibt :0

>> 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:0=n- -1

> 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 NaNSelbst 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.


Wollten Sie nach der Populationsvarianzdefinition oder nach der Stichprobenvarianzdefinition fragen ? Es gibt kein Problem mit dem ersteren.
whuber

@whuber Ich denke, was Matlab tut, ist das Folgende. Wenn es auf einen Skalar stößt, wird standardmäßig die Populationsvarianz gemeldet. Wenn es auf einen Vektor trifft, wird standardmäßig die Stichprobenvarianz gemeldet, es sei denn, Sie fordern ihn auf, die Populationsvarianz zu melden. In beiden Kontexten verwenden sie dieselbe Funktion : var().

@Srikant Das mag sein, aber es geht nicht auf meine Bitte um Klarstellung ein. Ich vermute, dass in der letzten Zeile ein Tippfehler vorliegt. Die Funktion var () scheint die korrekten Werte der Populationsvarianz zurückzugeben, jedoch nicht die korrekten Werte für die Stichprobenvarianz .
whuber

@whuber 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

2
@shabbychef: Die Seite, auf die Srikant verwiesen hat, dokumentiert das von Ihnen festgestellte Verhalten deutlich. Insbesondere wird nicht behauptet, dass var () die 1 / (n-1) -Version der Varianz zurückgibt, wenn n = 1 ist. Das Problem ist also nicht, dass Matlab per se falsch ist. (Aus Sicht des Software-Designs ist diese Implementierung von var () schrecklich, weil sie versucht, zu viel in einer einzelnen Funktion zu tun, und folglich Missverständnisse und fehlerhafte Ergebnisse durch nicht wachsame Benutzer riskiert.)
whuber

Antworten:


4

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

is.nan(var(rnorm(1,1)))
[1] FALSE

Aha, ich habe nicht genug mit R gearbeitet, um die Unterscheidung zwischen NAvs zu erkennen NaN. Schön, dass es beides hat ...
Shabbychef

Natürlich hat eine einzelne Zahl eine Varianz! Es ist die mittlere quadratische Abweichung von seinem Mittelwert, nämlich Null. Vielleicht wollten Sie damit sagen, dass ein Datensatz mit einer Nummer keine Stichprobenvarianz aufweisen kann ?
whuber

Sie werden feststellen, dass ich gesagt habe , dass es keine Populationsvarianz geben kann , nicht, dass es keine Varianz geben kann. Offensichtlich hat es eine Stichprobenvarianz, die in der Tat trivial Null ist.
Conjugateprior

1
Mir ist klar geworden, dass unser Gespräch auf zwei unterschiedlichen Verständnissen von "Population" und "Stichproben" -Varianz beruht. Die Begriffe sind im Internet verwirrt, daher denke ich, dass wir beide schuldlos sind und uns möglicherweise einig sind. Ich habe versucht, die vom OP angenommene Konvention zu verwenden, deren Terminologie angibt, dass die Varianz "Stichprobe" durch n-1 dividiert, während die Varianz "Population" durch n dividiert wird. Im Übrigen scheint Ihr Kommentar (richtig) drei Abweichungen zuzulassen : die einer Zufallsvariablen, deren unvoreingenommenen Schätzer und die einer Reihe unabhängiger Realisierungen davon.
whuber

@whuber das klingt nach einer tollen Diskussion. Ich werde versuchen, mir eine Frage zu
überlegen

3

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.


3
Tatsächlich liefert eine einzelne Beobachtung einer Zufallsvariablen häufig Informationen über die Varianz dieser Variablen. Dies hängt von den Möglichkeiten ab, die Sie zulassen. Mit einer einzelnen Beobachtung aus einer Uniform-, Poisson- oder Exponentialverteilung können Sie beispielsweise den einzelnen Parameter schätzen, wodurch Sie eine Schätzung der Varianz erhalten.
whuber

@whuber danke für die Hinweise. Eigentlich habe ich mehr über die Stichprobenvarianz nachgedacht. Was ich damit sagen wollte, war, dass die Schätzung der Stichprobenvarianz bei einer Stichprobe möglicherweise nicht angemessen ist. Es steht jetzt korrigiert.
Suncoolsu

@whuber Aber das ist hier nicht der Fall; Es ist dokumentiert, dass diese Funktion die Varianz / (n-1) zurückgibt und 0 für das 0/0-Symbol zurückgibt.

@mbq Sie haben den Haftungsausschluss in der Dokumentation verpasst: "Für N = 1 wird V durch N normalisiert." Das ist eine elliptische Art zu sagen: "Für N = 1 wird der Wert 0 zurückgegeben." Der Punkt, den ich mit meinem Kommentar angesprochen habe, betrifft tatsächlich etwas anderes: Er befasst sich mit der Behauptung von @ suncoolsu, dass "Sie versuchen, Informationen zu extrahieren, die NICHT vorhanden sind", im Fall N = 1. Im Gegenteil, eine einzelne Beobachtung aus einer Zufallsvariablen liefert tatsächlich Informationen über ihre Varianz in vielen praktischen Anwendungen. (Ich sage jedoch nicht , dass die Varianz am besten durch eine
Varianzformel

@whuber Fair genug; Dies rechtfertigt dieses Verhalten jedoch nicht.

1

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.

V.einr(x)=(x- -x¯)21=0

x¯=x

Ihre Definition ist wahrscheinlich eine Programmierkonvention, die möglicherweise einige Aspekte der Codierung erleichtert.


Sie haben das Problem erneut angegeben, ohne eine Lösung anzubieten. Die Sorge ist, dass diese Konvention zu falschen Antworten führen kann, wenn die Varianzschätzung später verwendet wird. Dies verzögert sicherlich das Stadium, in dem ein Fehler erkannt wird. (Überlegen Sie, was passiert, wenn Sie versuchen, diese "Varianz" beispielsweise in einem T-Test zu verwenden.)
whuber

@whuber Nicht genau. Das OP geht davon aus, dass vardie 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.

@Srikant Um festzustellen, wer verwirrter ist, du oder ich, habe ich gelernt, dass wir beide sind! Wikipedia bezeichnet die Formel mit 1 / (n-1) als "Stichprobenvarianz" (unter en.wikipedia.org/wiki/Variance ), während Mathworld unter mathworld.wolfram.com/SampleVariance.html eindeutig 1 / n verwendet . Das OP verwendet jedoch "Stichprobenvarianz" im ersten Sinne, wenn es bemerkt, dass "die Stichprobenvarianz nicht durch 0 = n - 1 dividiert wird". In diesem Sinne gibt es keine "Stichprobenvarianz" für einen Datensatz mit einem Wert (ein "Skalar"), sodass Ihre Charakterisierung dessen, was das OP "denkt", falsch aussieht.
whuber

+1 Wie ich MATLAB kenne, denke ich, dass Ihre Hypothese (leider) wahr ist.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.