Как упомянул caracal, вы можете использовать пакет mvtnorm в R. Предполагая, что вы создали lm-модель (называемую «модель») одного из ответов в вашей модели, и назвали его «модель», вот как получить многомерное прогнозирующее распределение из нескольких ответов "resp1", "resp2", "resp3", сохраненных в матричной форме Y:
library(mvtnorm)
model = lm(resp1~1+x+x1+x2,datas) #this is only a fake model to get
#the X matrix out of it
Y = as.matrix(datas[,c("resp1","resp2","resp3")])
X = model.matrix(delete.response(terms(model)),
data, model$contrasts)
XprimeX = t(X) %*% X
XprimeXinv = solve(xprimex)
hatB = xprimexinv %*% t(X) %*% Y
A = t(Y - X%*%hatB)%*% (Y-X%*%hatB)
F = ncol(X)
M = ncol(Y)
N = nrow(Y)
nu= N-(M+F)+1 #nu must be positive
C_1 = c(1 + x0 %*% xprimexinv %*% t(x0)) #for a prediction of the factor setting x0 (a vector of size F=ncol(X))
varY = A/(nu)
postmean = x0 %*% hatB
nsim = 2000
ysim = rmvt(n=nsim,delta=postmux0,C_1*varY,df=nu)
Теперь квантили ysim - это интервалы допуска бета-ожиданий от прогнозирующего распределения, вы, конечно, можете напрямую использовать выборочное распределение, чтобы делать все, что вы хотите.
Чтобы ответить Эндрю Ф., степени свободы, следовательно, равны nu = N- (M + F) +1 ... N - количество наблюдений, M - количество ответов и F - количество параметров для модели уравнения. Ну должен быть положительным.
(Вы можете прочитать мою работу в этом документе :-))