Я воспроизвожу код Stata на R и хочу выполнить полиномиальную логистическую регрессию с функцией mlogit
из одноименного пакета (я знаю, что в nnet
есть функция multinom
, но я не хочу использовать эту один).
Моя проблема в том, что для использования mlogit
мне нужно, чтобы мои данные были отформатированы с использованием mlogit.data
, и я не могу понять, как правильно их форматировать. Сравнение моих данных с данными, используемыми в примерах в документации и в этот вопрос, я понимаю, что он не в той же форме.
Действительно, данные, которые я использую, выглядят так:
df <- data.frame(ID = seq(1, 10),
type = c(2, 3, 4, 2, 1, 1, 4, 1, 3, 2),
age = c(28, 31, 12, 1, 49, 80, 36, 53, 22, 10),
dum1 = c(1, 0, 0, 0, 0, 1, 0, 1, 1, 0),
dum2 = c(1, 0, 1, 1, 0, 0, 1, 0, 1, 0))
ID type age dum1 dum2
1 1 2 28 1 1
2 2 3 31 0 0
3 3 4 12 0 1
4 4 2 1 0 1
5 5 1 49 0 0
6 6 1 80 1 0
7 7 4 36 0 1
8 8 1 53 1 0
9 9 3 22 1 1
10 10 2 10 0 0
тогда как данные, которые они используют, похожи на:
key altkey A B C D
1 201005131 1 2.6 118.17 117 0
2 201005131 2 1.4 117.11 115 0
3 201005131 3 1.1 117.38 122 1
4 201005131 4 24.6 NA 122 0
5 201005131 5 48.6 91.90 122 0
6 201005131 6 59.8 NA 122 0
7 201005132 1 20.2 118.23 113 0
8 201005132 2 2.5 123.67 120 1
9 201005132 3 7.4 116.30 120 0
10 201005132 4 2.8 118.86 120 0
11 201005132 5 6.9 124.72 120 0
12 201005132 6 2.5 123.81 120 0
Как видите, в их случае есть столбец altkey
, в котором подробно описывается каждая категория для каждого key
, а также столбец D
, показывающий, какую альтернативу выбрал человек.
Однако у меня есть только один столбец (type
), который показывает выбор человека, но не показывает другие альтернативы или значения других переменных для каждой из этих альтернатив. Когда я пытаюсь применить mlogit
, у меня есть:
library(mlogit)
mlogit(type ~ age + dum1 + dum2, df)
Ошибка в data.frame(lapply(index, function(x) x[drop = TRUE]), row.names = rownames(mydata)) : предоставленные имена строк имеют неправильную длину
Следовательно, как я могу отформатировать свои данные, чтобы они соответствовали типу данных, который требует mlogit
?
Редактировать: следуя советам @edsandorf, я изменил свой фрейм данных, и mlogit.data
работает, но теперь все остальные независимые переменные имеют одинаковое значение для каждой альтернативы. Должен ли я установить эти переменные в 0 в строках, где выбранная альтернатива равна 0 или FALSE? (на самом деле, может ли кто-нибудь показать мне процедуру от того, где я нахожусь, до результатов mlogit
, потому что я не понимаю, где я ошибаюсь в оценке?)
Данные, которые я показываю здесь (df
), не являются моими истинными данными. Однако это точно такая же форма: столбец с выбором альтернативы (type
), столбцы с пустышками и возрастом и т. д.
Вот процедура, которую я сделал до сих пор (я не устанавливал альтернативы на 0):
# create a dataframe with all alternatives for each ID
qqch <- data.frame(ID = rep(df$ID, each = 4),
choice = rep(1:4, 10))
# merge both dataframes
df2 <- dplyr::left_join(qqch, df, by = "ID")
# change the values in stype by 1 or 0
for (i in 1:length(df2$ID)){
df2[i, "type"] <- ifelse(df2[i, "type"] == df2[i, "choice"], 1, 0)
}
# format for mlogit
df3 <- mlogit.data(df2, choice = "type", shape = "long", alt.var = "choice")
head(df3)
ID choice type age dum1 dum2
1.1 1 1 FALSE 28 1 1
1.2 1 2 TRUE 28 1 1
1.3 1 3 FALSE 28 1 1
1.4 1 4 FALSE 28 1 1
2.1 2 1 FALSE 31 0 0
2.2 2 2 FALSE 31 0 0
If I do :
mlogit(type ~ age + dum1 + dum2, df3)
У меня ошибка:
Ошибка вsolve.default(H, g[!fixed]): система вычислительно сингулярна: взаимное число условия
mlogit.data()
, чтобы добавить дополнительные атрибуты к данным, которые требуются функцииmlogit()
. - person edsandorf   schedule 06.12.2019df
), не являются моими истинными данными. Однако это точно такая же форма: столбец с выбором альтернативы (type
), столбцы с пустышками и возрастом и т. д. Я отредактировал свой пост, чтобы показать, что я сделал до сих пор. - person bretauv   schedule 06.12.2019dum1
иdum2
работают одинаково: они различаются у разных людей, но не у разных вариантов выбора; 2) немного больше контекста: каждый человек делает выбор из 4-х профессиональных программ. Таким образом, каждый тип одинаков независимо от лиц/лиц, принимающих решения; 3) каждое лицо, принимающее решение, может выбрать любую из 4 альтернатив. Тип переменной отражает выбор, сделанный каждым лицом, принимающим решение. - person bretauv   schedule 06.12.2019