【问题标题】:Predicted probabilities from multinomial models in RR中多项式模型的预测概率
【发布时间】:2015-11-25 13:45:23
【问题描述】:

我的主要问题是:mnlogit()predict() 函数给出的概率是多少,它与 nnetmlogitand 包的概率有何不同?

有些背景,我尝试仅根据个别特定变量对结果进行建模,因为我不知道我的选择者的替代方案。对于给定的模型,我可以从所有三个模型中得到相同的预测概率,但是mnlogit给出了几组概率,其中第一组与其他包给出的概率相似。看着mnlogit 的小插曲,我知道我可以得到个别的特定概率,但我不认为那些是我提取的(?),我也不认为指定模型来获取这些。

查看下面的示例(不是最紧凑的示例,而是我在学习这些函数时使用的示例),您可以看到mnlogit 给出了几组概率。

    library(data.table);library(stringr);library(nnet);library(mlogit);library(mnlogit)
data("ModeCanada", package = "mlogit")
bususers <- with(ModeCanada, case[choice == 1 & alt == "bus"])
ModeCanada <- subset(ModeCanada, !case %in% bususers)
ModeCanada <- subset(ModeCanada, nchoice == 4)
ModeCanada <- subset(ModeCanada, alt != "bus")
ModeCanada$alt <- ModeCanada$alt[drop = TRUE]
KoppWen00 <- mlogit.data(ModeCanada, shape='long', chid.var = 'case',
                         alt.var = 'alt', choice='choice',
                         drop.index=TRUE)

data("ModeCanada", package = "mlogit")
busUsers <- with(ModeCanada, case[choice == 1 & alt == "bus"])
Bhat <- subset(ModeCanada, !case %in% busUsers & alt != "bus" &
                     nchoice == 4)
Bhat$alt <- Bhat$alt[drop = TRUE]
head(ModeCanada)
Mode = data.table(ModeCanada)

# Some additional editing in order to make it more similar to the typical data sets I work with
Bhat2 = data.table(KoppWen00)
Bhat2[,Choice:=gsub("\\.","",str_sub(row.names(KoppWen00),5,-1))][,id:=as.character(as.numeric(str_sub(row.names(Bhat),1,4)))]
Bhat2 = Bhat2[choice=="TRUE"][,c("Choice","urban","income","id"),with=F]

# nnet package
ml.nn<- multinom(Choice ~ urban + income,
                 Bhat2)
tmp = data.table(cbind(Bhat2, predict(ml.nn, type="probs", newdata=Bhat2)))
# nnet predictions
tmp[urban=="0" & income==45 & Choice=="air"][1,c("Choice", "urban", "income" , "air","car","train"),with=F]

# mlogit package
ml <- mlogit(Choice ~ 1| urban + income,shape="wide",
                Bhat2)
pml = data.table(cbind(Bhat2, predict(ml,mlogit.data(Bhat2, shape="wide", choice="Choice"))))
# mlogit predictions
unique(pml[Choice=="air" & urban=="0" & income==45 ][,c("Choice", "urban", "income" , "air","car","train"),with=F])

# mnlogit packages
mln.MC <- mnlogit(Choice ~ 1| urban + income, mlogit.data(Bhat2,choice = "Choice",shape="wide"))
preddata = data.table(cbind(mlogit.data(Bhat2,choice = "Choice",shape="wide"), predict(mln.MC)))
# mnlogit predictions, returns several probabilities for each outcome
preddata[Choice==TRUE & urban=="0" & income==45 & alt == "air"]

ps!随意添加标签“mnlogit”!

【问题讨论】:

    标签: r multinomial nnet mlogit


    【解决方案1】:

    我将使用一个比你的更简单的例子,但想法是一样的

    library(mnlogit)
    data(Fish, package = "mnlogit")
    fm <- formula(mode ~ price | income | catch)
    fit <- mnlogit(fm, Fish, choiceVar="alt", ncores = 2)
    p <- predict(fit)
    
    R> head(p)
                 beach      boat   charter       pier
    1.beach 0.09299770 0.5011740 0.3114002 0.09442818
    2.beach 0.09151069 0.2749292 0.4537956 0.17976449
    3.beach 0.01410359 0.4567631 0.5125571 0.01657626
    4.beach 0.17065867 0.1947959 0.2643696 0.37017583
    5.beach 0.02858216 0.4763721 0.4543225 0.04072325
    6.beach 0.01029792 0.5572462 0.4216448 0.01081103
    
    R> summary(apply(p,1,sum))
    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
      1       1       1       1       1       1 
    

    如您所见,predict.mnlogit 的输出概率正是您所期望的:它们是预测观察属于指定类别的概率。即 P(Y_i = y_j | X_i) 其中 j = 1,2,...,k 对于 k 个特定类。如下面的 cmets 所述,概率也取决于模型。因此,更完整的符号是 P(Y_i = y_j | X_i, \theta),其中 \theta 表示模型的估计参数。

    在这种情况下,对于 Obs 1:海滩 9%,船 50%,包机 31%,码头 9%。您选择的任何分类方法(nnetmlogit 等)都应该对其预测概率有类似的解释。类似地,任何数据集对预测概率都有相同的解释。

    您还可以看到,多项式预测的所有可能分类的总和为 1。

    【讨论】:

    • 但是现在您已经包含了个人(收入)、替代(价格)和个人替代(捕获)特定变量。我只有个人特定的,即公式(模式〜1|收入| 1)。请查看 Bhat2 对象的外观,了解我的数据通常是什么样的。
    • 这有什么不同?你问预测概率的解释是什么。我这样回答。是的,不用说,预测概率取决于您的模型......正如我在回答中所说的那样,我只是使用了example(mnlogit::predict.mnlogit) 中的数据,因为这比阅读您的复杂子集更容易理解跨度>
    • 我认为我指定的模型除了例如之外没有任何条件收入,因此对于给定的收入,它应该为所有行/观察结果返回相同的预测概率,但事实并非如此。所以想知道是否有一些由 mnlogit 完成的“隐藏”调节,而不是由 nnet 或 mlogit 完成。
    • 或者mnlogit在预测时是否包含不确定性?
    猜你喜欢
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 2014-04-08
    相关资源
    最近更新 更多