Bagaimana melakukan model linear umum dengan beberapa variabel dependen dalam R?

17

Saya memiliki enam variabel dependen (jumlah data) dan beberapa variabel independen, saya melihat bahwa dalam MMR skripnya seperti ini:

my.model <- lm(cbind(DV1,DV2,DV3,DV4,DV5,DV6) ~ IV1 + IV2 + ... + IVn)

Tapi, karena data saya dihitung, saya ingin menggunakan model linier umum dan saya mencoba ini:

my.model <- glm(cbind(DV1,DV2,DV3,DV4,DV5,DV6) ~ IV1 + IV2 + ... + IVn, family="poisson")

Dan muncul pesan kesalahan ini:

Error in glm.fit(x = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  : 
  (subscript) logical subscript too long`

Adakah yang bisa menjelaskan pesan kesalahan ini kepada saya atau cara untuk menyelesaikan masalah saya?

Juan
sumber
Menindaklanjuti jawaban @Giorgio Spedicato: apakah kami menganggap Anda menginginkan seperangkat model yang memperlakukan setiap variabel dependen secara terpisah, seperti lmhalnya ketika Anda memberikannya sebuah matriks?
conjugateprior
Saya melewatkan bagian kedua analisis. Dalam MMR (Multivariate Multiple Regression) setelah: lm(cbind(DV1,DV2,DV3,DV4,DV5,DV6) ~ IV1 + IV2 + ... + IVn) I must
Juan
Saya mungkin baru saja menyesuaikan jawaban saya untuk menjawab pertanyaan ini. Juga, ingatlah untuk tidak menekan kembali di komentar :-)
conjugateprior
Saya melewatkan bagian kedua analisis. Dalam MMR (Multivariate Multiple Regression) setelah: lm(cbind(DV1,DV2,DV3,DV4,DV5,DV6) ~ IV1 + IV2 + ... + IVn) Saya harus menggunakan perintah manova () seperti ini: summary(manova(my.model)) untuk melakukan analisis varians multivarian dan melihat pentingnya setiap variabel independen. Itu adalah target akhir.
Juan
Baik manova maupun anova tidak ditentukan untuk jenis data ini, karenanya tidak ditawarkan. Tetapi jika Anda ingin melihat dampak dari masing-masing IV maka tabel regresi yang disediakan oleh summaryakan memberikannya kepada Anda untuk setiap DV.
conjugateprior

Jawaban:

11

Jawaban singkatnya adalah glmtidak bekerja seperti itu. The lmakan menciptakan mlmobjek jika Anda memberikan sebuah matriks, tapi ini tidak didukung secara luas dalam obat generik dan tetap tidak bisa dengan mudah menggeneralisasi untuk glmkarena pengguna harus dapat menentukan kolom ganda tergantung variabel untuk model regresi logistik.

Solusinya adalah menyesuaikan model secara terpisah. Asumsikan infus dan DV Anda hidup dalam suatu data.frame dipanggil dddan diberi label seperti apa adanya dalam pertanyaan Anda. Kode berikut membuat daftar model yang cocok yang diindeks dengan nama variabel dependen yang mereka gunakan:

models <- list()
dvnames <- paste("DV", 1:6, sep='')
ivnames <- paste("IV", 1:n, sep='') ## for some value of n

for (y in dvnames){
  form <- formula(paste(y, "~", ivnames))
  models[[y]] <- glm(form, data=dd, family='poisson') 
}

Untuk memeriksa hasilnya, cukup bungkus fungsi biasa Anda di lapply, seperti ini:

lapply(models, summary) ## summarize each model

Tidak ada keraguan cara yang lebih elegan untuk melakukan ini di R, tetapi itu harus berhasil.

conjugateprior
sumber
6

Saya diberitahu Model Multivariate Generalized Linear (Mixed) yang mengatasi masalah Anda. Saya bukan ahli tentang itu, tetapi saya akan melihat dokumentasi SABER dan buku ini tentang GLM multivarian. Mungkin mereka membantu ...

Giorgio Spedicato
sumber
2
Anda memunculkan poin menarik (+1). GLM multivarian tentu ada. Di sisi lain, memberikan lmmatriks untuk variabel dependen mungkin harus dilihat lebih sebagai gula sintaksis, daripada sebagai ekspresi model multivariat: jika itu adalah model multivariat (normal) itu akan menjadi salah satu di mana kesalahan adalah ' bola ', yaitu satu di mana Anda bisa menjalankan regresi terpisah pada setiap elemen dari variabel dependen dan mendapatkan jawaban yang sama.
conjugateprior