我得到了一些很好的帮助,可以正确格式化我的数据,从而在这里使用mlogit(Formatting data for mlogit)生成多项式逻辑模型。

但是,我现在正在尝试分析模型中协变量的影响。我发现mlogit.effects()中的帮助文件不是很有帮助。问题之一是该模型似乎会产生许多行的NA(请参阅下面的index(mod1))。

  • 谁能弄清楚为什么我的数据产生了这些NA?
  • 有人可以帮助我获取mlogit.effects来处理以下数据吗?
  • 我会考虑将分析转移到multinom()。但是,我不知道如何格式化数据以适合multinom()的公式。我的数据是对七个不同项目(可访问性,信息,权衡,辩论,社交和响应性)的一系列排名。我是否仅对他们选择的第一名建模,而忽略他们在其他排名中选择的内容?我可以得到这些信息。

  • 可复制的代码如下:
    #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),]
    
    #Change the choice index variable (X) to have no interruptions, as a result of removing some incomplete cases
    dat$X <- seq(1,nrow(dat),1)
    
    #Tidy data to get it into long format
    dat.out <- dat %>%
      gather(Open, Rank, -c(1,9:12)) %>%
      arrange(X, Open, Rank)
    
    #Create mlogit object
    mlogit.out <- mlogit.data(dat.out, shape='long',alt.var='Open',choice='Rank', ranked=TRUE,chid.var='X')
    
    #Fit Model
    mod1 <- mlogit(Rank~1|gender+age+economic+Job,data=mlogit.out)
    

    这是我尝试建立一个类似于帮助文件中所描述的数据框的尝试。它不起作用。我承认,尽管我非常了解应征家庭,但对我来说,tapply还是很晦暗的。
    with(mlogit.out, data.frame(economic=tapply(economic, index(mod1)$alt, mean)))
    

    从帮助中进行比较:
    data("Fishing", package = "mlogit")
    Fish <- mlogit.data(Fishing, varying = c(2:9), shape = "wide", choice = "mode")
    m <- mlogit(mode ~ price | income | catch, data = Fish)
    
    # compute a data.frame containing the mean value of the covariates in
    # the sample data in the help file for effects
    z <- with(Fish, data.frame(price = tapply(price, index(m)$alt, mean),
                           catch = tapply(catch, index(m)$alt, mean),
                           income = mean(income)))
    
    # compute the marginal effects (the second one is an elasticity
    effects(m, covariate = "income", data = z)
    

    最佳答案

    您正在使用排名数据,而不仅仅是多项选择数据。 mlogit中排名数据的结构是,一个人的第一组记录是所有选项,然后第二条是除第一个记录之外的所有选项,依此类推。但是索引每次都假定相等数量的选项。所以有很多NA。我们只需要摆脱它们。

    > with(mlogit.out, data.frame(economic=tapply(economic, index(mod1)$alt[complete.cases(index(mod1)$alt)], mean)))
                economic
    Accessible      5.13
    Debate          4.97
    Information     5.08
    Officials       4.92
    Responsive      5.09
    Social          4.91
    Trade.Offs      4.91
    

    关于r - 多项式Lo​​gistic模型对Mlogit的影响,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30876000/

    10-12 16:29