# misura lati interni di un triangolo con vincolo # # G. D'Agostini, 23/03/2010 #------------------------------------------------- mu.X <- c(58, 73, 54) Sigma.X <- matrix(rep(0,9), 3, 3) Sigma.X[1,1] <- 2.0^2 Sigma.X[2,2] <- 2.0^2 Sigma.X[3,3] <- 2.0^2 C.m <- rbind( c(1,0,0), c(0,1,0), c(0,0,1), c(1,1,1) ) mu.Y <- C.m %*% mu.X Sigma.Y <- C.m %*% Sigma.X %*% t(C.m) sigma.Y <- sqrt(c(Sigma.Y[1,1],Sigma.Y[2,2],Sigma.Y[3,3],Sigma.Y[4,4])) rho.Y <- Sigma.Y / ( sigma.Y %*% t(sigma.Y)) # usa package mnormt (multidimensionale!) #library(mnormt) somma = 180. dif <- as.vector(somma-mu.Y[4]) # parametri della distribuzione condizionata: # http://en.wikipedia.org/wiki/Multivariate_normal_distribution Sigma.Y.11 = Sigma.X Sigma.Y.12 = matrix(rep(0,3), 3, 1) Sigma.Y.12[1:3,1] = Sigma.Y[1:3,4] Sigma.Y.21 = matrix(rep(0,3), 1, 3) Sigma.Y.21[1,1:3] = Sigma.Y[4,1:3] Sigma.Y.22 = matrix(Sigma.Y[4,4] , 1, 1) mu.X.cond <- as.vector(mu.X + Sigma.Y.12 %*% solve(Sigma.Y.22) %*% dif) Sigma.X.cond <- Sigma.Y.11 - Sigma.Y.12 %*% solve(Sigma.Y.22) %*% Sigma.Y.21 sigma.X.cond <- c(sqrt(Sigma.X.cond[1,1]), sqrt(Sigma.X.cond[2,2]), sqrt(Sigma.X.cond[3,3]) ) corr.X.cond <- Sigma.X.cond / (sigma.X.cond %*% t(sigma.X.cond)) cat(sprintf("\n Valori attesi degli angoli ricondizionati dalla somma: \n")) print(mu.X.cond) cat(sprintf("\n Deviazioni standard:\n")) print(sigma.X.cond) cat(sprintf("\n Matrice di covarianza:\n")) print(Sigma.X.cond) cat(sprintf("\n Matrice di correlazione:\n")) print(corr.X.cond) # da confrontare con i risultati di JAGS/rjags