如何解决如何将 Y 值的优势比置于 X 均值上下一个标准偏差处,以显示 ggplot或其他 R 图 线性概率模型逻辑回归情节
我有这样的数据。
Probability <- c(1,1,0)
score2 <- c(2,3,4,2,3)
Data2 <- data.frame(Probability,score2)
Data
Probability score2
1 1 2
2 1 3
3 1 4
4 1 2
5 1 3
6 1 4
7 1 2
8 1 3
9 1 4
10 0 4
11 0 3
12 0 2
13 0 3
14 0 2
15 0 3
16 0 2
17 0 3
18 1 2
19 1 3
20 1 4
21 1 2
22 1 3
23 1 4
24 1 2
25 1 3
26 1 3
27 0 4
28 0 3
29 0 2
30 0 3
31 0 2
32 0 3
33 0 2
34 0 3
我不仅需要绘制相关图,还需要添加比值比,比较 Y 在高于和低于 X 均值的 1 个标准差处的几率(以及相应的 p 值)。
除了 +/- 1 SD 的优势比及其 p 值之外,以下内容让我得到了一切。
ggplot(Data2,aes(score2,Probability))+
geom_smooth(method='lm',alpha = .3,color = "black")+
stat_cor(method = "pearson",label.x.npc = "left",label.y.npc= "top",label.sep = "
")+
scale_colour_grey(start = .6,end = .2)+
scale_fill_grey(start = 0.6,end = 1)+
theme_classic()+
scale_y_continuous(breaks = c(0,0.25,0.5,0.75,1),limits = c(0,1))
问题
如何添加优势比(比较 X 平均值上下 1 个标准差处的概率)?
解决方法
您也可以使用用于线性概率模型的对比包来估计 CI。
library(ggpubr)
mean_x = mean(Score2)
sd_x = sd(Score2)
线性概率模型
lm_prob <- lm(Probability ~ Score2,data=Data2)
pred_probs = predict(lm_prob,newdata = data.frame(Score2 = c(mean_x - sd_x,mean_x+sd_x)))
or_pred = (pred_probs[2]/(1-pred_probs[2]))/(pred_probs[1]/(1-pred_probs[1]))
逻辑回归
glm_prob <- glm(Probability ~ Score2,data=Data2,family=binomial())
glm_pred_probs = predict(glm_prob,mean_x+sd_x)),type = "response",se.fit = TRUE)
glm_or_pred = (glm_pred_probs$fit[2]/(1-glm_pred_probs$fit[2]))/(glm_pred_probs$fit[1]/(1-glm_pred_probs$fit[1]))
对比语句可以用 mean_x + sd_x 和 mean_x - sd_x 更新。它不会改变结果。
library(contrast)
glm_contrast <-
contrast(glm_prob,list(Score2 = sd_x),list(Score2 = -sd_x)
)
print(glm_contrast,X = TRUE)
or_ci = paste0(round(exp(glm_contrast$Contrast),2),",95% CI:",round(exp(glm_contrast$Lower),round(exp(glm_contrast$Upper),p = ",round(glm_contrast$Pvalue,3)
)
情节
ggplot(Data2,aes(Score2,Probability))+
geom_smooth(method='lm',alpha = .3,color = "black")+
stat_cor(method = "pearson",label.x.npc = "left",label.y.npc= "top",label.sep = "
")+
annotate("text",x=3.0,y=0.9,label= paste0("OR = ",or_ci)) +
scale_colour_grey(start = .6,end = .2)+
scale_fill_grey(start = 0.6,end = 1)+
theme_classic()+
scale_y_continuous(breaks = c(0,0.25,0.5,0.75,1),limits = c(0,1))
,
@jvargh7 帮我解决了大部分问题(减去标准偏差括号)here
图书馆(ggpubr)
### @jVargh7's code ###
library(ggplot2)
library(ggpubr)
mean_x = mean(Score2)
sd_x = sd(Score2)
lm_prob <- lm(Probability ~ Score2,mean_x+sd_x)))
or_pred = (pred_probs[2]/(1-pred_probs[2]))/(pred_probs[1]/(1-pred_probs[1]))
glm_prob <- glm(Probability ~ Score2,se.fit = TRUE)
glm_or_pred = (glm_pred_probs$fit[2]/(1-glm_pred_probs$fit[2]))/(glm_pred_probs$fit[1]/(1-glm_pred_probs$fit[1]))
install.packages("contrast")
library(contrast)
glm_contrast <- contrast(glm_prob,list(Score2 = -sd_x))
print(glm_contrast,95% CI: ",3)
)
ggplot(Data2,label.x = 2.75,label.y= .6,label.sep = ",")+
scale_colour_grey(start = .6,1))+
### new code ###
geom_bracket(xmin = mean(Score2)-sd(Score2),xmax = mean(Score2)+sd(Score2),y.position = .9,label = paste0("OR = ",or_ci),tip.length = c(0.42,0.29),vjust = -1)
下面的示例输出
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。