Tolong beri saya ide bagaimana secara efisien mengode ulang variabel kategori (faktor) ke dalam set variabel kontras polinomial ortogonal.
Untuk banyak jenis variabel kontras (mis. Penyimpangan, simpel, Helmert, dll.) Pass-nya adalah:
- Tulis matriks koefisien kontras sesuai dengan jenisnya.
- Membalikkan atau menggeneralisasi-membaliknya untuk mendapatkan matriks kode.
Sebagai contoh:
Suppose there is 3-group factor and we want to recode it into a set of deviation contrast variables.
The last group is treated as reference. Then the contrast coefficients matrix L is
Group1 Group2 Group3
var1 2/3 -1/3 -1/3
var2 -1/3 2/3 -1/3
and ginv(L) is then the sought-for coding matrix
var1 var2
Group1 1 0
Group2 0 1
Group3 -1 -1
(We might also use inv(L) instead if we add a row for constant, equal to 1/3, at the head of L.)
Apakah ada cara yang sama atau serupa untuk mendapatkan variabel kontras polinomial? Jika ya, seperti apa matriks C dan bagaimana cara menyusunnya? Jika tidak, apa yang masih merupakan cara untuk menghitung variabel kontras polinom secara efisien (misalnya dengan aljabar matriks).
contrasts
polynomial
ttnphns
sumber
sumber
qr.qy()
setuju dengan perhitungan manualqr.Q(qr(X))
diikuti olehQ%*%z
pada posting saya. Saya benar-benar ingin tahu apakah saya dapat mengatakan sesuatu yang berbeda untuk menjawab pertanyaan Anda tanpa duplikasi. Saya benar-benar tidak ingin melakukan pekerjaan yang buruk ... Saya telah membaca cukup banyak posting Anda sehingga sangat menghormati Anda ... Jika saya menemukan cara untuk mengekspresikan konsep tanpa kode, secara konseptual hanya melalui aljabar linier, Saya akan kembali ke sana. Saya senang, bagaimanapun, bahwa Anda menemukan eksplorasi saya tentang masalah beberapa nilai. Salam hangat, Toni.Jawaban:
Sebagai tambahan untuk posting saya sebelumnya pada topik ini saya ingin berbagi beberapa sementara (meskipun tidak lengkap) eksplorasi fungsi di belakang aljabar linier dan fungsi R terkait. Ini seharusnya menjadi pekerjaan yang sedang berjalan.
Bagian dari ketidakjelasan fungsi berkaitan dengan bentuk "kompak" dari dekomposisi Householder . Gagasan di balik dekomposisi Householder adalah untuk merefleksikan vektor melintasi sebuah hyperplane yang ditentukan oleh vektor-unit seperti pada diagram di bawah ini, tetapi memilih pesawat ini dengan cara yang bertujuan untuk memproyeksikan setiap vektor kolom dari matriks asli ke vektor satuan standar. Vektor norma-2 dinormalisasi dapat digunakan untuk menghitung transformasi Householder yang berbeda .u A e 1 1 u I - 2QR u A e1 1 u I−2uuTx
Proyeksi yang dihasilkan dapat dinyatakan sebagai
Vektor mewakili perbedaan antara vektor kolom dalam matriks yang ingin kita dekomposisi dan vektor berhubungan dengan refleksi melintasi subruang atau "mirror" yang ditentukan oleh .v x A y u
Metode yang digunakan oleh LAPACK membebaskan kebutuhan untuk penyimpanan entri pertama di reflektor Householder dengan mengubahnya menjadi 's. Alih-alih menormalkan vektor ke dengan , itu hanya entri pertama yang dikonversi menjadi ; namun, vektor-vektor baru ini - sebut saja masih dapat digunakan sebagai vektor arah.1 v u ∥u∥=1 1 w
Keindahan dari metode ini adalah bahwa mengingat bahwa dalam dekomposisi adalah segitiga atas, kita benar-benar dapat mengambil keuntungan dari elemen dalam di bawah diagonal untuk mengisi mereka dengan ini reflektor. Untungnya, entri-entri utama dalam vektor-vektor ini semuanya sama dengan , mencegah masalah dalam diagonal "yang disengketakan" dari matriks: mengetahui bahwa semuanya adalah mereka tidak perlu dimasukkan, dan dapat menghasilkan diagonal ke entri .R QR 0 R w 1 1 R
Matriks "compact QR" dalam fungsiR
qr()$qr
dapat dipahami secara kasar sebagai penambahan matriks dan matriks "storage" segitiga yang lebih rendah untuk reflektor yang "dimodifikasi".Proyeksi Householder masih akan memiliki bentuk , tetapi kami tidak akan bekerja dengan ( ), melainkan dengan vektor , yang hanya entri pertama yang dijamin , danI−2uuTx u ∥x∥=1 w 1
Orang akan berasumsi bahwa itu akan baik-baik saja untuk menyimpan ini reflektor di bawah diagonal atau tidak termasuk entri pertama dari , dan menyebutnya sehari. Namun, segala sesuatunya tidak pernah semudah ini. Alih-alih apa yang disimpan di bawah diagonal dalam adalah kombinasi dan koefisien dalam transformasi Householder dinyatakan sebagai (1), sehingga, mendefinisikan sebagai:w R 1 w tau
qr()$qr
Sekarang kita satu derajat menjauh dari vektor, dan entri pertama tidak lagi , Oleh karena itu output dari kehendak perlu menyertakan kunci untuk mengembalikan mereka karena kita bersikeras tidak termasuk masuknya pertama dari "reflektor" vektor untuk cocok semuanya . Jadi, apakah kita melihat nilai dalam output? Yah, tidak ada yang bisa diprediksi. Alih-alih dalam output (tempat kunci ini disimpan) kita menemukan .w 1 τ ρ=∑reflectors22=wTwτ2/2
qr()
qr()$qr
qr()$qraux
Jadi dibingkai dengan warna merah di bawah ini, kita melihat "reflektor" ( ), tidak termasuk entri pertama mereka.w/τ
Semua kode ada di sini , tetapi karena jawaban ini adalah tentang persimpangan kode dan aljabar linier, saya akan menempelkan hasilnya untuk memudahkan:
Sekarang saya menulis fungsinya
House()
sebagai berikut:Mari kita bandingkan ouput dengan fungsi bawaan R. Pertama fungsi buatan:
ke fungsi R:
sumber