Как сделать обобщенную линейную модель с несколькими зависимыми переменными в R?

17

У меня есть шесть зависимых переменных (данные подсчета) и несколько независимых переменных, я вижу, что в MMR скрипт выглядит так:

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

Но, поскольку мои данные рассчитаны, я хочу использовать обобщенную линейную модель, и я попробовал это:

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

И появляется это сообщение об ошибке:

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`

Может кто-нибудь объяснить мне это сообщение об ошибке или способ решить мою проблему?

Juan
источник
В продолжение ответа @Giorgio Spedicato: должны ли мы предполагать, что вам нужен набор моделей, которые обрабатывают каждую зависимую переменную отдельно, как, например lm, когда вы даете ей матрицу?
сопряженный
Я скучаю по второй части анализа. В MMR (многомерная множественная регрессия) после: lm(cbind(DV1,DV2,DV3,DV4,DV5,DV6) ~ IV1 + IV2 + ... + IVn) я должен
Хуан
Возможно, я только что скорректировал свой ответ, чтобы ответить на этот вопрос. Кроме того , помните , не пресс возвращения в комментариях :-)
conjugateprior
Я скучаю по второй части анализа. В MMR (многомерная множественная регрессия) после: lm(cbind(DV1,DV2,DV3,DV4,DV5,DV6) ~ IV1 + IV2 + ... + IVn) я должен использовать команду manova () следующим образом: summary(manova(my.model)) сделать многомерный дисперсионный анализ и увидеть значение каждой независимой переменной. Это конечная цель.
Хуан
Ни manova, ни anova не определены для такого рода данных, поэтому они не предлагаются. Но если вы хотите увидеть влияние каждого IV, то таблица регрессии, предоставленная им summary, предоставит их вам для каждого DV.
сопряженный

Ответы:

11

Короткий ответ - glmэто не так. lmБудет создавать mlmобъекты , если вы даете ему матрицу, но это не так широко поддерживается в дженериков и в любом случае не может легко обобщается , glmпотому что пользователи должны иметь возможность указать двойной столбец зависимых переменных для моделей логистической регрессии.

Решение состоит в том, чтобы соответствовать моделям отдельно. Предположим, что ваши IV и DV живут в data.frame ddи называются так, как они есть в вашем вопросе. Следующий код составляет список подходящих моделей, проиндексированных по имени зависимой переменной, которую они используют:

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

Чтобы проверить результаты, просто оберните ваши обычные функции в a lapply, например так:

lapply(models, summary) ## summarize each model

Без сомнения, есть более изящные способы сделать это в R, но это должно сработать.

conjugateprior
источник
6

Мне сказали, что существуют многофакторные обобщенные линейные (смешанные) модели, которые решают вашу проблему. Я не эксперт в этом, но я бы посмотрел документацию SABER и эту книгу по многомерным GLM. Может быть, они помогают ...

Джорджо Спедикато
источник
2
Вы поднимаете интересную точку (+1). Многовариантные GLM, безусловно, существуют. С другой стороны, предоставление lmматрицы для зависимой переменной, вероятно, следует рассматривать скорее как синтаксический сахар, чем как выражение многомерной модели: если бы это была многомерная (нормальная) модель, то это была бы та, где ошибки были бы ' spherical ', то есть тот, в котором вы могли бы запустить отдельные регрессии для каждого элемента зависимой переменной и получить один и тот же ответ.
сопряженный