【问题标题】:Predict a factor of 3 levels and return the % of each factor预测 3 个水平的因子并返回每个因子的百分比
【发布时间】:2019-12-17 23:15:18
【问题描述】:

我正在尝试使用一组变量来预测一个三级因子。该组是 A、B 和 C。

m<-glm(as.factor(Group)~Sex+BloodType+Pressure,data=Hel,family = "binomial")

newdata <- data.frame(Sex="M",BloodType="A+", Pressure=80)

predict(m,newdata)

这会返回:

        1 
0.7133324 

我想把它还给我:

A        B        C
20.00   40.00    40.000

我该怎么做?谢谢。

【问题讨论】:

    标签: r machine-learning glm predict


    【解决方案1】:

    有两个问题需要解决:

    首先,glm 只能使用两级结果进行逻辑回归。如果您提供的结果变量具有两个以上的水平,它会将除第一个(参考)水平之外的所有水平合并到第二个水平。要进行多项回归,您需要使用不同的函数(有几个包可以进行多项回归,例如,polr 来自MASS 包,multinom 来自nnet 包(参见@ Stupidwolf 的回答),vglm 来自 VGAM 包;另请参阅 mlogitgmnl 包)。

    其次,predict(m1, newdata) 提供对数赔率规模的预测。要获得概率尺度上的预测,您需要执行predict(m1, newdata, type="response")。需要设置类似的选项(尽管参数和/或参数选项的名称可能不同)才能获得多项模型概率尺度上的预测。

    【讨论】:

    • 感谢您的回复!! :)
    【解决方案2】:

    我猜你必须使用允许多项回归的东西,比如 nnet?

    library(nnet)
    trn = sample(1:nrow(iris),100)
    fit_nnet <- multinom(Species ~ ., iris[trn,])
    
    head(predict(fit_nnet,iris[-trn,],type="prob"))
          setosa   versicolor    virginica
    7  1.0000000 2.348893e-11 2.166176e-58
    9  0.9999323 6.765017e-05 2.438304e-52
    10 0.9999940 6.035319e-06 1.530614e-56
    12 1.0000000 1.355834e-09 1.315066e-57
    

    【讨论】:

    • 感谢您的回复!我正在使用你的代码:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    相关资源
    最近更新 更多