Varianz des Mittelwerts korrelierter und nicht korrelierter Daten

7

Ich habe diesen Absatz in James et al., Einführung in das statistische Lernen , S. 183-184 [1] gelesen:

Da der Mittelwert vieler stark korrelierter Größen eine höhere Varianz aufweist als der Mittelwert vieler nicht so stark korrelierter Größen, weist die aus LOOCV resultierende Testfehlerschätzung tendenziell eine höhere Varianz auf als die aus k-fachem CV resultierende Testfehlerschätzung.

Können Sie mir ein numerisches Beispiel geben, z. B. in R, um die Gültigkeit dieser Behauptung zu überprüfen?

Ich habe versucht, es mit dem folgenden Code zu überprüfen:

x = 1:100 #highly correlated data
y = sample(100) #same data without correlation
var(x) == var(y) # TRUE

Was ist los mit diesem Code?

  • LOOCV steht für "eine Kreuzvalidierung weglassen"

[1]: James, G., Witten, D., Hastie, T., Tibshirani, R. (2013),
Eine Einführung in das statistische Lernen mit Anwendungen in R ,
Springer-Texte in Statistik, Springer Science + Business Media, New York

Farid Cheraghi
quelle
Wenn Sie sort(sample(100))sehen, ist es identisch mit 1:100und daher sind ihre Abweichungen identisch. Ich kann Ihnen beim ersten Teil Ihres Beitrags nicht helfen - ich hätte gedacht, dass korrelierte Größen eine geringere Varianz haben (z. B. Intra-Cluster-Korrelationen), aber dann weiß ich nicht, was LOOCV ist.
Matthew
Ich weiß, dass sie gleich sind und nur die Reihenfolge geändert wird. 1: 100 sind jedoch korrelierte Zahlen, Stichprobe (100) jedoch nicht.
Farid Cheraghi
Der Vektor 1:100ist nicht korrelierter als der Vektor sample(100). Sie wurden möglicherweise unterschiedlich generiert, sind jedoch bis auf die Bestellung identisch. Sicherlich berücksichtigt die Varianzberechnung die Bestellung nicht. Es gibt Online-Beispiele für die Simulation korrelierter Daten, die Sie wahrscheinlich benötigen.
Matthew
Versuchen Sie acf(x)und Sie acf(y)und sehen Sie selbst!
Farid Cheraghi
Ah, ich habe nicht an Autokorrelation gedacht. Der Grund, warum die Varianzen gleich sind, ist, dass die Reihenfolge für die varFunktion irrelevant ist, genau wie es wäre, wenn Sie die Varianz nach had berechnet hätten. Auch und möglicherweise hilfreicher, siehe Link
Matthew

Antworten:

12

Die im Code berechnete Varianz zeigt jedes Array so an, als wäre es eine Stichprobe von 100 separaten Werten. Da sowohl das Array als auch seine permutierte Version dieselben 100 Werte enthalten, weisen sie dieselbe Varianz auf.

Der richtige Weg, um die Situation im Angebot zu simulieren, erfordert Wiederholungen. Generieren Sie eine Stichprobe von Werten. Berechnen Sie den Mittelwert. (Dies spielt die Rolle der "Testfehlerschätzung".) Wiederholen Sie dies viele Male. Sammeln Sie all diese Mittel und sehen Sie sich an, wie stark sie variieren. Dies ist die "Varianz", auf die sich das Zitat bezieht.

Wir können vorhersehen, was passieren wird:

  • Wenn die Elemente jeder Probe in diesem Prozess positiv korreliert sind und ein Wert hoch ist, sind auch die anderen tendenziell hoch. Ihr Mittelwert wird dann hoch sein. Wenn ein Wert niedrig ist, sind auch die anderen niedrig. Ihr Mittelwert wird dann niedrig sein. Somit neigen die Mittel dazu, entweder hoch oder niedrig zu sein.

  • Wenn Elemente jeder Stichprobe nicht korreliert sind, wird der Betrag, um den einige Elemente hoch sind, häufig durch andere niedrige Elemente ausgeglichen (oder "aufgehoben"). Insgesamt liegt der Mittelwert tendenziell sehr nahe am Durchschnitt der Population, aus der die Stichproben gezogen werden - und selten viel größer oder viel kleiner.

Rmacht es einfach, dies in die Tat umzusetzen. Der Haupttrick besteht darin, korrelierte Stichproben zu generieren. Eine Möglichkeit besteht darin, normale Standardvariablen zu verwenden: Linearkombinationen davon können verwendet werden, um eine beliebige Korrelation zu induzieren.

Hier sind zum Beispiel die Ergebnisse dieses wiederholten Experiments, als es 5.000 Mal unter Verwendung von Proben der Größe . In einem Fall wurden die Proben aus einer Standardnormalverteilung erhalten. In der anderen wurden sie auf ähnliche Weise erhalten - sowohl mit Nullmitteln als auch mit Einheitsvarianzen -, aber die Verteilung, aus der sie gezogen wurden, hatte einen Korrelationskoeffizienten von .n=290%

Zahl

Die obere Reihe zeigt die Häufigkeitsverteilungen aller 5.000 Mittelwerte. Die untere Zeile zeigt die Streudiagramme, die von allen 5.000 Datenpaaren generiert wurden. Aus dem Unterschied in den Spreads der Histogramme geht hervor, dass die Menge der Mittelwerte aus den nicht korrelierten Proben weniger gestreut ist als die Menge der Mittelwerte aus den korrelierten Proben, was das Argument "Aufheben" veranschaulicht.

Der Unterschied in der Ausbreitungsmenge wird bei höherer Korrelation und bei größeren Stichproben größer. Mit dem RCode können Sie diese als rhobzw. angeben n, damit Sie experimentieren können. Wie der fragliche Code besteht sein Ziel darin, Arrays (aus den nicht korrelierten Stichproben) xund y(aus den korrelierten Stichproben) zum weiteren Vergleich zu erstellen .

n <- 2
rho <- 0.9
n.sim <- 5e3
#
# Create a data structure for making correlated variables.
#
Sigma <- outer(1:n, 1:n, function(i,j) rho^abs(i-j))
S <- svd(Sigma)
Q <- S$v %*% diag(sqrt(S$d))
#
# Generate two sets of sample means, one uncorrelated (x) and the other correlated (y).
#
Z <- matrix(rnorm(n*n.sim), nrow=n)
x <- colMeans(Z)
y <- colMeans(Q %*% Z)
#
# Display the histograms of both.
#
par(mfrow=c(2,2))
h.y <- hist(y, breaks=50, plot=FALSE)
h.x <- hist(x, breaks=h.y$breaks, plot=FALSE)
ylim <- c(0, max(h.x$density))
hist(x, main="Uncorrelated", freq=FALSE, breaks=h.y$breaks, ylim=ylim)
hist(y, main="Correlated", freq=FALSE, breaks=h.y$breaks, ylim=ylim)
#
# Show scatterplots of the first two elements of the samples.
#
plot(t(Z)[, 1:2], pch=19, col="#00000010", xlab="x.1", ylab="x.2", asp=1)
plot(t(Q%*%Z)[, 1:2], pch=19, col="#00000010", xlab="x.1", ylab="x.2", asp=1)

Wenn Sie nun die Varianzen der Arrays von Mittelwerten xund yberechnen, unterscheiden sich ihre Werte:

> var(x)
[1] 0.5035174
> var(y)
[1] 0.9590535

Die Theorie sagt uns, dass diese Abweichungen nahe beieinander liegen werden (1+1)/22=0.5 und (1+2×0.9+1)/22=0.95. Sie unterscheiden sich nur deshalb von den theoretischen Werten, weil nur 5.000 Wiederholungen durchgeführt wurden. Mit mehr Wiederholungen tendieren die Varianzen von xund ynäher zu ihren theoretischen Werten.

whuber
quelle
3
Ich konnte das Zitat in ESLII (10. Druck) nicht mithilfe einer Textsuche im PDF finden, aber es ist Wort für Wort in ISLR (das ist also die Referenz, die ich gerade in die Frage eingefügt habe)
Glen_b -Reinstate Monica
@whuber, vielen Dank. Ich habe mit dem mvtnormPaket zweidimensional korrelierte Größen erstellt. Sigma <- outer(1:n, 1:n, function(i,j) rho^abs(i-j)) xy = mvtnorm::rmvnorm(5000,mean=c(0,0),sigma = Sigma)Wie kann ich verstehen, wie Q %*% Zzu korrelierten Mengen führt? Bücher, Referenzen?
Farid Cheraghi
2
Der einfachste Weg ist eine Berechnung:
Cov(QZ)=QCov(Z)Q=QQ=VDDV=VDV=S.
Ich habe diese Methode anstelle von gewählt mvtnorm, weil ich damit genau die gleichen Werte von verwenden konnteZFür beide simulierten Datensätze war die gewaltsame Demonstration des Ergebnisses kein Artefakt der Zufallszahlengenerierung. (Vielen Dank, @glen_b, für die Korrektur der Referenz.)
whuber