系列文章目录
一、连续变量根据是否正态选择性输出mean(±sd)和median(min,max)形式
前言
这一部分添加P值,其实如果更改函数有多种方法,这里为求简单引用其他文章的使用方法。这里只简单地添加t检验,方差分析、秩和检验和卡方检验的p值。同样,先看一下效果
代码较长,一般情况下不用自己修改前面的函数,只需修改自己的数据即可。
处理前: (未经任何修改)
处理后:
一、适用情况
根据数据类型,样本是否正态和方差齐性以及样本量的多少确定检验方法。(统计检验方法有问题的话,请批评指正)1.数值变量
1)正态且方差齐,两个样本t检验,多个样本方差分析。
2)非正态或方差不齐,秩和检验
2.分类变量: 卡方检验
暂时没有考虑结局变量是等级资料的情况。
二、添加列
1.举个例子
下面举个例子,x为函数传进来的数据x是一个列表,每一个分类(表的顶部分类变量),对应x列表一个元素,而每个元素下面就是a数据中所有的生存状态数据(以生存状态为例)。换句话说,x是个列表,x[[1]]
是所有男性的生存状态数据,x[[2]]
是所有女性生存状态数据。
先生成一般的三线表吧。这一部分是接着上一篇教程讲的,有疑惑的翻阅上一篇,或者留言即可。
rm(list = ls())
options(stringsAsFactors = F)
if (!require(table1)) {
install.packages("table1")
}
library(survival)
library(car)
library(table1)
#改写赋给table1中render参数的函数
rd <- function(x, name, ...){
y <- a[[name]]
m = any(is.na(y))
if (is.numeric(y)) {
normt=(shapiro.test(y)$p.value>0.1)+2
my.render.cont(x,n=normt,m=m,...)
}else{
render.default(x=x, name=name, ...)
}
}
#改写赋给table1中render.continuous参数的函数
my.render.cont <- function (x,n,m, ...) {
a=with(stats.apply.rounding(stats.default(x, ...), ...), c("",
`Mean (±SD)` = sprintf("%s (±%s)", MEAN, SD),
`Median (Min, Max)` = sprintf("%s (%s, %s)", MEDIAN, MIN, MAX)
))[-n]
if (m) {
a <- c(a,with(stats.apply.rounding(stats.default(is.na(x), ...), ...)$Yes,
c(`Missing` = sprintf("%s (%s%%)", FREQ, PCT))))
}
a
}
a <- lung
#新增两个数据
a$norm <- rnorm(nrow(a),10,1)
a$exp <- rexp(nrow(a))
#分类变量请设置因子、以年龄、性别、体重减低、状态为例子
a$sex <- factor(a$sex,levels = c(1,2),labels = c('男','女'))
a$status <- factor(a$status,levels = c(1,2),labels = c("存活","死亡"))
#设置单位
units(a$age) <- 'year'
units(a$wt.loss) <- 'Kg'
#设置标签
label(a$norm) <- "正态分布数据"
label(a$exp) <- "指数分布数据"
label(a$status) <- "生存状态"
label(</