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.
R
macht 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 %
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 R
Code können Sie diese als rho
bzw. angeben n
, damit Sie experimentieren können. Wie der fragliche Code besteht sein Ziel darin, Arrays (aus den nicht korrelierten Stichproben) x
und 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 x
und y
berechnen, 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 x
und y
näher zu ihren theoretischen Werten.
sort(sample(100))
sehen, ist es identisch mit1:100
und 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.