Hàm này làm gì:
Về bản chất, hàm tạo ra dữ liệu phản hồi giả ngẫu nhiên mới (tức là ) từ một mô hình dữ liệu của bạn. Mô hình đang được sử dụng là một mô hình thường xuyên tiêu chuẩn. Theo thông lệ, giả sử rằng dữ liệu * của bạn là các hằng số đã biết - chúng không được lấy mẫu theo bất kỳ cách nào. Những gì tôi thấy là tính năng quan trọng của chức năng này là nó được kết hợp không chắc chắn về các tham số ước tính. XYX
* Lưu ý rằng bạn phải thêm thủ công một vectơ là cột ngoài cùng bên trái của ma trận của bạn trước khi đưa nó vào hàm, trừ khi bạn muốn triệt tiêu chặn (thường không phải là ý kiến hay).X1X
Điểm của chức năng này là gì:
Tôi không thành thật biết. Nó có thể là một phần của thói quen MCMC Bayes, nhưng nó chỉ là một phần - bạn sẽ cần nhiều mã hơn ở nơi khác để thực sự phân tích Bayes. Tôi không cảm thấy đủ chuyên gia về các phương pháp Bayes để nhận xét dứt khoát về điều này, nhưng chức năng này không 'cảm thấy' đối với tôi như những gì thường được sử dụng.
Nó cũng có thể đã được sử dụng trong các phân tích sức mạnh dựa trên mô phỏng. (Xem câu trả lời của tôi ở đây: Mô phỏng các logistic phân tích năng lượng hồi quy - thí nghiệm thiết kế , cung cấp thông tin về loại điều.) Nó là đáng chú ý sức mạnh mà các phân tích dựa trên dữ liệu trước đó không có sự không chắc chắn của các ước lượng tham số vào tài khoản thường lạc quan. (Tôi thảo luận về điểm đó ở đây: Kích thước hiệu ứng mong muốn so với kích thước hiệu ứng mong đợi .)
Nếu bạn muốn sử dụng chức năng này:
Như @whuber ghi chú trong các bình luận, chức năng này sẽ không hiệu quả. Nếu bạn muốn sử dụng điều này để làm (ví dụ) phân tích sức mạnh, tôi sẽ chia chức năng thành hai chức năng mới. Đầu tiên sẽ đọc dữ liệu của bạn và đưa ra các tham số và độ không đảm bảo. Hàm mới thứ hai sẽ tạo ra dữ liệu giả mới . Sau đây là một ví dụ (mặc dù có thể cải thiện thêm): Y
simulationParameters <- function(Y,X) {
# Y is a vector of binary responses
# X is a design matrix, you don't have to add a vector of 1's
# for the intercept
X <- cbind(1, X) # this adds the intercept for you
fit <- glm.fit(X,Y, family = binomial(link = logit))
beta <- coef(fit)
fs <- summary.glm(fit)
M <- t(chol(fs$cov.unscaled))
return(list(betas=beta, uncertainties=M))
}
simulateY <- function(X, betas, uncertainties, ncolM, N){
# X <- cbind(1, X) # it will be slightly faster if you input w/ 1's
# ncolM <- ncol(uncertainties) # faster if you input this
betastar <- betas + uncertainties %*% rnorm(ncolM)
p <- 1/(1 + exp(-(X %*% betastar)))
return(rbinom(N, size=1, prob=p))
}