问题
I am having a murderous time getting my data set in shape for a multinomial logit analysis via mlogit. My data set is available from the url in the code below.
I'm getting the following error:
Error in
row.names<-.data.frame
(*tmp*
, value = c("1.Accessible", "1.Accessible", : duplicate 'row.names' are not allowed
I've checked elsewhere and this problem seems to come up. I've tried playing with the alt.levels
as opposed to the alt.var
argument, and that doesn't work.
#Loadpackages
library(RCurl)
library(mlogit)
library(tidyr)
library(dplyr)
#URL where data is stored
dat.url<- 'https://raw.githubusercontent.com/sjkiss/Survey/master/mlogit.out.csv'
#Get data
dat<-read.csv(dat.url)
#Complete cases only as it seems mlogit cannot handle missing values or tied data which in this case you might get because of median imputation
dat<-dat[complete.cases(dat),]
#Tidy data to get it into long format
dat.out<-dat %>%
gather(Open, Rank, -c(1,9:12))
#Try to replicate code on pp.26-27 of http://cran.r- project.org/web/packages/mlogit/vignettes/mlogit.pdf
mlogit.out<-mlogit.data(dat.out, shape='long',alt.var='Open',choice='Rank', id.var='X',ranked=TRUE)
#Try this option as per a discussion on stackexchange
mlogit.out<-mlogit.data(dat.out, shape='long',alt.levels='Open',choice='Rank', id.var='X',ranked=TRUE)
回答1:
dat.out<-dat %>%
gather(Open, Rank, -c(1,9:12)) %>%
arrange(X, Open, Rank)
mlogit.out<-mlogit.data(dat.out, shape='long',alt.var='Open',choice='Rank', ranked=TRUE,child.var='X')
head(mlogit.out)
X economic gender age Job Open Rank
1.Accessible 1 5 Male 1970 Professional journalist Accessible FALSE
1.Information 1 5 Male 1970 Professional journalist Information FALSE
1.Responsive 1 5 Male 1970 Professional journalist Responsive TRUE
1.Debate 1 5 Male 1970 Professional journalist Debate FALSE
1.Officials 1 5 Male 1970 Professional journalist Officials FALSE
1.Social 1 5 Male 1970 Professional journalist Social FALSE
回答2:
My suggestion is that you try the multinom() function in the nnet package. It doesn't require the special format of mlogit or mnlogit.
library(RCurl)
library(nnet)
Data<-getURL("https://raw.githubusercontent.com/sjkiss/Survey/master/mlogit.out.csv")
Data<-read.csv(text=Data,header=T)
Data<-na.omit(Data) # Get rid of NA's
Data<-as.data.frame(Data)
# relevel the dependent variable (must be a factor)
Data$Job<-factor(Data$Job)
# Using "Online Blogger" as the reference, substitute with your choice
Data$Job<-relevel(Data$Job,ref="Online blogger")
# Run the multinomial logistic regression
# (seems like an awful lot of variables btw)
Data<-multinom(formula=Job~Accessible+Information+Responsive+Debate+Officials+Social+Trade.Offs+economic+gender+age,data=Data)
来源:https://stackoverflow.com/questions/30852155/formatting-data-for-mlogit