Saya memiliki tipe data berikut. Saya telah mengevaluasi 10 orang yang masing-masing diulang 10 kali. Saya memiliki 10x10 matriks relasi (hubungan antara semua kombinasi individu).
set.seed(1234)
mydata <- data.frame (gen = factor(rep(1:10, each = 10)),
repl = factor(rep(1:10, 10)),
yld = rnorm(10, 5, 0.5))
Gen ini adalah varietas tanaman yang berbeda, sehingga masing-masing dapat ditanam berulang kali dan hasilnya diukur. Matriks kovarians adalah ukuran keterkaitan dengan kesamaan genetik yang dihitung oleh probabilitas ibd dalam percobaan terpisah.
library(lme4)
covmat <- round(nearPD(matrix(runif(100, 0, 0.2), nrow = 10))$mat, 2)
diag(covmat) <- diag(covmat)/10+1
rownames(covmat) <- colnames(covmat) <- levels(mydata$gen)
> covmat
10 x 10 Matrix of class "dgeMatrix"
1 2 3 4 5 6 7 8 9 10
1 1.00 0.08 0.06 0.03 0.09 0.09 0.10 0.08 0.07 0.10
2 0.08 1.00 0.08 0.09 0.04 0.12 0.08 0.08 0.11 0.09
3 0.06 0.08 1.00 0.10 0.05 0.09 0.09 0.07 0.04 0.13
4 0.03 0.09 0.10 1.00 0.02 0.11 0.09 0.06 0.04 0.12
5 0.09 0.04 0.05 0.02 1.00 0.06 0.07 0.05 0.02 0.08
6 0.09 0.12 0.09 0.11 0.06 1.00 0.12 0.08 0.07 0.14
7 0.10 0.08 0.09 0.09 0.07 0.12 1.00 0.08 0.03 0.15
8 0.08 0.08 0.07 0.06 0.05 0.08 0.08 1.00 0.06 0.09
9 0.07 0.11 0.04 0.04 0.02 0.07 0.03 0.06 1.00 0.03
10 0.10 0.09 0.13 0.12 0.08 0.14 0.15 0.09 0.03 1.00
Model saya adalah:
yld = gen + repl + error
baik gen dan repl dianggap acak dan saya ingin mendapatkan perkiraan efek acak yang terkait dengan masing-masing gen, namun saya perlu mempertimbangkan matriks hubungan.
Jika terlalu rumit untuk memuat model bersarang, saya hanya akan menghapus repl dari model, tetapi idealnya saya akan menyimpannya.
yld = gen + error
Bagaimana saya bisa mencapai ini menggunakan paket R, mungkin dengan nlme atau lme4? Saya tahu bahwa ASREML dapat melakukannya tetapi saya tidak memiliki pegangan dan saya suka R untuk menjadi kuat dan juga gratis.
sumber
Jawaban:
Coba
kinship
paket yang didasarkan padanlme
. Lihat utas ini pada model r-sig-campuran untuk detail. Saya lupa tentang ini ketika saya mencoba melakukannya untuk model logistik. Lihat /programming/8245132 untuk contoh yang berhasil.Untuk respons yang tidak normal, Anda perlu memodifikasi paket pedigreemm, yang didasarkan pada lme4. Itu membuat Anda dekat, tetapi matriks hubungan harus dibuat dari silsilah. Fungsi di bawah ini adalah modifikasi dari
pedigreemm
fungsi yang mengambil matriks hubungan acak.Penggunaannya mirip dengan
pedigreemm
kecuali Anda memberikannya matriks hubungan sebagairelmat
argumen, bukannya pedigree sebagaipedigree
argumen.Ini tidak berlaku di sini karena Anda memiliki sepuluh pengamatan / individu, tetapi untuk satu pengamatan / individu Anda memerlukan satu baris lagi dalam fungsi ini dan patch kecil
lme4
untuk memungkinkan hanya satu pengamatan per efek acak.sumber
nlme
dan diperlukan sesuatu yang lebih rumitgen + repl
; juga, saya pikir korelasi perlu memanggil salah satunlme
fungsi kovarians / korelasi dengancovmat
sebagai parameter. Notasi untuk ini benar-benar rumit sehingga untuk mengatakan lebih banyak, saya membutuhkan Pinhiero / Bates, yang tidak saya lakukan hari ini.lme(yld ~ 1, data = mydata, random = ~ 1 | gen, correlation = corSymm(value=covmatX, form= ~ gen, fixed=TRUE))
, di manacovmatX
adalah versi modifikasicovmat
untuk membuatnyacorSymm
menginginkannya. Saya juga tidak yakinform
istilahnya benar.Jawaban ini adalah potensi perluasan saran yang dibuat oleh Aaron, yang telah menyarankan untuk menggunakan Pedigreem. Pedigreem dapat menghitung hubungan dari proyek sebagai sintaks berikut, saya tidak tahu bagaimana kita dapat menggunakan output relasi seperti itu dari cara yang berbeda.
Fit model campuran dari paket ini didasarkan pada lme4 untuk sintaks untuk fungsi utama mirip dengan lme4 fungsi paket fungsi lmer kecuali Anda dapat memasukkan objek silsilah di dalamnya.
Saya tahu ini bukan jawaban yang sempurna untuk pertanyaan Anda, namun ini bisa membantu sedikit. saya senang Anda mengajukan pertanyaan ini, menarik bagi saya!
sumber
require(kinship); model1 <- lmekin(yld ~1, random = ~ 1|gen, varlist =list(covmat), data=mydata)
.model1 <- lmekin(yld ~1, random = ~ 1|gen, varlist =list(covmat), data=mydata)
masih ada masalah, maaf untuk posting prematur. Adakah yang bisa memperbaikinya?lmer()
dalamlme4
paket tersebut memungkinkan efek acak menyeberang. Di sini, Anda akan menggunakan sesuatu sepertiy ~ (1|gen) + (1|repl)
Untuk referensi lengkap;
http://www.stat.wisc.edu/~bates/PotsdamGLMM/LMMD.pdf
sumber