2016-04-23 112 views
0

排号变量我一直在使用“Pimping your forest plotR:在森林图

我想比较男性VS变量组间差异的女性做了一个森林图码。

更具体地讲,如果

变量1:年龄/亚组:30-39years,40-49years,50-59years

变量2:教育/亚组:<9年,9-12岁

我想比较喜欢这个变量之间的性别差异,(我想在这样的方式的森林图变量数组)

**变量1

亚组(男性)

30-39岁

40-49岁

50-59岁

亚组(女性)

30-39岁

40-49年

50-59年

变量2

亚组(男性)

<9年

9-12岁

亚组(女性)

<9年

9-12年

**

我应该如何编码来制作这种森林图?

现在,我已经在这个变量顺序做了一个森林图,

变量1 30-39岁(男性)

变量1 30-39岁(女)

变量1 40-49岁(男)

变量1 40-49岁(女)

变量1 50-59岁(男性)

变量1 50-59岁(女)

变量2 < 9年(雄)

变量2 < 9年(雌性)

变量2 9〜12岁(男)

变量2 9 -12岁(女)

我现在的代码是这样的,

Male<-structure(c(0.22,0.54,2.09,2.65,1.04,1.16,1.15,0.78,1.06,0.99,1.06,0.97,1.00,1.80,0.81), .Dim=c(5L,3L),.Dimnames=list(c("age,30-39years","age,40-49years","age,50-59years" "education,<9 years","education, 9-12 years"),c("OR","L","U"))) 

Female<-structure(c(0.89,1.47,1.08,1.32,1.41,1.38,1.00,27.01,5.15,0.88,0.28,0.96,0.49,0.36,1.61),.Dim=c(17L,3L),.Dimnames=list(c("age, 30-39years","age,40-49years","age,50-59years","education,<9 years","education, 9-12 years"),c("OR","L","U"))) 

library(Gmisc) 

forestplot2(mean=cbind(log(Male[,"OR"]),log(Female[,"OR"])), lower=cbind(log(Male[,"L"]),log(Female[,"L"])),upper=cbind(log(Male[,"U"]),log(Female[,"U"])),labeltext=rownames(Male),legend=c("Male", "Female"),clip=c(-2.5,5.0), boxsize=0.1,col=fpColors(box=c("blue", "darkred")),fn.ci_norm=c("fpDrawNormalCI", "fpDrawCircleCI"),xlab="Hypertension prevalence among sex difference",new_page=TRUE) 

请帮我〜谢谢

+0

请在每行代码前加上4个空格。 – surajsn

+0

感谢:)!!!!!!!!! – CHAa

回答

1

请确保您的示例数据是干净的,并在发布之前工作。下面是我想解决您的问题的解决方案:

Male<-structure(c(0.22,0.54,2.09,2.65,1.04,1.16,1.15,0.78,1.06,0.99,1.06,0.97,1.00,1.80,0.81), 
       .Dim=c(5L,3L), 
       .Dimnames=list(c("age,30-39years","age,40-49years","age,50-59years","education,<9 years","education, 9-12 years"), 
           c("OR","L","U"))) 

Female<-structure(c(0.89,1.47,1.08,1.32,1.41,1.38,1.00,27.01,5.15,0.88,0.28,0.96,0.49,0.36,1.61), 
        .Dim=c(5L,3L), 
        .Dimnames=list(c("age, 30-39years","age,40-49years","age,50-59years","education,<9 years","education, 9-12 years"),c 
           ("OR","L","U"))) 

# Messy input data - something wrong 
for (i in 1:nrow(Male)) { 
    tmp <- Male[i,] 
    low <- which.min(tmp)[1] 
    high <- which.max(tmp)[1] 
    Male[i,] <- c(Male[i,c(-low, -high)], 
       Male[i,low], 
       Male[i,high]) 

    tmp <- Female[i,] 
    low <- which.min(tmp)[1] 
    high <- which.max(tmp)[1] 
    Female[i,] <- c(Female[i,c(-low, -high)], 
       Female[i,low], 
       Female[i,high]) 
} 

library(forestplot) 
library(abind) 
Male <- Gmisc::insertRowAndKeepAttr(Male, 
            grep("education", rownames(Male))[1], 
            rName = "Education") 
Female <- Gmisc::insertRowAndKeepAttr(Female, 
             grep("education", rownames(Female))[1], 
             rName = "Education") 
Male <- Gmisc::insertRowAndKeepAttr(Male, 1, rName = "Age") 
Female <- Gmisc::insertRowAndKeepAttr(Female, 1, rName = "Age") 


out = abind(Male, Female, along = 3) 
rownames(out) <- gsub("(age|education),[ ]*", " ", rownames(out)) 
forestplot(out, 
      xlog = TRUE, 
      legend=c("Male", "Female"), 
      clip=exp(c(-2.5,5.0)), 
      col=fpColors(box=c("blue", "darkred")), 
      fn.ci_norm=c("fpDrawNormalCI", "fpDrawCircleCI"), 
      xlab="Hypertension prevalence among sex difference", 
      new_page=TRUE) 

给出了这样的: enter image description here

注意,为了简单起见,我给它一个3维数组。不幸的是,软件包中有一个错误,你需要下载软件包的开发版本(> 1.5)。

+0

我已经发布了关于三次样条的另一个问题,你能帮助我吗?谢谢。 – CHAa

+0

@gkduchl - 如果您对答案满意,请将其标记为答案。我会看看我是否有时间解释rcs的工作原理 - 如果你有一个我可以重现的例子,它会更容易 –