Exercícios 7 e 8 - Lista 2

require(mvtnorm)
require(mvShapiroTest)

7.Usando a biblioteca mvtnorm do R, simule n = 20 dados de uma distribuição normal trivariada, com vetor de médias nulo e covariância:

\[X = \begin{bmatrix} 5 & 5 & 5 \\ 5 & 15 & 10\\ 5 & 10 & 10\\ \end{bmatrix}\]

X <- matrix(c(5,5,5,5,15,10,5,10,10), nrow=3)

valores <- rmvnorm(20, sigma=X)

a) Aplique o teste de normalidade multivariada de Shapiro-Wilk à amostra simulada. A hipótese nula de normalidade multivariada foi ou não rejeitada ao nível de 5% de significância?

mvShapiro.Test(valores)
## 
##  Generalized Shapiro-Wilk test for Multivariate Normality by
##  Villasenor-Alva and Gonzalez-Estrada
## 
## data:  valores
## MVW = 0.94905, p-value = 0.3577

b) Repita a simulação realizada 1000 vezes. A cada rodada, verifique se a hipótese nula de normalidade multivariada é rejeitada ou não. Em qual porcentagem das vezes a hipótese nula foi (incorretamente) rejeitada? Este resultado está de acordo com o esperado?

vetor_p <- numeric(1000)
for(i in 1:1000){
  valores <- rmvnorm(20, sigma=X)
  ResShapiro <- mvShapiro.Test(valores)
  vetor_p[i] <- ResShapiro$p.value
}

length(vetor_p[vetor_p < 0.05]) / length(vetor_p)
## [1] 0.055

c) Repita os itens a) e b) para tamanhos de amostra n = 50, 100 e 500. Avalie as taxas de rejeição em cada caso. Compare o poder do teste para os diferentes tamanhos de amostra.

  • n = 50
valores <- rmvnorm(50, sigma=X)
mvShapiro.Test(valores)
## 
##  Generalized Shapiro-Wilk test for Multivariate Normality by
##  Villasenor-Alva and Gonzalez-Estrada
## 
## data:  valores
## MVW = 0.96974, p-value = 0.1573
vetor_p <- numeric(1000)
for(i in 1:1000){
  valores <- rmvnorm(50, sigma=X)
  ResShapiro <- mvShapiro.Test(valores)
  vetor_p[i] <- ResShapiro$p.value
}

length(vetor_p[vetor_p < 0.05]) / length(vetor_p)
## [1] 0.041
  • n = 100
valores <- rmvnorm(100, sigma=X)
mvShapiro.Test(valores)
## 
##  Generalized Shapiro-Wilk test for Multivariate Normality by
##  Villasenor-Alva and Gonzalez-Estrada
## 
## data:  valores
## MVW = 0.98349, p-value = 0.1816
vetor_p <- numeric(1000)
for(i in 1:1000){
  valores <- rmvnorm(100, sigma=X)
  ResShapiro <- mvShapiro.Test(valores)
  vetor_p[i] <- ResShapiro$p.value
}

length(vetor_p[vetor_p < 0.05]) / length(vetor_p)
## [1] 0.05
  • n = 500
valores <- rmvnorm(500, sigma=X)
mvShapiro.Test(valores)
## 
##  Generalized Shapiro-Wilk test for Multivariate Normality by
##  Villasenor-Alva and Gonzalez-Estrada
## 
## data:  valores
## MVW = 0.99652, p-value = 0.3425
vetor_p <- numeric(1000)
for(i in 1:1000){
  valores <- rmvnorm(500, sigma=X)
  ResShapiro <- mvShapiro.Test(valores)
  vetor_p[i] <- ResShapiro$p.value
}

length(vetor_p[vetor_p < 0.05]) / length(vetor_p)
## [1] 0.047

8. Usando a biblioteca mvtnorm do R, simule n = 20 dados de uma distribuição t trivariada, com parâmetros semelhantes aos do exercício anterior e 1 grau de liberdade.

valores_t <- rmvt(20, sigma=X) 

a) Aplique o teste de normalidade multivariada de Shapiro-Wilk à amostra simulada. A hipótese nula de normalidade multivariada foi ou não rejeitada ao nível de 5% de significância?

mvShapiro.Test(valores_t)
## 
##  Generalized Shapiro-Wilk test for Multivariate Normality by
##  Villasenor-Alva and Gonzalez-Estrada
## 
## data:  valores_t
## MVW = 0.87345, p-value = 0.0003195

b) Repita a simulação realizada 1000 vezes. A cada rodada, verifique se a hipótese nula de normalidade multivariada é rejeitada ou não. Em qual porcentagem das vezes a hipótese nula foi (incorretamente) rejeitada?

vetor_p <- numeric(1000)
for(i in 1:1000){
  valores_t <- rmvt(20, sigma=X)
  ResShapiro <- mvShapiro.Test(valores_t)
  vetor_p[i] <- ResShapiro$p.value
}

length(vetor_p[vetor_p < 0.05]) / length(vetor_p)
## [1] 0.927
1 - length(vetor_p[vetor_p > 0.05]) / length(vetor_p)
## [1] 0.927

c) Repita os itens a) e b) para tamanhos de amostra n = 50, 100 e 500. Avalie as taxas de rejeição em cada caso. Compare o poder do teste para os diferentes tamanhos de amostra.

  • n = 50
valores_t <- rmvt(50, sigma=X)
mvShapiro.Test(valores_t)
## 
##  Generalized Shapiro-Wilk test for Multivariate Normality by
##  Villasenor-Alva and Gonzalez-Estrada
## 
## data:  valores_t
## MVW = 0.84503, p-value = 4.396e-12
vetor_p <- numeric(1000)
for(i in 1:1000){
  valores_t <- rmvt(50, sigma=X)
  ResShapiro <- mvShapiro.Test(valores_t)
  vetor_p[i] <- ResShapiro$p.value
}

length(vetor_p[vetor_p < 0.05]) / length(vetor_p)
## [1] 1
1 - length(vetor_p[vetor_p > 0.05]) / length(vetor_p)
## [1] 1
  • n = 100
valores_t <- rmvt(100, sigma=X)
mvShapiro.Test(valores_t)
## 
##  Generalized Shapiro-Wilk test for Multivariate Normality by
##  Villasenor-Alva and Gonzalez-Estrada
## 
## data:  valores_t
## MVW = 0.70908, p-value < 2.2e-16
vetor_p <- numeric(1000)
for(i in 1:1000){
  valores_t <- rmvt(100, sigma=X)
  ResShapiro <- mvShapiro.Test(valores_t)
  vetor_p[i] <- ResShapiro$p.value
}

length(vetor_p[vetor_p < 0.05]) / length(vetor_p)
## [1] 1
1 - length(vetor_p[vetor_p > 0.05]) / length(vetor_p)
## [1] 1
  • n = 500
valores_t <- rmvt(500, sigma=X)
mvShapiro.Test(valores_t)
## 
##  Generalized Shapiro-Wilk test for Multivariate Normality by
##  Villasenor-Alva and Gonzalez-Estrada
## 
## data:  valores_t
## MVW = 0.27961, p-value < 2.2e-16
vetor_p <- numeric(1000)
for(i in 1:1000){
  valores_t <- rmvt(500, sigma=X)
  ResShapiro <- mvShapiro.Test(valores_t)
  vetor_p[i] <- ResShapiro$p.value
}

length(vetor_p[vetor_p < 0.05]) / length(vetor_p)
## [1] 1
1 - length(vetor_p[vetor_p > 0.05]) / length(vetor_p)
## [1] 1