美文网首页数据科学与R语言R语言与统计分析中国R语言社区
R语言处理非治疗因素在两组变量不均衡的方法(结果为二分类变量)

R语言处理非治疗因素在两组变量不均衡的方法(结果为二分类变量)

作者: 灵活胖子的进步之路 | 来源:发表于2020-10-25 16:13 被阅读0次
    library(survival)
    ## Warning: package 'survival' was built under R version 3.6.3
    library(compareGroups)
    ## Warning: package 'compareGroups' was built under R version 3.6.3
    data(colon)#加载R内置数据集colon
    str(colon)#显示coloon数据集结构
    ## 'data.frame':    1858 obs. of  16 variables:
    ##  $ id      : num  1 1 2 2 3 3 4 4 5 5 ...
    ##  $ study   : num  1 1 1 1 1 1 1 1 1 1 ...
    ##  $ rx      : Factor w/ 3 levels "Obs","Lev","Lev+5FU": 3 3 3 3 1 1 3 3 1 1 ...
    ##  $ sex     : num  1 1 1 1 0 0 0 0 1 1 ...
    ##  $ age     : num  43 43 63 63 71 71 66 66 69 69 ...
    ##  $ obstruct: num  0 0 0 0 0 0 1 1 0 0 ...
    ##  $ perfor  : num  0 0 0 0 0 0 0 0 0 0 ...
    ##  $ adhere  : num  0 0 0 0 1 1 0 0 0 0 ...
    ##  $ nodes   : num  5 5 1 1 7 7 6 6 22 22 ...
    ##  $ status  : num  1 1 0 0 1 1 1 1 1 1 ...
    ##  $ differ  : num  2 2 2 2 2 2 2 2 2 2 ...
    ##  $ extent  : num  3 3 3 3 2 2 3 3 3 3 ...
    ##  $ surg    : num  0 0 0 0 0 0 1 1 1 1 ...
    ##  $ node4   : num  1 1 0 0 1 1 1 1 1 1 ...
    ##  $ time    : num  1521 968 3087 3087 963 ...
    ##  $ etype   : num  2 1 2 1 2 1 2 1 2 1 ...
    newdata<-na.omit(colon)#删除缺失值
    
    str(newdata)
    ## 'data.frame':    1776 obs. of  16 variables:
    ##  $ id      : num  1 1 2 2 3 3 4 4 5 5 ...
    ##  $ study   : num  1 1 1 1 1 1 1 1 1 1 ...
    ##  $ rx      : Factor w/ 3 levels "Obs","Lev","Lev+5FU": 3 3 3 3 1 1 3 3 1 1 ...
    ##  $ sex     : num  1 1 1 1 0 0 0 0 1 1 ...
    ##  $ age     : num  43 43 63 63 71 71 66 66 69 69 ...
    ##  $ obstruct: num  0 0 0 0 0 0 1 1 0 0 ...
    ##  $ perfor  : num  0 0 0 0 0 0 0 0 0 0 ...
    ##  $ adhere  : num  0 0 0 0 1 1 0 0 0 0 ...
    ##  $ nodes   : num  5 5 1 1 7 7 6 6 22 22 ...
    ##  $ status  : num  1 1 0 0 1 1 1 1 1 1 ...
    ##  $ differ  : num  2 2 2 2 2 2 2 2 2 2 ...
    ##  $ extent  : num  3 3 3 3 2 2 3 3 3 3 ...
    ##  $ surg    : num  0 0 0 0 0 0 1 1 1 1 ...
    ##  $ node4   : num  1 1 0 0 1 1 1 1 1 1 ...
    ##  $ time    : num  1521 968 3087 3087 963 ...
    ##  $ etype   : num  2 1 2 1 2 1 2 1 2 1 ...
    ##  - attr(*, "na.action")= 'omit' Named int  127 128 165 166 179 180 187 188 197 198 ...
    ##   ..- attr(*, "names")= chr  "127" "128" "165" "166" ...
    descrTable(rx~ ., data = newdata)#对比不同术后化疗方案患者的基线信息情况
    ## Warning in cor(x, y): 标准差为零
    ## 
    ## --------Summary descriptives table by 'rx'---------
    ## 
    ## ______________________________________________________ 
    ##              Obs         Lev       Lev+5FU   p.overall 
    ##             N=610       N=588       N=578              
    ## ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ 
    ## id        459 (269)   480 (271)   461 (268)    0.354   
    ## study    1.00 (0.00) 1.00 (0.00) 1.00 (0.00)   0.355   
    ## sex      0.53 (0.50) 0.56 (0.50) 0.47 (0.50)   0.007   
    ## age      59.5 (12.0) 60.1 (11.7) 59.9 (12.0)   0.653   
    ## obstruct 0.20 (0.40) 0.20 (0.40) 0.18 (0.38)   0.473   
    ## perfor   0.03 (0.17) 0.03 (0.18) 0.03 (0.16)   0.810   
    ## adhere   0.15 (0.35) 0.15 (0.36) 0.13 (0.34)   0.553   
    ## nodes    3.83 (3.75) 3.71 (3.60) 3.44 (3.23)   0.143   
    ## status   0.55 (0.50) 0.53 (0.50) 0.40 (0.49)  <0.001   
    ## differ   2.08 (0.50) 2.02 (0.52) 2.09 (0.51)   0.033   
    ## extent   2.89 (0.50) 2.89 (0.43) 2.87 (0.50)   0.508   
    ## surg     0.30 (0.46) 0.26 (0.44) 0.25 (0.43)   0.166   
    ## node4    0.28 (0.45) 0.28 (0.45) 0.24 (0.43)   0.331   
    ## time     1439 (931)  1479 (965)  1716 (922)   <0.001   
    ## etype    1.50 (0.50) 1.50 (0.50) 1.50 (0.50)     .     
    ## ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ
    newdata$treat<-ifelse(newdata$rx=="Obs","obs","chemo")#根据化疗方案分为观察组及化疗组
    newdata$status<-factor(newdata$status,labels=c("alive","dead"))#生存状态因子化变为二分变量并赋值
    newdata$treat<-as.factor(newdata$treat)#治疗方式因子化
    descrTable(treat~ .-rx,show.ratio =TRUE,data = newdata)#不同治疗方式患者的基线信息差异
    ## Warning in compareGroups.fit(X = X, y = y, include.label = include.label, :
    ## Variables 'study' have been removed since some errors occurred
    ## 
    ## --------Summary descriptives table by 'treat'---------
    ## 
    ## ____________________________________________________________________ 
    ##              chemo        obs            OR        p.ratio p.overall 
    ##             N=1166       N=610                                       
    ## ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ 
    ## id         471 (269)   459 (269)  1.00 [1.00;1.00]  0.381    0.381   
    ## sex       0.51 (0.50) 0.53 (0.50) 1.06 [0.87;1.29]  0.548    0.548   
    ## age       60.0 (11.8) 59.5 (12.0) 1.00 [0.99;1.00]  0.377    0.380   
    ## obstruct  0.19 (0.39) 0.20 (0.40) 1.11 [0.87;1.42]  0.408    0.413   
    ## perfor    0.03 (0.17) 0.03 (0.17) 0.95 [0.54;1.70]  0.873    0.873   
    ## adhere    0.14 (0.35) 0.15 (0.35) 1.04 [0.79;1.38]  0.768    0.769   
    ## nodes     3.57 (3.42) 3.83 (3.75) 1.02 [0.99;1.05]  0.145    0.156   
    ## status:                                                      0.001   
    ##     alive 626 (53.7%) 274 (44.9%)       Ref.        Ref.             
    ##     dead  540 (46.3%) 336 (55.1%) 1.42 [1.17;1.73] <0.001            
    ## differ    2.05 (0.51) 2.08 (0.50) 1.12 [0.93;1.36]  0.232    0.229   
    ## extent    2.88 (0.46) 2.89 (0.50) 1.05 [0.86;1.29]  0.619    0.629   
    ## surg      0.25 (0.44) 0.30 (0.46) 1.23 [0.99;1.53]  0.063    0.067   
    ## node4     0.26 (0.44) 0.28 (0.45) 1.09 [0.87;1.36]  0.457    0.460   
    ## time      1597 (951)  1439 (931)  1.00 [1.00;1.00]  0.001    0.001   
    ## etype     1.50 (0.50) 1.50 (0.50) 1.00 [0.82;1.22]  1.000    1.000   
    ## ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ
    可以看到两者在surg有差异,为后续分析演示,同时纳入nodes两个变量,考虑这两个变量在组件有差异
    descrTable(status~ .-rx,show.ratio =TRUE,data = newdata)
    ## Warning in compareGroups.fit(X = X, y = y, include.label = include.label, :
    ## Variables 'study' have been removed since some errors occurred
    ## 
    ## --------Summary descriptives table by 'status'---------
    ## 
    ## ____________________________________________________________________ 
    ##              alive       dead            OR        p.ratio p.overall 
    ##              N=900       N=876                                       
    ## ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ 
    ## id         470 (264)   463 (275)  1.00 [1.00;1.00]  0.603    0.603   
    ## sex       0.53 (0.50) 0.51 (0.50) 0.93 [0.77;1.12]  0.460    0.460   
    ## age       60.0 (11.6) 59.6 (12.3) 1.00 [0.99;1.00]  0.416    0.416   
    ## obstruct  0.17 (0.38) 0.21 (0.41) 1.27 [1.00;1.61]  0.050    0.050   
    ## perfor    0.02 (0.15) 0.04 (0.19) 1.51 [0.87;2.63]  0.141    0.139   
    ## adhere    0.12 (0.32) 0.17 (0.38) 1.58 [1.21;2.06]  0.001    0.001   
    ## nodes     2.75 (2.46) 4.60 (4.18) 1.21 [1.16;1.25] <0.001   <0.001   
    ## differ    2.03 (0.49) 2.09 (0.53) 1.27 [1.06;1.53]  0.010    0.010   
    ## extent    2.81 (0.53) 2.96 (0.41) 2.02 [1.63;2.51] <0.001   <0.001   
    ## surg      0.24 (0.43) 0.30 (0.46) 1.38 [1.12;1.71]  0.003    0.003   
    ## node4     0.15 (0.36) 0.38 (0.49) 3.37 [2.69;4.23] <0.001   <0.001   
    ## time      2323 (447)   741 (586)  1.00 [1.00;1.00] <0.001    0.000   
    ## etype     1.51 (0.50) 1.49 (0.50) 0.93 [0.77;1.12]  0.448    0.448   
    ## treat:                                                       0.001   
    ##     chemo 626 (69.6%) 540 (61.6%)       Ref.        Ref.             
    ##     obs   274 (30.4%) 336 (38.4%) 1.42 [1.17;1.73] <0.001            
    ## ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ
    #以status为结局变量,观察个自变量对结果的影响,可以看到,nodes和surg都是由影响的。所以不同治疗措施的生存结果差异可能是两个因素影响的了
    psModel<-glm(status~adhere+differ,family=binomial(link="logit"),data=newdata) 
    #以上述挑选的两个自变量为因变量,结局变量为因变量建立二元回归方程
    newdata$ps=predict(psModel,type="response")
    #计算倾向性评分并在数据集内添加一列为PS的列,内容为评分
    newdata$IPTW<-ifelse(newdata$status==1,1/newdata$ps,1/(1-newdata$ps))
    #计算各个患者的加权值(IPTW)
    fit<-glm(status~treat,family=binomial(link="logit"),data=newdata) 
    
    summary(fit)
    ## 
    ## Call:
    ## glm(formula = status ~ treat, family = binomial(link = "logit"), 
    ##     data = newdata)
    ## 
    ## Deviance Residuals: 
    ##    Min      1Q  Median      3Q     Max  
    ## -1.265  -1.115  -1.115   1.241   1.241  
    ## 
    ## Coefficients:
    ##             Estimate Std. Error z value Pr(>|z|)    
    ## (Intercept) -0.14778    0.05873  -2.516 0.011861 *  
    ## treatobs     0.35176    0.10037   3.505 0.000457 ***
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## (Dispersion parameter for binomial family taken to be 1)
    ## 
    ##     Null deviance: 2461.7  on 1775  degrees of freedom
    ## Residual deviance: 2449.4  on 1774  degrees of freedom
    ## AIC: 2453.4
    ## 
    ## Number of Fisher Scoring iterations: 3
    #在不矫正的情况下观察治疗方式对于生存的影响,P值为0.
    fit.IPTW<-glm(status~treat,weights = ps,family=binomial(link="logit"),data=newdata) 
    ## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
    summary(fit.IPTW)
    ## 
    ## Call:
    ## glm(formula = status ~ treat, family = binomial(link = "logit"), 
    ##     data = newdata, weights = ps)
    ## 
    ## Deviance Residuals: 
    ##     Min       1Q   Median       3Q      Max  
    ## -1.0116  -0.7744  -0.7291   0.8484   0.9801  
    ## 
    ## Coefficients:
    ##             Estimate Std. Error z value Pr(>|z|)  
    ## (Intercept) -0.12652    0.08363  -1.513   0.1303  
    ## treatobs     0.34432    0.14285   2.410   0.0159 *
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## (Dispersion parameter for binomial family taken to be 1)
    ## 
    ##     Null deviance: 1214.4  on 1775  degrees of freedom
    ## Residual deviance: 1208.5  on 1774  degrees of freedom
    ## AIC: 679.98
    ## 
    ## Number of Fisher Scoring iterations: 3
    #可以看到,加权后的P值为0.0159,虽然也有意义,但是在校准后其变小了,说明加权后其效果变小了

    相关文章

      网友评论

        本文标题:R语言处理非治疗因素在两组变量不均衡的方法(结果为二分类变量)

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