Как я могу перекрыть 2 диаграммы рассеяния с x = средний возраст и y = риск? - PullRequest
0 голосов
/ 08 февраля 2019

Я хочу сделать 2 разбросанных сюжета о риске и сексе.У меня 12 исследований, в каждом из которых есть данные (средние значения, величины эффекта, дисперсия выборки) для мужчин и женщин.Средние значения в каждом исследовании очень разные: в одном исследовании это 1490 для мужчин и 1200 для женщин, в другом - 33 для мужчин и 25 для женщин.Я хочу сделать 2 разных диаграммы рассеяния, которые находятся на одном графике.На оси X должен быть возраст, на оси Y - риск.Мне нужно 2 разных кривых, один для женщин и 1 для мужчин.Как мне слить эти две кривые?И возможно ли получить все на одном графике?

Я пробовал что-то с ggplot2, geom_point () и пакетом метафор.

# yi = effect sizes of each study
# vi = sampling variance 
# data = mydata
library("metafor") 


# adjust margins so the space is better used
par(mar=c(5,5,1,2))

# fit mixed-effects model with age as predictor
res <- rma(yi, vi, mods = ~ magewomen, data=mydata)

# calculate predicted risk ratios for womens’ age 0-30.
preds <- predict(res, newmods=c(0:35), transf=exp)

# calculate point sizes by rescaling the standard errors
wi    <- 1/sqrt(mydata$vi)
size  <- 0.5 + 3.0 * (wi - min(wi))/(max(wi) - min(wi))

# plot the risk ratios against women’s age
women <- plot(mydata$magewomen, exp(mydata$yi), pch=19, cex=size, 
     xlab="womens age", ylab="Risk",
     las=1, bty="l", log="y")

# add predicted values (and corresponding CI bounds)
lines(0:35, preds$pred)
lines(0:35, preds$ci.lb, lty="dashed")
lines(0:35, preds$ci.ub, lty="dashed")

# Same procedure, just for men 

# adjust margins so the space is better used
par(mar=c(5,5,1,2))

# fit mixed-effects model with men’s age as predictor
res2 <- rma(yi, vi, mods = ~ magemen, data=mydata)

# calculate predicted risk ratios for men’s age from 0-30
preds2 <- predict(res2, newmods=c(0:35), transf=exp)

# calculate point sizes by rescaling the standard errors
wi    <- 1/sqrt(mydata$vi)
size  <- 0.5 + 3.0 * (wi - min(wi))/(max(wi) - min(wi))

# plot the risk ratios against men’s age
men <- plot(mydata$magemen, exp(mydata$yi), pch=19, cex=size, 
     xlab="mens age", ylab="Risk",
     las=1, bty="l", log="y")

# add predicted values (and corresponding CI bounds)
lines(0:35, preds$pred)
lines(0:35, preds$ci.lb, lty="dashed")
lines(0:35, preds$ci.ub, lty="dashed")

Я ожидаю, что смогу объединить мои 2 диаграммы рассеяния в одно, но я несекрет производства.Кроме того, 2 диаграммы рассеяния выглядят очень похожими друг на друга, что, я думаю, не должно быть.

1 Ответ

0 голосов
/ 08 февраля 2019

Я думаю, что нанесение второго графика на вторичную ось должно решить вашу проблему.Добавьте new = T в качестве параметра при вашем втором вызове par(), и второй график будет нарисован поверх первого.

Затем запустите axis(side=4) в конце кода, чтобы получить ось для второго графика в правой части графика

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...