Млогит преобразование данных, R - PullRequest
0 голосов
/ 27 февраля 2019

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

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?

Спасибо!

1 Ответ

0 голосов
/ 27 февраля 2019

Вы можете использовать case_when() из dplyr вместе с mutate():

library(dplyr)

mlogitdataset <- read.csv(text = "Observation,Outcome,VariableA,VariableB,VariableC,alt
1,FALSE,1.27,0.20,0.81,-1
1,FALSE,1.27,0.20,0.81,0
1,TRUE,1.27,0.20,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")

mlogitdataset <- mutate(mlogitdataset, 
       VariableD = case_when(
         alt == -1 ~ VariableC,
         alt ==  0 ~ VariableB,
         alt ==  1 ~ VariableA
       ))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...