Như được đề cập bởi caracal, bạn có thể sử dụng gói mvtnorm trong R. Giả sử bạn đã tạo một mô hình lm (được đặt tên là "mô hình") của một trong các phản hồi trong mô hình của bạn và gọi đó là "mô hình", đây là cách để có được phân phối dự báo đa biến của một số phản hồi "resp1", "resp2", "resp3" được lưu trữ dưới dạng ma trận 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)
Bây giờ, số lượng của fax là khoảng dung sai cho phép beta từ phân phối dự đoán, tất nhiên bạn có thể sử dụng trực tiếp phân phối được lấy mẫu để làm bất cứ điều gì bạn muốn.
Để trả lời Andrew F., mức độ tự do do đó nu = N- (M + F) +1 ... N là # của các quan sát, M là # của các phản hồi và F là # của các tham số trên mô hình phương trình. nu phải tích cực.
(Bạn có thể muốn đọc tác phẩm của tôi trong tài liệu này :-))