Jak zrobić uogólniony model liniowy z wieloma zmiennymi zależnymi w R?

17

Mam sześć zmiennych zależnych (dane zliczeń) i kilka zmiennych niezależnych, widzę, że w MMR skrypt wygląda następująco:

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

Ale ponieważ moje dane się liczą, chcę użyć uogólnionego modelu liniowego i próbowałem tego:

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

I pojawia się ten komunikat o błędzie:

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`

Czy ktoś może mi wyjaśnić ten komunikat o błędzie lub sposób rozwiązania mojego problemu?

Juan
źródło
W odpowiedzi na odpowiedź @Giorgio Spedicato: czy mamy przypuszczać, że chcesz mieć zestaw modeli, które traktują każdą zmienną zależną osobno, podobnie lmjak w przypadku podania macierzy?
conjugateprior
Brakuje mi drugiej części analizy. W MMR (wielowymiarowej regresji wielokrotnej) po: lm(cbind(DV1,DV2,DV3,DV4,DV5,DV6) ~ IV1 + IV2 + ... + IVn) muszę
Juan
Być może właśnie dostosowałem swoją odpowiedź, aby odpowiedzieć na to pytanie. Pamiętaj też, aby nie naciskać klawisza Return w komentarzach :-)
sprzężonypon
Brakuje mi drugiej części analizy. W MMR (wielowymiarowa regresja wielokrotna) po: lm(cbind(DV1,DV2,DV3,DV4,DV5,DV6) ~ IV1 + IV2 + ... + IVn) Muszę użyć polecenia manova () w następujący sposób: summary(manova(my.model)) aby przeprowadzić wielowymiarową analizę wariancji i zobaczyć znaczenie każdej zmiennej niezależnej. To jest ostateczny cel.
Juan
Ani manova, ani anova nie są zdefiniowane dla tego rodzaju danych, dlatego nie są oferowane. Ale jeśli chcesz zobaczyć wpływ każdego IV, to tabela regresji dostarczona przez summaryciebie da ci je dla każdego DV.
conjugateprior

Odpowiedzi:

11

Krótka odpowiedź brzmi: glm tak nie działa. lmBędą tworzyć mlmobiekty, jeśli dasz mu matrycy, ale to nie jest powszechnie obsługiwana w generycznych i mimo to nie można łatwo uogólnić do glmponieważ użytkownicy muszą być w stanie określić zmienne zależne podwójnej kolumnie dla modeli regresji logistycznej.

Rozwiązaniem jest osobne dopasowanie modeli. Załóżmy, że twoje IV i DV żyją w ramce data.frame ddi są oznaczone tak, jak są w pytaniu. Poniższy kod tworzy listę dopasowanych modeli indeksowaną według nazwy używanej zmiennej zależnej:

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') 
}

Aby sprawdzić wyniki, po prostu zawiń swoje zwykłe funkcje w następujący sposób lapply:

lapply(models, summary) ## summarize each model

Bez wątpienia są bardziej eleganckie sposoby na zrobienie tego w R, ale to powinno działać.

sprzężonyprior
źródło
6

Powiedziano mi, że istnieją wielowymiarowe uogólnione modele liniowe (mieszane), które rozwiązują twój problem. Nie jestem w tym ekspertem, ale zajrzałbym do dokumentacji SABRE i tej książki o wielowymiarowych GLM. Może pomagają ...

Giorgio Spedicato
źródło
2
Przywołujesz interesujący punkt (+1). Z pewnością istnieją wielowymiarowe GLM. Z drugiej strony, podanie lmmacierzy zmiennej zależnej powinno być raczej postrzegane bardziej jako cukier składniowy niż jako wyrażenie modelu wielowymiarowego: gdyby był to model wielowymiarowy (normalny), to byłby to ten, w którym błędy to „ sferyczny ”, tzn. taki, w którym można było przeprowadzić osobne regresje dla każdego elementu zmiennej zależnej i uzyskać tę samą odpowiedź.
sprzężonyprior