Hồi quy ràng buộc trong R: hệ số dương, tổng bằng 1 và đánh chặn khác không


8

Tôi có mô hình mà tôi cần phải ước tính, với Σ k π k = 1  cho  k 1π k0  cho  k 1 .

Y=π0+π1X1+π2X2+π3X3+ε,
kπk=1 for k1πk0 for k1

Elvis trả lời cho một câu hỏi khác giải quyết điều này cho trường hợp . Đây là mã của anh ấy / cô ấy về giải pháp này:π0=0

   > library("quadprog");
   > X <- matrix(runif(300), ncol=3)
   > Y <- X %*% c(0.2,0.3,0.5) + rnorm(100, sd=0.2)
   > Rinv <- solve(chol(t(X) %*% X));
   > C <- cbind(rep(1,3), diag(3))
   > b <- c(1,rep(0,3))
   > d <- t(Y) %*% X  
   > solve.QP(Dmat = Rinv, factorized = TRUE, dvec = d, Amat = C, bvec = b, meq = 1)
   $solution
   [1] 0.2049587 0.3098867 0.4851546

   $value
   [1] -16.0402

   $unconstrained.solution
   [1] 0.2295507 0.3217405 0.5002459

   $iterations
   [1] 2 0

   $Lagrangian
   [1] 1.454517 0.000000 0.000000 0.000000

   $iact
   [1] 1

Làm thế nào tôi có thể điều chỉnh mã này sao cho nó có thể ước tính một đánh chặn?

Điều này đã được đăng chéo ở đây vì nhóm của tôi trong nhiệm vụ của tôi đang cảm thấy khó chịu vì tôi chưa ước tính được hồi quy này. Tôi sẽ trả lời câu hỏi này ở đây nếu / khi những người tham gia diễn đàn khác đến đó trước.

Câu trả lời:


8

Bạn chỉ cần chơi xung quanh một chút với các ma trận liên quan. Thêm phần chặn vào X:

XX <- cbind(1,X)

Tính toán lại Dma trận được sử dụng trong solve.QP()(Tôi thích làm việc trực tiếp với điều này để tránh gọi solve():

Dmat <- t(XX)%*%XX

Tính toán lại dvới cái mới XX:

dd <- t(Y)%*%XX

Thay đổi ma trận ràng buộc bằng cách thêm một cột số 0, vì dường như bạn không có bất kỳ ràng buộc nào trên phần chặn (phải không?):

Amat <- t(cbind(0,rbind(1,diag(3))))

Và cuối cùng:

solve.QP(Dmat = Dmat, factorized = FALSE, dvec = dd, Amat = Amat, bvec = b, meq = 1)

Cảm ơn Stephan. Tôi muốn sử dụng bootstrap để ước tính các lỗi tiêu chuẩn của các ước tính hệ số này. Tôi sẽ sử dụng một tương quan nối tiếp và bootstrap mạnh mẽ dị. Bạn có ý kiến ​​gì về tính hợp pháp của phương pháp này không (bootstrap nói chung, không phải là loại bootstrap chính xác mà tôi sẽ sử dụng)?

Về nguyên tắc, có vẻ như bootstrap là hợp pháp ở đây ... miễn là bạn ghi nhớ các ràng buộc mà nó được tính toán và truyền đạt các ràng buộc này một cách rõ ràng, nhưng bạn sẽ làm điều đó, phải không ?-)? Nhưng tôi không phải là một chuyên gia về điều này; có lẽ ai đó có thẩm quyền hơn có thể bình luận?
Stephan Kolassa

2
πii1πi

@whuber: điểm tốt. Tất nhiên, mục tiêu khác của điều này là các hệ số không chỉ là không âm, mà còn tổng bằng 1. Giả sử tất cả các hệ số đều cách xa 0. Liệu bootstrap có ràng buộc tổng có hợp lệ không?
Stephan Kolassa

π3=1(π1+π2)π1π21
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.