相关和不相关数据均值的方差

机器算法验证 相关性 方差
2022-03-16 03:46:38

我在 James et al, Introduction to Statistical Learning , p183-184 [1] 中读到了这一段:

由于许多高度相关量的平均值比许多不高度相关的量的平均值具有更高的方差,因此由 LOOCV 产生的测试误差估计值往往比由 k 倍 CV 产生的测试误差估计值具有更高的方差。

你能给我一个例如在 R 中的数字例子来检查这个声明的有效性吗?

我尝试使用以下代码检查它:

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

这段代码有什么问题?

  • LOOCV 代表“留一出交叉验证”

[1]:James, G.、Witten, D.、Hastie, T.、Tibshirani, R. (2013),
R 中应用的统计学习简介
Springer Texts in Statistics,Springer Science+Business Media,纽约

1个回答

代码中计算的方差将每个数组视为 100 个单独值的一个样本。因为数组及其置换版本都包含相同的 100 个值,所以它们具有相同的方差。

模拟报价中情况的正确方法需要重复。 生成值样本。计算它的平均值。(这起到“测试误差估计”的作用。)重复多次。收集所有这些手段,看看它们的变化有多大。这就是引文中提到的“差异”。

我们可以预见会发生什么:

  • 当此过程中每个样本的元素呈正相关时,当一个值高时,其他值也趋于高。他们的平均值会很高。当一个值较低时,其他值也往往较低。那么他们的平均值就会很低。因此,均值往往要么高要么低。

  • 当每个样本的元素不相关时,某些元素的高量通常会被其他低元素平衡(或“抵消”)。总体而言,平均值往往非常接近从中抽取样本的总体的平均值——而且很少比这个值大得多或小得多。

R使它很容易付诸行动。 主要技巧是生成相关样本。一种方法是使用标准正态变量:它们的线性组合可用于诱导您可能喜欢的任何数量的相关性。

的样本进行 5,000 次时在一种情况下,样品是从标准正态分布中获得的。在另一种情况下,它们以类似的方式获得——均值和单位方差均为零——但从中提取它们的分布具有的相关系数。n=290%

数字

顶行显示所有 5,000 个均值的频率分布。底行显示了所有 5,000 对数据生成的散点图。从直方图的散布差异可以看出,来自不相关样本的均值集比来自相关样本的均值集的分散性更小,这就是“取消”论点的例证。

随着相关性越高和样本量越大,传播量的差异变得更加明显。R代码允许您将它们分别指定为rhon,以便您进行实验。就像问题中的代码一样,它的目的是生成数组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)

现在,当您计算均值 和 数组的方差时xy它们的值会有所不同:

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

理论告诉我们这些方差将接近它们与理论值的不同只是因为只进行了 5,000 次重复。随着更多的重复, 和 的方差趋于接近它们的理论值。(1+1)/22=0.5(1+2×0.9+1)/22=0.95xy