R:绘制 MASS polr 序数模型的预测
R: Plotting predictions of MASS polr ordinal model
我使用 MASS
的 polr
函数在序数数据上拟合了一个比例赔率累积 logit 模型,使用(在本例中,数据给出了对不同种类奶酪的偏好):
data=read.csv("https://www.dropbox.com/s/psj74dx8ohnrdlp/cheese.csv?dl=1")
data$response=factor(data$response, ordered=T) # make response into ordered factor
head(data)
cheese response count
1 A 1 0
2 A 2 0
3 A 3 1
4 A 4 7
5 A 5 8
6 A 6 8
library(MASS)
fit=polr(response ~ cheese, weights=count, data=data, Hess=TRUE, method="logistic")
为了绘制模型的预测,我使用
制作了一个效果图
library(effects)
library(colorRamps)
plot(allEffects(fit),ylab="Response",type="probability",style="stacked",colors=colorRampPalette(c("white","red"))(9))
我想知道,如果根据 effects
包报告的预测均值,是否也可以绘制出某种东西,例如对每种奶酪的平均偏好以及 95% 的置信区间?
编辑:最初我还询问了如何获得 Tukey 事后测试,但与此同时我发现可以使用
library(multcomp)
summary(glht(fit, mcp(cheese = "Tukey")))
或使用包 lsmeans
作为
summary(lsmeans(fit, pairwise ~ cheese, adjust="tukey", mode = "linear.predictor"),type="response")
Russ Lenth 只是友善地向我指出平均偏好和 95% 置信区间可以简单地通过 lsmeans
和 option mode="mean"
(?models
) 获得(这同样适用clm
或 clmm
模型适合使用包 ordinal
):
df=summary(lsmeans(fit, pairwise ~ cheese, mode = "mean"),type="response")$lsmeans
cheese mean.class SE df asymp.LCL asymp.UCL
A 6.272828 0.1963144 NA 5.888058 6.657597
B 3.494899 0.2116926 NA 3.079989 3.909809
C 4.879440 0.2006915 NA 4.486091 5.272788
D 7.422159 0.1654718 NA 7.097840 7.746478
这给了我正在寻找的情节:
library(ggplot2)
library(ggthemes)
ggplot(df, aes(cheese, mean.class)) + geom_bar(stat="identity", position="dodge", fill="steelblue", width=0.6) +
geom_errorbar(aes(ymin=asymp.LCL, ymax=asymp.UCL), width=0.15, position=position_dodge(width=0.9)) +
theme_few(base_size=18) + xlab("Type of cheese") + ylab("Mean preference") +
coord_cartesian(ylim = c(1, 9)) + scale_y_continuous(breaks=1:9)
我使用 MASS
的 polr
函数在序数数据上拟合了一个比例赔率累积 logit 模型,使用(在本例中,数据给出了对不同种类奶酪的偏好):
data=read.csv("https://www.dropbox.com/s/psj74dx8ohnrdlp/cheese.csv?dl=1")
data$response=factor(data$response, ordered=T) # make response into ordered factor
head(data)
cheese response count
1 A 1 0
2 A 2 0
3 A 3 1
4 A 4 7
5 A 5 8
6 A 6 8
library(MASS)
fit=polr(response ~ cheese, weights=count, data=data, Hess=TRUE, method="logistic")
为了绘制模型的预测,我使用
制作了一个效果图library(effects)
library(colorRamps)
plot(allEffects(fit),ylab="Response",type="probability",style="stacked",colors=colorRampPalette(c("white","red"))(9))
我想知道,如果根据 effects
包报告的预测均值,是否也可以绘制出某种东西,例如对每种奶酪的平均偏好以及 95% 的置信区间?
编辑:最初我还询问了如何获得 Tukey 事后测试,但与此同时我发现可以使用
library(multcomp)
summary(glht(fit, mcp(cheese = "Tukey")))
或使用包 lsmeans
作为
summary(lsmeans(fit, pairwise ~ cheese, adjust="tukey", mode = "linear.predictor"),type="response")
Russ Lenth 只是友善地向我指出平均偏好和 95% 置信区间可以简单地通过 lsmeans
和 option mode="mean"
(?models
) 获得(这同样适用clm
或 clmm
模型适合使用包 ordinal
):
df=summary(lsmeans(fit, pairwise ~ cheese, mode = "mean"),type="response")$lsmeans
cheese mean.class SE df asymp.LCL asymp.UCL
A 6.272828 0.1963144 NA 5.888058 6.657597
B 3.494899 0.2116926 NA 3.079989 3.909809
C 4.879440 0.2006915 NA 4.486091 5.272788
D 7.422159 0.1654718 NA 7.097840 7.746478
这给了我正在寻找的情节:
library(ggplot2)
library(ggthemes)
ggplot(df, aes(cheese, mean.class)) + geom_bar(stat="identity", position="dodge", fill="steelblue", width=0.6) +
geom_errorbar(aes(ymin=asymp.LCL, ymax=asymp.UCL), width=0.15, position=position_dodge(width=0.9)) +
theme_few(base_size=18) + xlab("Type of cheese") + ylab("Mean preference") +
coord_cartesian(ylim = c(1, 9)) + scale_y_continuous(breaks=1:9)