У меня есть набор данных, который выглядит следующим образом:
Observation Outcome VariableA VariableB VariableC
1 1 1.27 0.2 0.81
2 0 0.30 0.45 0.70
3 -1 0.27 1.2 0.56
Переменная Outcome может принимать значения 1, 0, -1 и должна быть зависимой переменной в многочленной модели логита, которую ябудет реализовывать в R с помощью пакета mlogit.Я преобразовал свои данные, используя следующий код:
mlogitdataset <- mlogit.data(dataset, choice = "Outcome", shape="wide")
, который дает мне следующий новый набор данных:
Observation Outcome VariableA VariableB VariableC alt
1 FALSE 1.27 0.2 0.81 -1
1 FALSE 1.27 0.2 0.81 0
1 TRUE 1.27 0.2 0.81 1
2 FALSE 0.20 0.45 0.70 -1
2 TRUE 0.20 0.45 0.70 0
2 FALSE 0.20 0.45 0.70 1
По сути, я хочу, чтобы данные были структурированы, однако,Я не хочу использовать VariableA-C в качестве отдельных независимых переменных в полиномиальной логит-регрессии.Вместо этого я хочу, чтобы независимая переменная принимала значение из переменной A, B или C в зависимости от значения alt.Это может быть представлено VariableD в таблице ниже:
Observation Outcome VariableA VariableB VariableC alt VariableD
1 FALSE 1.27 0.20 0.81 -1 0.81
1 FALSE 1.27 0.20 0.81 0 0.20
1 TRUE 1.27 0.20 0.81 1 1.27
2 FALSE 0.20 0.45 0.70 -1 0.70
2 TRUE 0.20 0.45 0.70 0 0.45
2 FALSE 0.20 0.45 0.70 1 0.20
Это позволило бы мне запустить регрессию полиномиального логита:
mlog <- mlogit(Outcome ~ 1 | VariableD, data=mlogitdataset, reflevel = "0")
Я пытался создать VariableD непосредственно в mlogitобъект (mlogitdataset), используя следующий код:
outcome_map <- data.frame(alt = c(1, 0, -1), var = grep('Variable[A-C]', names(mlogitdataset)))
mlogitdataset$VariableD <- mlogitdataset[cbind(seq_len(nrow(mlogitdataset)), with(outcome_map, var[match(mlogitdataset$alt, alt)]))]
Однако при попытке запустить полиномиальную логит-регрессию выдается сообщение об ошибке «Заданные имена строк неправильной длины».
Как мне преобразовать / отформатировать / структурировать данные, чтобы я мог запустить намеченную регрессию, используя функцию mlogit?
Спасибо!