11

私はいくつかの研究に関するデータのコレクションを持っています。各研究について、性別による変数の平均と、これが有意に異なるかどうかに興味があります。各研究について、男性と女性の両方の平均と 95% の信頼区間があります。

私がやりたいことは、これに似たものです: ここに画像の説明を入力

いくつかの種類のドットプロット (dotplot、dotplot2、Dotplot) を使用しましたが、うまくいきませんでした。

Dotplotfromを使用しHmiscて、1 つのシリーズとそのエラーバーを取得できましたが、2 番目のシリーズを追加する方法がわかりません。

ここでDotplot与えられたアドバイスに従って、エラーバーの垂直端を使用して取得しました。

ここに私が使用しているコードの実例があります

data<-data.frame(ID=c("Study1","Study2","Study3"),avgm=c(2,3,3.5),avgf=c(2.5,3.3,4))
data$lowerm <- data$avgm*0.9 
data$upperm <- data$avgm*1.1
data$lowerf <- data$avgf*0.9
data$upperf <- data$avgf*1.1

# Create the customized panel function
mypanel.Dotplot <- function(x, y, ...) {
  panel.Dotplot(x,y,...)
  tips <- attr(x, "other")
  panel.arrows(x0 = tips[,1], y0 = y, 
               x1 = tips[,2], y1 = y, 
               length = 0.05, unit = "native",
               angle = 90, code = 3)
}

library(Hmisc)
Dotplot(data$ID ~ Cbind(data$avgm,data$lowerm,data$upperm), col="blue", pch=20, panel = mypanel.Dotplot,
        xlab="measure",ylab="study")

これは、データの 3 つの列、男性の平均 (avgm)、および 95% 信頼区間の下限と上限 (lowerm と upperm) をプロットします。同じ研究のために、女性の被験者(avgf、lowerf、upperf)に対して同じ仕事をする他の3つのシリーズがあります。

私が得た結果は次のようになります。

ここに画像の説明を入力

何が欠けているか、一言で言えば:

  1. 同じ研究の他の 3 つの変数で定義された平均と信頼区間を使用して 2 番目のシリーズ (avgf) を追加する

  2. 垂直方向のジッターを追加して、一方が他方の上にならないようにしますが、読者はそれらが重なっても両方を見ることができます。

4

1 に答える 1

10

残念ながら についてはお手伝いできませんがDotplot、 を使用するとかなり簡単ggplotです。データを少し並べ替えるだけです。

library(ggplot2)
# grab data for males
df_m <- data[ , c(1, 2, 4, 5)]
df_m$sex <- "m"
names(df_m) <- c("ID", "avg", "lower", "upper", "sex")
df_m

# grab data for females
df_f <- data[ , c(1, 3, 6, 7)]
df_f$sex <- "f"
names(df_f) <- c("ID", "avg", "lower", "upper", "sex")
df_m

# bind the data together
df <- rbind(df_m, df_f)

# plot
ggplot(data = df, aes(x = ID, y = avg, ymin = lower, ymax = upper, colour = sex)) +
  geom_point(position = position_dodge(width = 0.2)) +
  geom_errorbar(position = position_dodge(width = 0.2), width = 0.1) +
  coord_flip() +
  scale_colour_manual(values = c("blue", "red")) +
  theme_classic()

ここに画像の説明を入力

  # if you want horizontal grid lines you may change the last line with:
  theme_bw() +
  theme(panel.grid.major.y = element_line(colour = "grey", linetype = "dashed"),
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank()) 
于 2013-11-25T18:07:31.900 に答える