美文网首页
生存分析(2)——基线图

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

作者: monkey_study | 来源:发表于2022-04-30 10:56 被阅读0次

    因变量

    因变量(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

    相关文章

      网友评论

          本文标题:生存分析(2)——基线图

          本文链接:https://www.haomeiwen.com/subject/trtyyrtx.html