variação da média dos dados correlacionados e não correlacionados

7

Eu li este parágrafo em James et al., Introdução à Aprendizagem Estatística , p183-184 [1]:

Como a média de muitas quantidades altamente correlacionadas tem uma variação maior do que a média de muitas quantidades que não são tão altamente correlacionadas, a estimativa de erro de teste resultante do LOOCV tende a ter uma variação maior do que a estimativa de erro de teste resultante do CV k-fold.

Você pode me dar um exemplo numérico, por exemplo, em R, para verificar a validade desta reivindicação?

Tentei verificar usando o seguinte código:

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

O que está errado neste código?

  • LOOCV significa "deixar de fora uma validação cruzada"

[1]: James, G., Witten, D., Hastie, T., Tibshirani, R. (2013),
Uma Introdução à Aprendizagem Estatística com Aplicações em R ,
Springer Textos em Estatística, Springer Science + Business Media, Nova York

Farid Cheraghi
fonte
Se você sort(sample(100))perceber que é idêntico 1:100e, portanto, suas variações são idênticas. Não posso ajudá-lo com o primeiro pedaço do seu post - eu pensaria que quantidades correlacionadas têm menor variação (por exemplo, correlações intra-cluster), mas não sei o que é LOOCV.
Matthew
Eu sei que eles são os mesmos e apenas a ordem é alterada. No entanto, 1: 100 são números correlatos, mas a amostra (100) não é.
Farid Cheraghi
O vetor 1:100não é mais correlacionado que o vetor sample(100). Eles podem ter sido gerados de maneira diferente, mas, além da ordem, são idênticos. Certamente, o cálculo da variação não leva em consideração o pedido. Existem exemplos on-line de como simular dados correlatos que provavelmente são o que você precisa.
Matthew
Experimente acf(x)e acf(y)veja a si mesmo!
Farid Cheraghi
Ah, não pensei em autocorrelação. Ainda assim, a razão pela qual as variações são iguais é porque a ordem é irrelevante para a varfunção, assim como seria se você calculasse a variação por t. Além disso, e possivelmente mais útil, ver ligação
Matthew

Respostas:

12

A variação calculada no código exibe cada matriz como se fosse uma amostra de 100 valores separados. Como o array e sua versão permutada contêm os mesmos 100 valores, eles têm a mesma variação.

A maneira correta de simular a situação na cotação requer repetição. Gere uma amostra de valores. Calcule sua média. (Isso desempenha o papel de "estimativa de erro de teste".) Repita várias vezes. Colete todos esses meios e veja quanto eles variam. Essa é a "variação" referida na cotação.

Podemos antecipar o que acontecerá:

  • Quando os elementos de cada amostra nesse processo são correlacionados positivamente, quando um valor é alto, os outros tendem a ser altos também. A média deles será alta. Quando um valor é baixo, os outros também tendem a ser baixos. A média deles será baixa. Assim, os meios tendem a ser altos ou baixos.

  • Quando os elementos de cada amostra não são correlacionados, a quantidade pela qual alguns elementos são altos é geralmente equilibrada (ou "cancelada") por outros elementos baixos. No geral, a média tende a estar muito próxima da média da população da qual as amostras são coletadas - e raramente muito maior ou muito menor que isso.

Rfacilita colocar isso em ação. O principal truque é gerar amostras correlacionadas. Uma maneira é usar variáveis ​​normais padrão: combinações lineares delas podem ser usadas para induzir qualquer quantidade de correlação que você desejar.

Aqui, por exemplo, estão os resultados desse experimento repetido quando ele foi realizado 5.000 vezes usando amostras de tamanho . Em um caso, as amostras foram obtidas de uma distribuição normal padrão. No outro, foram obtidos de maneira semelhante - ambos com média zero e variação unitária -, mas a distribuição da qual foram extraídos apresentava um coeficiente de correlação de .n=290%

Figura

A linha superior mostra as distribuições de frequência de todas as 5.000 médias. A linha inferior mostra os gráficos de dispersão gerados por todos os 5.000 pares de dados. Pela diferença de espalhamento dos histogramas, fica claro que o conjunto de médias das amostras não correlacionadas é menos disperso do que o conjunto de médias das amostras correlacionadas, exemplificando o argumento "cancelando".

A diferença na quantidade de spread se torna mais acentuada com maior correlação e com tamanhos de amostra maiores. O Rcódigo permite que você especifique como rhoe n, respectivamente, para que você possa experimentar. Como o código da pergunta, seu objetivo é produzir matrizes x(a partir de amostras não correlacionadas) e y(a partir de amostras correlacionadas) para comparação posterior.

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)

Agora, quando você calcular as variações das matrizes de médias xe y, seus valores serão diferentes:

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

A teoria nos diz que essas variações estarão próximas de e . Eles diferem dos valores teóricos apenas porque apenas 5.000 repetições foram feitas. Com mais repetições, as variações de e tenderão mais perto de seus valores teóricos.(1+1)/22=0.5(1+2×0.9+1)/22=0.95xy

whuber
fonte
3
Não consegui encontrar a citação no ESLII (10ª impressão) usando uma pesquisa de texto no pdf, mas é palavra por palavra no ISLR (essa é a referência que inseri na pergunta agora)
Glen_b -Reinstate Monica
@ Whuber, muito obrigado. Eu costumava criar quantidades correlacionadas bidimensionais usando o mvtnormpacote. Sigma <- outer(1:n, 1:n, function(i,j) rho^abs(i-j)) xy = mvtnorm::rmvnorm(5000,mean=c(0,0),sigma = Sigma)Como posso entender o caminho que Q %*% Zleva a quantidades correlacionadas? livros, referências?
Farid Cheraghi
2
A maneira mais simples é um cálculo:
Cov(QZ)=QCov(Z)Q=QQ=VDDV=VDV=S.
Eu escolhi esse método, em vez de mvtnorm, porque ele me permitiu usar exatamente os mesmos valores deZpara os dois conjuntos de dados simulados, a demonstração forçada do resultado não era um artefato da geração de números aleatórios. (Obrigado, @glen_b, por corrigir a referência.)
whuber