R語言與醫學統計圖形-【34】繪制統計表格


表的繪制,主要是臨床三線表。

1.tableone包

#install.packages('tableone')
library(tableone)

set.seed(2017)
age <- sample(30:90,200,replace = T)
gender <- sample(c('Male','Female'),200,replace = T)
cholesterol <- rnorm(200,140,30)
BMI <- rnorm(200,27,8)
Smoking <- sample(c('Yes','No'),200,replace = T)
SBP <- rnorm(200,130,20)
education <- sample(c('High','Middle','Low'),200,replace = T)
income <- sample(c('High','Middle','Low'),200,replace = T)
dt <- data.frame(age=age,gender=gender,
                 cho=round(cholesterol,2),
                 bmi=round(BMI,2),
                 smoking=Smoking,
                 sbp=round(SBP,2),
                 edu=education,
                 income=income)

#將變量名傳入變量列表中
vars <- names(dt)
#定義分類變量,用於表格中數據分層
catvars <- c('gender','smoking','edu','income')
table1 <- CreateTableOne(vars = vars, #定義變量列表
                        data = dt, #數據
                        factorVars = catvars) #指定分類變量
table1


#分層,增加t檢驗(連續變量)和卡方檢驗(分類變量)結果
vars2 <- c('age','cho','sbp','bmi','smoking','edu','income')
table2 <- CreateTableOne(vars2,dt,catvars,strata = c('gender'))
table2

table1結果:
image.png

table2結果:
image.png

快速導出tableone產出的表格。

if(! require("rJava")) install.packages("rJava")
if(require('rJava')){
 # https://cran.r-project.org/src/contrib/Archive/ReporteRs/
  if(! require("ReporteRs")) install.packages("ReporteRs")
  devtools::install_github('davidgohel/ReporteRsjars')
  devtools::install_github('davidgohel/ReporteRs')
}

ReporteRs包安裝失敗。

2.table1包

if(!require(table1)) install.packages("table1",ask=F,update=F)
require(table1)

library(boot) #使用自帶數據
melanoma2 <- melanoma
head(melanoma)
dim(melanoma)

#將感興趣的因子作為分類
melanoma2$status <- factor(melanoma2$status,
                           levels = c(2,1,3),
                           labels = c('Alive',
                                      'Melanoma death',
                                      'Non-melanoma death'))

#格式: ~感興趣的基線變量|感興趣的分類變量,data
table1(~ factor(sex)+age+factor(ulcer)+thickness|status,
       data = melanoma2)

image.png
修飾表格。

## 給分類變量sex指定標簽
melanoma2$sex <- 
  factor(melanoma2$sex, levels=c(1,0),
         labels=c("Male", 
                  "Female"))
## 給分類變量ulcer指定標簽
melanoma2$ulcer <- 
  factor(melanoma2$ulcer, levels=c(0,1),
         labels=c("Absent", 
                  "Present"))
## 給變量名指定標簽
label(melanoma2$sex)       <- "Sex"
label(melanoma2$age)       <- "Age"
label(melanoma2$ulcer)     <- "Ulceration"
label(melanoma2$thickness) <- "Thickness"

## 給連續型變量指定單位
units(melanoma2$age)       <- "years"
units(melanoma2$thickness) <- "mm"

## 再增加overall統計量
table1(~ sex + age + ulcer + thickness | status, data=melanoma2, overall="Total")

image.png
進一步細節修飾。

labels <- list(
    variables=list(sex="Sex",
                   age="Age (years)",
                   ulcer="Ulceration",
                   thickness="Thickness (mm)"),
    groups=list("", "", "Death"))##表格上的第一級Death

# 重新給status命名標簽,death放到上面去
levels(melanoma2$status) <- c("Alive", "Melanoma", "Non-melanoma")
#按想要的順序順序設置分組或列,
#Total放第一列,split分開status
strata <- c(list(Total=melanoma2), split(melanoma2, melanoma2$status))

# 添加渲染風格-連續型變量與分類變量展示不同
# 連續型渲染風格函數
my.render.cont <- function(x) {
    with(stats.apply.rounding(stats.default(x), digits=2), c("",
        "Mean (SD)"=sprintf("%s (&plusmn; %s)", MEAN, SD)))
}
# 分類變量渲染風格
my.render.cat <- function(x) {
    c("", sapply(stats.default(x), function(y) with(y,
        sprintf("%d (%0.0f %%)", FREQ, PCT))))
}

## 結果
## groupsapn為分組的個數,1為Total, 1為Alive,以及2為Death
## 增加了Death的亞組
table1(strata, labels, groupspan=c(1, 1, 2),
       render.continuous=my.render.cont, render.categorical=my.render.cat)

image.png

這個包更多使用參考:臨床三線表


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM