InĀ [1]:
# rm(list=ls())
options(OutDec = ",") 
#==============================================================================
# Exemplo para gerar de uma normal multivariada
#==============================================================================
#
# Parte 1: utilizando a decomposicao de Cholesky
#
#==============================================================================
set.seed(54345) # Semente
n  <- 100000    # Tamanho da amostra
#==============================================================================
MU    <- c(-3,3,1)
SIGMA <- matrix(c(1,0.9,0.8,0.9,1,0.7,0.8,0.7,1),3,3,T)
InĀ [2]:
#==============================================================================
# Inicio (Cholesky)
#==============================================================================
U <- chol(SIGMA)
print("===============================")
print(t(U))
print("===============================")
print(t(U)%*%U)      # Conferindo SIGMA
print("===============================")
print(SIGMA)
[1] "==============================="
     [,1]        [,2]     [,3]
[1,]  1,0  0,00000000 0,000000
[2,]  0,9  0,43588989 0,000000
[3,]  0,8 -0,04588315 0,598243
[1] "==============================="
     [,1] [,2] [,3]
[1,]  1,0  0,9  0,8
[2,]  0,9  1,0  0,7
[3,]  0,8  0,7  1,0
[1] "==============================="
     [,1] [,2] [,3]
[1,]  1,0  0,9  0,8
[2,]  0,9  1,0  0,7
[3,]  0,8  0,7  1,0
InĀ [3]:
#==============================================================================
# Gerando da normal multivariada (trivariada) via Cholesky
#==============================================================================
y     <- matrix(NA,n,3)
for(i in 1:n)
	y[i,] <- MU + t(U)%*%rnorm(3)
print("===============================")
print(apply(y,2,"mean")) #(-3,3,1)
print("===============================")
print(cov(y))
print("===============================")
print(cor(y))
print("===============================")
print(SIGMA)
[1] "==============================="
[1] -2,996126  3,003515  1,002702
[1] "==============================="
          [,1]      [,2]      [,3]
[1,] 0,9981761 0,9012971 0,7995698
[2,] 0,9012971 1,0027973 0,7004597
[3,] 0,7995698 0,7004597 0,9990415
[1] "==============================="
          [,1]      [,2]      [,3]
[1,] 1,0000000 0,9008611 0,8006838
[2,] 0,9008611 1,0000000 0,6998175
[3,] 0,8006838 0,6998175 1,0000000
[1] "==============================="
     [,1] [,2] [,3]
[1,]  1,0  0,9  0,8
[2,]  0,9  1,0  0,7
[3,]  0,8  0,7  1,0
InĀ [4]:
#==============================================================================
# Dispersão
#==============================================================================
par(mfrow=c(1,1),lwd=2,cex.lab=1.5,cex.axis=1.5,lab=c(5,5,5),
    mar=c(4.5,5,2,1),bty="n")
colnames(y) <- c(expression(y[1]),expression(y[2]),expression(y[3]))
pairs(y,pch=".")
No description has been provided for this image
InĀ [5]:
#==============================================================================
# Histograma, boxplot e qqnorm para y[1]
#==============================================================================
par(mfrow=c(1,1),lwd=2,cex.lab=1.5,cex.axis=1.5,lab=c(10,10,0),
    mar=c(4.5,5,2,1),bty="n")
hist(y[,1],nclass=50,prob=T,main="",col="darkgreen",xlab=expression(y[1]),
     ylab=expression(f(y[1])))
sig1 <- sqrt(SIGMA[1,1])
xseq <- seq(MU[1]-4*sig1,MU[1]+4*sig1,length=1000)
yseq <- dnorm(xseq,MU[1],sig1)
lines(xseq,yseq,col="red",lwd=3)
boxplot(y[,1],main="",col="darkgreen")
qqnorm(y[,1],main="",col="darkgreen",
  xlab="Percentis teóricos",ylab="Percentis amostrais",pch=16)
qqline(y[,1],lwd=3)
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
InĀ [6]:
#==============================================================================
# Histograma, boxplot e qqnorm para y[2]
#==============================================================================
par(mfrow=c(1,1),lwd=2,cex.lab=1.5,cex.axis=1.5,lab=c(10,10,0),
    mar=c(4.5,5,2,1),bty="n")
hist(y[,2],nclass=50,prob=T,main="",col="darkgreen",xlab=expression(y[2]),
     ylab=expression(f(y[2])))
sig2 <- sqrt(SIGMA[2,2])
xseq <- seq(MU[2]-4*sig2,MU[2]+4*sig2,length=1000)
yseq <- dnorm(xseq,MU[2],sig2)
lines(xseq,yseq,col="red",lwd=3)
boxplot(y[,2],main="",col="darkgreen")
qqnorm(y[,2],main="",col="darkgreen",
  xlab="Percentis teóricos",ylab="Percentis amostrais",pch=16)
qqline(y[,2],lwd=3)
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
InĀ [7]:
#==============================================================================
# Histograma, boxplot e qqnorm para y[3]
#==============================================================================
par(mfrow=c(1,1),lwd=2,cex.lab=1.5,cex.axis=1.5,lab=c(10,10,0),
    mar=c(4.5,5,2,1),bty="n")
hist(y[,3],nclass=50,prob=T,main="",col="darkgreen",xlab=expression(y[3]),
     ylab=expression(f(y[3])))
sig2 <- sqrt(SIGMA[3,3])
xseq <- seq(MU[3]-4*sig2,MU[3]+4*sig2,length=1000)
yseq <- dnorm(xseq,MU[3],sig2)
lines(xseq,yseq,col="red",lwd=3)
boxplot(y[,2],main="",col="darkgreen")
qqnorm(y[,2],main="",col="darkgreen",
  xlab="Percentis teóricos",ylab="Percentis amostrais",pch=16)
qqline(y[,2],lwd=3)
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
InĀ [8]:
#==============================================================================
#
# Parte 2: utilizando a "SVD"
#
#==============================================================================
rm(list=ls())
set.seed(54345) # Semente
n  <- 100000    # Tamanho da amostra
#==============================================================================
MU    <- c(-3,3,1)
SIGMA <- matrix(c(1,0.9,0.8,0.9,1,0.7,0.8,0.7,1),3,3,T)
InĀ [9]:
#==============================================================================
# Inicio (SVD)
#==============================================================================
decomp <- svd(SIGMA)
V      <- decomp$u   # autovetores
lambda <- decomp$d   # autovalores
H      <- V%*%diag(sqrt(lambda)) 
print("===============================")
print(H)
print("===============================")
print(H%*%t(H))  # Conferindo SIGMA
print("===============================")
print(SIGMA)
[1] "==============================="
           [,1]       [,2]        [,3]
[1,] -0,9686611  0,1074754  0,22393003
[2,] -0,9330609  0,3173500 -0,16937043
[3,] -0,8909961 -0,4491760 -0,06608266
[1] "==============================="
     [,1] [,2] [,3]
[1,]  1,0  0,9  0,8
[2,]  0,9  1,0  0,7
[3,]  0,8  0,7  1,0
[1] "==============================="
     [,1] [,2] [,3]
[1,]  1,0  0,9  0,8
[2,]  0,9  1,0  0,7
[3,]  0,8  0,7  1,0
InĀ [10]:
#==============================================================================
# Gerando da normal multivariada (trivariada) via SVD
#==============================================================================
y     <- matrix(NA,n,3)
for(i in 1:n)
	y[i,] <- MU + H%*%rnorm(3)
print("===============================")
print(apply(y,2,"mean")) #(-3,3,1)
print("===============================")
print(cov(y))
print("===============================")
print(cor(y))
print("===============================")
print(SIGMA)
[1] "==============================="
[1] -3,0038932  2,9965174  0,9965625
[1] "==============================="
          [,1]      [,2]      [,3]
[1,] 0,9953080 0,8951809 0,8014065
[2,] 0,8951809 0,9951111 0,7002443
[3,] 0,8014065 0,7002443 1,0027457
[1] "==============================="
          [,1]      [,2]      [,3]
[1,] 1,0000000 0,8994899 0,8021927
[2,] 0,8994899 1,0000000 0,7010006
[3,] 0,8021927 0,7010006 1,0000000
[1] "==============================="
     [,1] [,2] [,3]
[1,]  1,0  0,9  0,8
[2,]  0,9  1,0  0,7
[3,]  0,8  0,7  1,0
InĀ [11]:
#==============================================================================
# Dispersão
#==============================================================================
par(mfrow=c(1,1),lwd=2,cex.lab=1.5,cex.axis=1.5,lab=c(5,5,5),
    mar=c(4.5,5,2,1),bty="n")
colnames(y) <- c(expression(y[1]),expression(y[2]),expression(y[3]))
pairs(y,pch=".")
No description has been provided for this image
InĀ [12]:
#==============================================================================
# Histograma, boxplot e qqnorm para y[1]
#==============================================================================
par(mfrow=c(1,1),lwd=2,cex.lab=1.5,cex.axis=1.5,lab=c(10,10,0),
    mar=c(4.5,5,2,1),bty="n")
hist(y[,1],nclass=50,prob=T,main="",col="darkgreen",xlab=expression(y[1]),
     ylab=expression(f(y[1])))
sig1 <- sqrt(SIGMA[1,1])
xseq <- seq(MU[1]-4*sig1,MU[1]+4*sig1,length=1000)
yseq <- dnorm(xseq,MU[1],sig1)
lines(xseq,yseq,col="red",lwd=3)
boxplot(y[,1],main="",col="darkgreen")
qqnorm(y[,1],main="",col="darkgreen",
  xlab="Percentis teóricos",ylab="Percentis amostrais",pch=16)
qqline(y[,1],lwd=3)
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
InĀ [13]:
#==============================================================================
# Histograma, boxplot e qqnorm para y[2]
#==============================================================================
par(mfrow=c(1,1),lwd=2,cex.lab=1.5,cex.axis=1.5,lab=c(10,10,0),
    mar=c(4.5,5,2,1),bty="n")
hist(y[,2],nclass=50,prob=T,main="",col="darkgreen",xlab=expression(y[2]),
     ylab=expression(f(y[2])))
sig2 <- sqrt(SIGMA[2,2])
xseq <- seq(MU[2]-4*sig2,MU[2]+4*sig2,length=1000)
yseq <- dnorm(xseq,MU[2],sig2)
lines(xseq,yseq,col="red",lwd=3)
boxplot(y[,2],main="",col="darkgreen")
qqnorm(y[,2],main="",col="darkgreen",
  xlab="Percentis teóricos",ylab="Percentis amostrais",pch=16)
qqline(y[,2],lwd=3)
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
InĀ [14]:
#==============================================================================
# Histograma, boxplot e qqnorm para y[3]
#==============================================================================
par(mfrow=c(1,1),lwd=2,cex.lab=1.5,cex.axis=1.5,lab=c(10,10,0),
    mar=c(4.5,5,2,1),bty="n")
hist(y[,3],nclass=50,prob=T,main="",col="darkgreen",xlab=expression(y[3]),
     ylab=expression(f(y[3])))
sig2 <- sqrt(SIGMA[3,3])
xseq <- seq(MU[3]-4*sig2,MU[3]+4*sig2,length=1000)
yseq <- dnorm(xseq,MU[3],sig2)
lines(xseq,yseq,col="red",lwd=3)
boxplot(y[,2],main="",col="darkgreen")
qqnorm(y[,2],main="",col="darkgreen",
  xlab="Percentis teóricos",ylab="Percentis amostrais",pch=16)
qqline(y[,2],lwd=3)
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
InĀ [15]:
# rm(list=ls()) 
#==============================================================================
# graphics.off()
#==============================================================================
# Fim
#==============================================================================