生存分析(2)——基线图

因变量

因变量(dependent variable)是函数中的专业名词,也叫函数值。函数关系式中,某些特定的数会随另一个(或另几个)会变动的数的变动而变动,就称为因变量。如:Y=f(X)。此式表示为:Y随X的变化而变化,即为结果。

自变量

自变量是会引起其他变量发生变化的变量,是被操纵的。自变量是会引起其他变量发生变化的变量,是被操纵的。

自变量类型

  • 分类变量

    分类变量包含有限的分类数或可区分组数。分类数据可能不是逻辑顺序,其包括二分类和多分类,例如,分类变量包括性别、肿瘤分期、生死等。

  • 离散变量

    离散变量是在任意两个值之间具有可计数的值的数值变量。离散变量始终为数值变量。

  • 连续变量

    连续变量是在任意两个值之间具有无限个值的数值变量。连续变量可以是数值变量,也可以是日期/时间变量。例如,年龄,或者随访的日期和时间。

    如果您有离散变量而且想要将其包括在回归或方差分析模型中,可以决定是将其视为连续预测变量(协变量),还是分类变量(因子)。如果离散变量具有许多水平,那么最好将其视为连续变量。将预测变量视为连续变量意味着简单线性或多项式函数足以描述响应和预测变量之间的关系。当您将预测变量视为分类变量时,离散响应值将与变量的每个水平拟合,而不必考虑预测变量水平的顺序。使用此信息,除了可以进行分析以外,还可以确定哪个变量最适合。
    ...

基线图 包 tableone

首先判断数据类型,分类变量,数值标量(离散变量、连续变量)

自变量类型

离散变量是在任意两个值之间具有可计数的值的数值变量。离散变量始终为数值变量。

分类变量包含有限的分类数或可区分组数。分类数据可能不是逻辑顺序,其包括二分类和多分类,例如,分类变量包括性别、肿瘤分期、生死等。

连续变量是在任意两个值之间具有无限个值的数值变量。连续变量可以是数值变量,也可以是日期/时间变量。例如,年龄,或者随访的日期和时间。

如果您有离散变量而且想要将其包括在回归或方差分析模型中,可以决定是将其视为连续预测变量(协变量),还是分类变量(因子)。如果离散变量具有许多水平,那么最好将其视为连续变量。将预测变量视为连续变量意味着简单线性或多项式函数足以描述响应和预测变量之间的关系。当您将预测变量视为分类变量时,离散响应值将与变量的每个水平拟合,而不必考虑预测变量水平的顺序

install.packages("tableone")
library("survminer") 
library("tableone") 
lung<- lung
head(lung)
inst time status age sex ph.ecog ph.karno pat.karno meal.cal wt.loss
1    3  306      2  74   1       1       90       100     1175      NA
2    3  455      2  68   1       0       90        90     1225      15
3    3 1010      1  56   1       0       90        90       NA      15
4    5  210      2  57   1       1       90        60     1150      11
5    1  883      2  60   1       0      100        90       NA       0
6   12 1022      1  74   1       1       50        80      513       0
str(lung)
'data.frame':  228 obs. of  10 variables:
  $ inst     : num  3 3 3 5 1 12 7 11 1 7 ...
$ time     : num  306 455 1010 210 883 ...
$ status   : num  2 2 1 2 2 1 2 2 2 2 ...
$ age      : num  74 68 56 57 60 74 68 71 53 61 ...
$ sex      : num  1 1 1 1 1 1 2 2 1 1 ...
$ ph.ecog  : num  1 0 0 1 0 1 2 2 1 2 ...
$ ph.karno : num  90 90 90 90 100 50 70 60 70 70 ...
$ pat.karno: num  100 90 90 60 90 80 60 80 80 70 ...
$ meal.cal : num  1175 1225 NA 1150 NA ...
$ wt.loss  : num  NA 15 15 11 0 0 10 1 16 34 ...
lung
table(lung$inst)
1  2  3  4  5  6  7 10 11 12 13 15 16 21 22 26 32 33 
36  5 19  4  9 14  8  4 18 23 20  6 16 13 17  6  7  2 
table(lung$time) ##连续型变量
table(lung$status)
1   2 
63 165 
table(lung$age) ##连续型变量
table(lung$sex)  #分类变量
1   2 
138  90
table(lung$ph.ecog)  #分类变量
0   1   2   3 
63 113  50   1 
table(lung$ph.karno)  #离散变量
50  60  70  80  90 100 
6  19  32  67  74  29 
table(lung$pat.karno)
30  40  50  60  70  80  90 100 
2   2   4  30  41  51  60  35 
table(lung$meal.cal) #连续变量
96  131  169  238  271  280  288  305  313  338  346  363  384  388  413  438  463  475  488  513  538  575  588  613  625  635  675  710  713 
1    1    1    1    1    1    1    1    1    2    1    1    1    1    6    1    2    1    4    4    4    1    5    1    1    1    2    1    1 
725  730  731  750  768  775  825  860  875  910  925  975  993 1025 1030 1039 1060 1075 1100 1125 1150 1175 1225 1275 1300 1425 1500 2200 2350 
2    1    1    1    3    1    9    1    5    3    5    9    1   24    1    1    1   12    1    1    3   13   14    1    6    2    4    1    1 
table(lung$wt.loss)  #连续变量
-24 -16 -15 -13 -11 -10  -8  -7  -5  -3  -2  -1   0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  22  23  24  25 
1   1   1   1   1   1   1   1   4   4   6   5  34   6   9   7   8  10   5   6   8   1  13   5   2   5   4  10   3   3   2   1   9   1   5   2   1 
27  28  29  30  31  32  33  34  36  37  38  39  49  52  60  68 
4   2   1   4   1   2   2   1   1   3   1   1   1   1   1   1 
通过上述的数据的展示,因变量就是 status , 我们可以对其他9列数据进行自变量的分类,如下:

分类变量:sex (二分类变量),ph.ecog(多分类变量)

离散变量:ph.karno, pat.karno

连续变量:inst, time, age, meal.cal, wt.loss

在这里离散型变量 ph.karno, pat.karno 有许多水平,那么最好将其视为连续变量,此时我们修改分类变量的属性,如下:
#数据清洗处理
lung$status=factor(lung$status,levels = c(1,2),labels = c("Dead","Alive"))
lung$sex=factor(lung$sex,levels = c(1,2),labels = c("Male","Female"))
lung$ph.ecog=factor(lung$ph.ecog,levels = c(0,1,2,3),labels = c(0,1,2,3))
str(lung)  #查看数据结构
'data.frame':  228 obs. of  10 variables:
  $ inst     : num  3 3 3 5 1 12 7 11 1 7 ...
$ time     : num  306 455 1010 210 883 ...
$ status   : Factor w/ 2 levels "Dead","Alive": 2 2 1 2 2 1 2 2 2 2 ...
$ age      : num  74 68 56 57 60 74 68 71 53 61 ...
$ sex      : Factor w/ 2 levels "Male","Female": 1 1 1 1 1 1 2 2 1 1 ...
$ ph.ecog  : Factor w/ 4 levels "0","1","2","3": 2 1 1 2 1 2 3 3 2 3 ...
$ ph.karno : num  90 90 90 90 100 50 70 60 70 70 ...
$ pat.karno: num  100 90 90 60 90 80 60 80 80 70 ...
$ meal.cal : num  1175 1225 NA 1150 NA ...
$ wt.loss  : num  NA 15 15 11 0 0 10 1 16 34 ...
##连续自变量
continue<-c("ph.karno", "pat.karno", "inst", "time", "age",  "meal.cal", "wt.loss")
##分类自变量
category<-c("sex","ph.ecog")
library(tableone)
#创建一个对象,汇总所有基线变量(包括连续的和分类的),可选地通过一个或多个确定变量进行分层,并执行统计测试。 该对象给出了一个表格,便于在医学研究论文中使用。  
CreateTableOne(
  vars, #字符串向量,因子被处理为类别变量,字符型变量处理为连续变量。(自变量)
  strata, #将变量名作为字符向量进行分层(分组)。 如果省略,则返回总体结果。 (因变量)
  data,  #变量所在的数据框,所有的数据(vars,strata)都必须在data frame。
  factorVars, #这里指定的变量也必须在vars参数中指定。  
  includeNA = FALSE, #如果TURE,NA被处理为常规因子level而不是missing,NA被展示为最后一个因子level。只对类别变量有效。
  test = TRUE, #如果与默认值一样为TRUE,并且有两个以上的组,则执行按组进行比较。  
  testApprox = chisq.test, #用于执行基于大样本近似的测试的函数。 默认为chisq.test。 当一些细胞的计数很小,比如小于5时,不建议这样做。 卡方检验又称X2检验,就是检验两个变量之间有没有关系。
  
  # 属于非参数检验,主要是比较两个及两个以上样本率(构成比)以及两个分类变量的关联性分析。
  argsApprox = list(correct = TRUE), #传递给在testApprox中指定的函数的命名参数列表。 默认是list(correct = TRUE),它打开了chisq.test的连续性校正。  
  testExact = fisher.test, #用于执行精确测试的函数。 默认是fish .test。 如果单元数量很大,则会由于内存限制而失败。 在这种情况下,基于大样本近似就足够了。 
  argsExact = list(workspace = 2 * 10^5), #testExact得参数设定,内存空间
  testNormal = oneway.test, #基于正太假设的检验。当仅有两组样本时,等同于t.test。
  argsNormal = list(var.equal = TRUE), #默认是list(var。 equal = TRUE),这使其成为假设组间方差相等的普通方差分析。  
  testNonNormal = kruskal.test, #非正态检验方法
  argsNonNormal = list(NULL), #非正态检验的参数,仅仅是个占位符罢了
  smd = TRUE, #如果与默认值一样为TRUE,并且有两组以上,则计算所有两两比较的标准平均值差异。  
  addOverall = FALSE  #(optional, only used if strata are supplied) Adds an overall column to the table. Smd and p-value calculations are performed using only the stratifed clolumns.
)
##输出对象TableOne为一个list,包含三部分,ContTable(连续),CatTable(分类),MetaData
CreateTableOne(data = lung) #查看数据情况,均值标准差等,因子变量按照分类变量处理(%,检验使用卡方检验。)
#t检验,卡方检验
table1<- CreateTableOne(
  vars = c(continue,category), #指定纳入变量,自变量
  strata = "status", #因变量
  data=lung,
  includeNA = FALSE,
  test = TRUE,
  testApprox = chisq.test,
  argsApprox = list(correct = TRUE),
  testExact = fisher.test,
  argsExact = list(workspace = 2 * 10^5),
  testNormal = oneway.test,
  argsNormal = list(var.equal = TRUE),
  testNonNormal = kruskal.test,
  argsNonNormal = list(NULL),
  smd = TRUE,
  addOverall = FALSE
)
results1<-print(table1,showAllLevels = FALSE)
#秩和检验,卡方检验只需要设置nonnormal=x1
table2<-CreateTableOne(vars = c(x1,x2),
                       data=lung,
                       factorVars = x2,
                       strata = "status",
                       addOverall = FALSE
)
results2<-print(table2,showAllLevels = FALSE,nonnormal=x1)  #非参数,秩和检验
results2<-print(table2,showAllLevels = FALSE,exact=x2,quote = TRUE, noSpaces = TRUE) #Fisher-test #精确fisher检验 #
#quote = TRUE, noSpaces = TRUE 实现载word中居中对齐
#输出
write.csv(results1,"results1.csv")
image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,039评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,223评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,916评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,009评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,030评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,011评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,934评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,754评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,202评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,433评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,590评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,321评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,917评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,568评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,738评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,583评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,482评论 2 352

推荐阅读更多精彩内容