预测 3 个水平的因素和 return 每个因素的百分比
Predict a factor of 3 levels and return the % of each factor
我正在尝试使用一组变量预测三级因子。该组为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)
和这个 returns:
1
0.7133324
我想把它还给我:
A B C
20.00 40.00 40.000
我该怎么做?谢谢
我猜你必须使用像 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
有两个问题需要解决:
首先,glm
只能进行两级结果的逻辑回归。如果您提供具有两个以上级别的结果变量,它会将除第一个(参考)级别之外的所有级别合并到第二个级别。要进行多项式回归,您需要使用不同的函数(有几个包可以进行多项式回归,例如 MASS
包中的 polr
,multinom
nnet
包(请参阅@Stupidwolf 的回答),VGAM
包中的 vglm
;另请参阅 mlogit
和 gmnl
包。
其次,predict(m1, newdata)
提供对数赔率尺度的预测。要获得概率尺度的预测,您需要执行 predict(m1, newdata, type="response")
。需要设置类似的选项(尽管参数 and/or 参数选项可能具有不同的名称)以获得多项式模型概率尺度的预测。
我正在尝试使用一组变量预测三级因子。该组为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)
和这个 returns:
1
0.7133324
我想把它还给我:
A B C
20.00 40.00 40.000
我该怎么做?谢谢
我猜你必须使用像 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
有两个问题需要解决:
首先,glm
只能进行两级结果的逻辑回归。如果您提供具有两个以上级别的结果变量,它会将除第一个(参考)级别之外的所有级别合并到第二个级别。要进行多项式回归,您需要使用不同的函数(有几个包可以进行多项式回归,例如 MASS
包中的 polr
,multinom
nnet
包(请参阅@Stupidwolf 的回答),VGAM
包中的 vglm
;另请参阅 mlogit
和 gmnl
包。
其次,predict(m1, newdata)
提供对数赔率尺度的预测。要获得概率尺度的预测,您需要执行 predict(m1, newdata, type="response")
。需要设置类似的选项(尽管参数 and/or 参数选项可能具有不同的名称)以获得多项式模型概率尺度的预测。