Regresi Terbatas pada R: koefisien positif, jumlah ke 1 dan intersep tidak nol

8

Saya memiliki model yang perlu saya perkirakan,

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

Elvis menjawab pertanyaan lain untuk memecahkan masalah iniπ0=0. Inilah kode solusi ini:

   > 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

Bagaimana saya bisa menyesuaikan kode ini sehingga dapat memperkirakan intersep?

Ini telah diposkan silang di sini karena grup saya di tugas saya merasa kesal karena saya belum memperkirakan regresi ini. Saya akan menjawab pertanyaan ini di sini jika / ketika peserta forum lain sampai di sana lebih dulu.

Komunitas
sumber

Jawaban:

8

Anda hanya perlu bermain-main sedikit dengan matriks yang terlibat. Tambahkan intersep ke X:

XX <- cbind(1,X)

Hitung ulang Dmatriks yang digunakan solve.QP()(Saya lebih suka bekerja secara langsung dengan ini untuk menghindari panggilan solve():

Dmat <- t(XX)%*%XX

Hitung ulang ddengan yang baru XX:

dd <- t(Y)%*%XX

Ubah matriks kendala dengan menambahkan kolom nol, karena Anda tampaknya tidak memiliki kendala pada intersep (kanan?):

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

Dan akhirnya:

solve.QP(Dmat = Dmat, factorized = FALSE, dvec = dd, Amat = Amat, bvec = b, meq = 1)
Stephan Kolassa
sumber
Terima kasih Stephan. Saya ingin menggunakan bootstrap untuk memperkirakan kesalahan standar estimasi koefisien ini. Saya akan menggunakan korelasi serial dan bootstrap hetero yang kuat. Apakah Anda memiliki pendapat tentang legitimasi pendekatan ini (bootstrap secara umum, bukan jenis bootstrap yang tepat yang akan saya gunakan)?
Pada prinsipnya, sepertinya bootstrap itu sah di sini ... asalkan Anda mengingat kendala-kendala yang menghitung dan mengomunikasikan kendala-kendala ini dengan jelas, tetapi Anda akan melakukan itu, bukan ;-)? Tapi saya jauh dari ahli dalam hal ini; mungkin seseorang yang lebih kompeten dapat berkomentar?
Stephan Kolassa
2
Saya akan berhati-hati tentang bootstrap jika ada yang diperkirakan πi, i1, adalah nol, karena solusi itu terletak di sepanjang batas ruang parameter dan kondisi keteraturan yang digunakan untuk membenarkan bootstrap mungkin tidak berlaku. Tetapi justru itulah kasus di mana solusi ini diperlukan: setelah semua, jika semuaπibukan nol, maka orang hanya bisa menggunakan OLS untuk menyelesaikan masalah ini.
whuber
@whuber: poin bagus. Tentu saja, tujuan lain dari hal ini adalah bahwa koefisien tidak hanya bersifat negatif, tetapi juga jumlah ke 1. Misalkan semua koefisien jauh dari 0. Apakah bootstrap dengan batasan jumlah valid?
Stephan Kolassa
Jumlahnya membatasi parameter ke submanifold dari yang asli (yang tanpa batas atau sudut). Dengan demikian itu tidak memiliki efek yang sama dengan memaksakan kondisi batas dan seharusnya tidak mempengaruhi estimasi, bootstrap, dll. Cara lain untuk melihat ini adalah dengan mengurangi jumlah parameter per satu, katakan dengan menulis ulangπ3=1(π1+π2) dan menulis ulang kondisi non-negatif sebagai ketidaksetaraan di π1 dan π2hanya. (Ketentuan untuk memaksa semua nilai kurang dari atau sama dengan1maka tidak perlu.)
whuber