Exercício 7

Usando a função mvrnorm da biblioteca MASS do R, simule uma amostra de tamanho \(n = 20\) de uma distribuição normal trivariada, com vetor de médias nulo e a seguinte matriz de covariância:

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

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?

set.seed(123)
library(MASS)
library(mvShapiroTest)

Sigma <- matrix(c(5, 5, 5,
                  5, 15, 10,
                  5, 10, 10), nrow = 3, byrow = TRUE)


n <- 20
dados <- mvrnorm(n, mu = c(0, 0, 0), Sigma = Sigma)
print(dados)
##              [,1]       [,2]       [,3]
##  [1,]  0.02195241  3.4897823  0.4009528
##  [2,]  0.24374035  1.1679466  0.3651576
##  [3,] -2.99650442 -4.1693113 -6.3892085
##  [4,] -2.67015573 -0.3713869  1.3455171
##  [5,] -1.92498531 -0.3079708  0.3531939
##  [6,] -4.23164697 -4.1059990 -7.1119545
##  [7,]  0.64308360 -2.4306116 -1.2443903
##  [8,]  2.62966300  4.7117358  3.4199892
##  [9,] -0.94422907  3.4320583  2.0835057
## [10,]  2.45252398  0.3553763  1.9845516
## [11,] -1.63939496 -5.0876712 -3.1523805
## [12,] -0.96195921 -1.0080088 -1.2681047
## [13,]  0.55393936 -2.4151983 -0.7028250
## [14,] -0.02564120 -1.8975077  1.4394261
## [15,]  2.16731586  1.2793900  1.9272802
## [16,] -3.14681828 -7.9637189 -3.5143002
## [17,]  1.04745138 -1.8001584 -2.5689525
## [18,]  2.73027257  7.1097862  6.3380365
## [19,] -1.65095987 -2.3231778 -2.1493320
## [20,]  0.11794939  2.0660117  1.3776532
# Aplicar o teste de Shapiro-Wilk multivariado
teste <- mvShapiro.Test(dados) 
print(teste)
## 
##  Generalized Shapiro-Wilk test for Multivariate Normality by
##  Villasenor-Alva and Gonzalez-Estrada
## 
## data:  dados
## MVW = 0.94959, p-value = 0.3713
hist(dados, probability = TRUE, col = "lightblue", main = "Histograma com curva normal", xlab = "Valor")
curve(dnorm(x, mean = mean(dados), sd = sd(dados)), 
      col = "red", lwd = 2, add = TRUE)



set.seed(123)
n_simulacoes <- 1000
n <- 20
rejeicoes <- 0
for (i in 1:n_simulacoes) {
  dados <- mvrnorm(n, mu = c(0, 0, 0), Sigma = Sigma)
  teste <- mvShapiro.Test(dados)
  if (teste$p.value < 0.05) {
    rejeicoes <- rejeicoes + 1
  }
}

taxa_rejeicao <- rejeicoes / n_simulacoes
print(taxa_rejeicao)
## [1] 0.056



- A pequena diferença (0.6%) pode ser atribuída à variabilidade amostral  
- O teste não rejeita a normalidade com frequência maior que o esperado e também não deixa de rejeitar quando deveria.

- Isso é importante porque, em amostras pequenas, muitos testes multivariados podem ter baixo poder ou viés, mas o Shapiro-Wilk multivariado mostrou-se robusto.

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.

set.seed(2025)
sim2 <- function(n, n_simulacoes = 1000) {
  rejeicoes <- 0
 
  for (i in 1:n_simulacoes) {
    dados <- mvrnorm(n, mu = c(0, 0, 0), Sigma = Sigma)
    teste <- mvShapiro.Test(dados) # Transposta para formato p x n
    if (teste$p.value < 0.05) {
      rejeicoes <- rejeicoes + 1
    }
  }
  taxa_rejeicao <- rejeicoes / n_simulacoes
  return(taxa_rejeicao)
}

n_values <- c(50, 100, 500)
resultados <- sapply(n_values, sim2)

names(resultados) <- paste0("n = ", n_values)
print(resultados)
##  n = 50 n = 100 n = 500 
##   0.047   0.053   0.061



- Para n = 50 e n = 100, a taxa de erro está muito próxima de 5% (como deveria).

- Para n = 500, o teste pode rejeitar um pouco mais (6.1%), mas ainda dentro de um limite razoável.