在医学文章中,“表 1”总结了研究人群的人口统计数据,通常在亚组之间细分
生成数据集
n <- 100
df <- data.frame(
年龄 = 样本(c(20:90),n,代表 = T),
性别 = 样本(c(“m”,“f”),20,代表 = T,概率 = c(0.55,0.45)),
吸烟者 = 样本(c(“从不”,“前”,“活跃”),n,代表 = T,概率 = c(0.4,0.45,0.15)),
大小 = abs(rnorm(n, 20, 8)),
logitest = 样本(c(TRUE, FALSE), n, rep = T, prob = c(0.1, 0.9)),
labtest = as.factor(sample(c("neg", "lo", quot;med",quot;hi"), n, rep = T, prob = c(0.4, 0.3, 0.2, 0.1))),
结果 = 样本(c(0, 1), n, rep = T, prob = c(0.8, 0.2))
)
# 让我们介绍一些缺失的数据
for (i in (1:floor(n/6))) {
df[样本(c(1:n), 1), 样本(c(1:ncol(df)), 1)] <- NA
}
头(df)
## age sex smoker size logitest labtest outcome
## 1 70 m former 39.17 NA med NA
## 2 51 f former 33.64 FALSE hi 1
## 3 58 f former 10.10 FALSE neg 1
## 4 30 m former 43.24 FALSE med 0
## 5 54 m former 22.78 FALSE lo 0
## 6 86 f former 8.20 FALSE neg 0
如果使用真实的数据集,请改用它
# df <- read.csv()
#你可能需要删除一些列
#colnames(df)
#df0<-df #备份
#df <- df[,-c(1,...,27:38)]
根据需要进行更改:必须从变量列表中删除带有诊断的列!
dx <- 7 #结果/诊断指数
####################################
摘要(df [,-dx])
## age sex smoker size logitest
## Min. :20.0 f :44 active:19 Min. : 0.91 Mode :logical
## 1st Qu.:42.5 m :54 former:49 1st Qu.:15.00 FALSE:85
## Median :58.0 NA's: 2 never :30 Median :20.12 TRUE :12
## Mean :57.3 NA's : 2 Mean :20.44 NA's :3
## 3rd Qu.:74.0 3rd Qu.:27.10
## Max. :88.0 Max. :43.24
## NA's :1 NA's :2
## labtest
## hi : 4
## lo :29
## med :20
## neg :45
## NA's: 2
##
##
附上(df)
构建变量列表
vars <- colnames(df)
变量
## [1] "age" "sex" "smoker" "size" "logitest" "labtest"
## [7] "outcome"
catvars <- NULL #分类变量
contvars <- NULL #连续变量
logivars <- NULL #逻辑变量
变量<-变量[-dx]
变量
## [1] "age" "sex" "smoker" "size" "logitest" "labtest"
for (i in 1:length(vars)) {
ifelse(is.factor(df[, i]), catvars <- c(catvars, vars[i]), ifelse(is.logical(df[,
i]), logivars <- c(logivars, vars[i]), contvars <- c(contvars, vars[i])))
}
变量
## [1] "age" "size"
卡特瓦尔
## [1] "sex" "smoker" "labtest"
逻辑变量
## [1] "logitest"
创建子组
bg <- df[df[, dx] == 0 & !is.na(df[, dx]), ]
nrow(bg) #; bg
## [1] 73
毫克 <- df[df[, dx] == 1 & !is.na(df[, dx]), ]
nrow(mg) #; 毫克
## [1] 23
indet <- df[is.na(df[, dx]), ]
nrow(indet)
## [1] 4
索引
## age sex smoker size logitest labtest outcome
## 1 70 m former 39.173 NA med NA
## 9 87 m former 23.621 FALSE lo NA
## 18 65 m former 2.466 FALSE <NA> NA
## 67 88 f former 17.575 FALSE med NA
对于连续变量
正态性检验
常态 <- NULL
for (i in 1:length(contvars)) {
j <- which(vars == contvars[i]) #查找变量在原始数据帧及其子集中的位置
st <- shapiro.test(df[, j]) #normality testing on all patients, bg and mg aslike
normality <- c(normality, st$p.value) #normality testing on all patients, bg and mg aslike
}
常态
## [1] 0.00125 0.73602
比较两个样本的平均值;如果正常,使用 t 检验,否则使用 wilcoxon
ttpvalue <- NULL
for (i in 1:length(contvars)) {
j <- which(vars == contvars[i]) #查找变量在原始数据帧及其子集中的位置
## 如果正常,使用 t-test,否则 wilcoxon 如果 shapiro p<.05 然后 pop
## 可能不是通常的 dist
ifelse(normality[i] < 0.05, tt <- wilcox.test(bg[, j], mg[, j]), tt <- t.test(bg[,
j], mg[, j]))
ttpvalue <- c(ttpvalue, tt$p.value) ##if t-test p<.05 then pop 可能有不同的方法
}
ttp值
## [1] 0.6358 0.3673
contvarlist <- list(variables = contvars, normality = normality, ttest.by.subgroup = ttpvalue)
对于分类变量
chisqpvalue <- NULL
for (i in 1:length(catvars)) {
j <- which(vars == catvars[i]) #查找变量在原始数据帧及其子集中的位置
tbl <- table(df[, j], df[, dx])
chisqtest <-摘要(tbl)
chisqpvalue <- c(chisqpvalue, chisqtest$p.value)
}
chisqp值
## [1] 0.01579 0.77116 0.39484
catvarlist <- 列表(变量 = catvars,chisq.by.subgroup = chisqpvalue)
对于逻辑变量
属性值 <- NULL
for (i in 1:length(logivars)) {
j <- which(vars == logivars[i]) #查找变量在原始数据帧及其子集中的位置
tbl <- table(df[, j], df[, dx])
chisqtest <-摘要(tbl)
proppvalue <- c(proppvalue, chisqtest$p.value)
}
道具价值
## [1] 0.5551
logivarlist = 列表(变量 = logivars,chisq.by.subgroup = proppvalue)
而现在,结果!
str(contvarlist) #if shapiro p<.05 then pop 可能不是通常 dist; 如果 t 检验 p<.05,则 pop 可能具有不同的均值
## List of 3
## $ variables : chr [1:2] "age" "size"
## $ normality : num [1:2] 0.00125 0.73602
## $ ttest.by.subgroup: num [1:2] 0.636 0.367
str(catvarlist) #if chisq p<.05 那么变量可能不是独立的
## List of 2
## $ variables : chr [1:3] "sex" "smoker" "labtest"
## $ chisq.by.subgroup: num [1:3] 0.0158 0.7712 0.3948
str(logivarlist) #if chisq p<.05 那么变量可能不是独立的
## List of 2
## $ variables : chr "logitest"
## $ chisq.by.subgroup: num 0.555