代码中计算的方差将每个数组视为 100 个单独值的一个样本。因为数组及其置换版本都包含相同的 100 个值,所以它们具有相同的方差。
模拟报价中情况的正确方法需要重复。 生成值样本。计算它的平均值。(这起到“测试误差估计”的作用。)重复多次。收集所有这些手段,看看它们的变化有多大。这就是引文中提到的“差异”。
我们可以预见会发生什么:
R
使它很容易付诸行动。 主要技巧是生成相关样本。一种方法是使用标准正态变量:它们的线性组合可用于诱导您可能喜欢的任何数量的相关性。
的样本进行 5,000 次时。在一种情况下,样品是从标准正态分布中获得的。在另一种情况下,它们以类似的方式获得——均值和单位方差均为零——但从中提取它们的分布具有的相关系数。n=290%
顶行显示所有 5,000 个均值的频率分布。底行显示了所有 5,000 对数据生成的散点图。从直方图的散布差异可以看出,来自不相关样本的均值集比来自相关样本的均值集的分散性更小,这就是“取消”论点的例证。
随着相关性越高和样本量越大,传播量的差异变得更加明显。该R
代码允许您将它们分别指定为rho
和n
,以便您进行实验。就像问题中的代码一样,它的目的是生成数组x
(来自不相关的样本)和y
(来自相关的样本)以进行进一步比较。
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)
现在,当您计算均值 和 数组的方差时x
,y
它们的值会有所不同:
> var(x)
[1] 0.5035174
> var(y)
[1] 0.9590535
理论告诉我们这些方差将接近和。它们与理论值的不同只是因为只进行了 5,000 次重复。随着更多的重复, 和 的方差将趋于接近它们的理论值。(1+1)/22=0.5(1+2×0.9+1)/22=0.95x
y