• scitb包1.5版本发布—增加了统计值的结果和自动判断数据是否正态分布的功能


    目前,本人写的scitb包1.5版本已经正式在R语言官方CRAN上线,scitb包是一个为生成专业化统计表格而生的R包。目前只能绘制基线表一。
    可以使用以下代码安装

    install.packages("scitb")
    
    • 1

    在这里插入图片描述
    安装过旧版本的从新安装一次就可以升级了
    scitb包1.5版本修正了上个版本的一些小错误,根据粉丝的建议,增加了两个新功能,一个是返回了统计值的结果,因为咱们国内的论文投稿的时候经常需要上报一些卡方值,F值等什么的,其实scitb包计算的时候已经生成这个值了,只是没有列出来,这次增加了这个功能,还有一个是增加了自动判断数据是否是正态分布,然后根据是否是正态分布返回相应的结果,如果不是正态分布的话返回的是中位数和四分位数表示,P值也是使用秩和检验计算出来。
    下面我来演示一下,scitb包生成结果需要stringi包和nortest包支持,这两个包你可以不导入,但要先安装好。

    install.packages(stringi)
    install.packages(nortest)
    
    • 1
    • 2

    安装好需要的包后我们就可以开始了,先导入R包和数据,scitb包自带有我既往的早产数据,咱们直接从包调用

    library(scitb)
    bc<-prematurity
    
    • 1
    • 2

    在这里插入图片描述
    这是一个关于早产低体重儿的数据,低于2500g被认为是低体重儿。数据解释如下:low 是否是小于2500g早产低体重儿,age 母亲的年龄,lwt 末次月经体重,race 种族,smoke 孕期抽烟,ptl 早产史(计数),ht 有高血压病史,ui 子宫过敏,ftv 早孕时看医生的次数,bwt 新生儿体重数值
    Sci包中绘制基线表的主要是scitb1函数(以后会有更多其他表格函数),咱们来看下它的函数体

    scitb1(vars,fvars=NULL,strata,data,dec,num,nonnormal=NULL,type=NULL,
    statistic=F,atotest=T,NormalTest=NULL)
    
    • 1
    • 2

    咱们先来看一下,vars是变量的意思,你基线表中的变量放进去,fvars是分类变量,就是你vars变量中的分类变量,如果没有的话就留空。strata,就是分层的意思,这里填入你要研究的变量,data这里填入你的数据,dec就是你生成结果的小数点位数,默认是3位,其他的变量我在后面部分穿插来讲。
    咱们先来个分类变量的
    假设咱们想race为研究目标,因为它是分类变量,咱们最好把它转成因子,因为scitb包有一定对数据类型的判定能力,如果你的分类变量类别大于5个,而你不转成因子的话,它可能自动判定为连续变量,处理方式不一样的,所以这里最好自己设定一下

    bc$race<-as.factor(bc$race)
    
    • 1

    接下来就是定义全部变量,分类变量和分层变量,这和tableone包一模一样,如果你会使用tableone包,使用scitb包起来完全无压力。

    allVars <-c("age", "lwt",  "smoke", "ptl", "ht", "ui", "ftv", "bwt")
    fvars<-c("smoke","ht","ui")
    strata<-"race"
    
    • 1
    • 2
    • 3

    一键生成统计结果

    out<-scitb1(vars=allVars,fvars=fvars,strata=strata,data=bc)
    
    • 1

    在这里插入图片描述
    咱们看下上图,这里我要好好讲一下,“age”, “lwt”,“ptl”,“ftv”,这4个变量被函数判断成了非正态分布,bwt被判定成了正态分布。咱们先看"ptl","ftv"这两个的结果非常奇怪好像不怎么对,咱们从新看下数据

    在这里插入图片描述
    "ptl"只有两个分类应该是定义成分类变量,我们把它定义成连续变量搞错了,ftv是看医生的次数,1-6次,虽然看起来好像个连续变量,但是只有6个分类变量,我觉得该是定义为分类变量比较好,可以改成3次一下和3次以上的,咱们从新跑一下

    fvars<-c("smoke","ht","ui","ptl","ftv")
    out<-scitb1(vars=allVars,fvars=fvars,strata=strata,data=bc)
    
    • 1
    • 2

    在这里插入图片描述
    我们可以看到age,lwt这两个变量还是被判定为非正态分布,咱们来看下它算的对不对,画个直方图

    hist(bc$age)
    hist(bc$lwt)
    hist(bc$bwt) 
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    我们可以看到前两个不是正态分布,而bwt是明显的正态分布,算得还是比较准的。我这里介绍一下我是怎么算正态分布的,我参照了SPSS的算法。

    在这里插入图片描述
    我们可以看到,SPSS对于正态分布提供2种算法Shapiro-Wilk 检验和Kolmogorov–Smirnov检验。Shapiro-Wilk 检验是用于样本量小于3500的。
    而我在scitb包中提供了5种算法,默认的是:当样本量小于3500使用Shapiro-Wilk 检验,样本量大于3500使用Kolmogorov–Smirnov检验。你要是觉得这两种检验算得不准的话,我这里还提供有"ad", “cvm”, "pearson"3种检验,使用NormalTest参数控制,比如

    out<-scitb1(vars=allVars,fvars=fvars,strata=strata,data=bc,NormalTest="ad")
    
    • 1

    在这里插入图片描述
    近年来有文献表明"ad", "cvm"这两种方法优于前面两种,但前两种是经典算法,被大众接受,所以我默认了前两种。
    自动计算正态分布受到atotest参数控制,默认是atotest=T,比如你不想使用函数自动帮你计算正态分布,你想自己定义你可以关了,通过nonnormal这个参数来定义非正态参数

    out<-scitb1(vars=allVars,fvars=fvars,strata=strata,data=bc,nonnormal =c("lwt"),atotest = F)
    
    • 1

    在这里插入图片描述
    我们可以看到就只有lwt定义为非正态分布。

    我这里要重点说一下,如果你使用nonnormal这个参数来定义非正态分布的参数,一定要设置atotest = F,把自动判定关掉,不然是没有用的,还是会自动判定的。

    接下来说一下统计值,默认是不返回统计值,统计值由参数statistic控制,默认是statistic=F,如果你的文章需要统计值,可以

    out<-scitb1(vars=allVars,fvars=fvars,strata=strata,data=bc,statistic=T)
    
    • 1

    在这里插入图片描述
    这里我解释一下,如果是分类变量这里的方法是卡方,一律是卡方值(χ2),如果是连续变量的,如果是正态分布的话就是使用单因素方差分析,它的值是F值,如果是非正态分布的话,使用的是秩和检验,也有叫克鲁斯卡尔-沃利斯检验(Kruskal-Wallis),在SPSS中叫做K检验,算出来的结果和tableone一模一样的,有兴趣可以自己取算一下。
    下面我来介绍一下连续变量和上一篇差不多的(详细的可以翻看上一篇),这里我简单介绍一下。
    我们这里假设研究年龄age这个连续变量,默认分层3组

    allVars <-c("race", "lwt",  "smoke", "ptl", "ht", "ui", "ftv", "bwt")
    fvars<-c("smoke","ht","ui","race")
    strata<-"age"
    
    • 1
    • 2
    • 3

    一键生成结果

    out<-scitb1(vars=allVars,fvars=fvars,strata=strata,data=bc)
    
    • 1

    在这里插入图片描述
    在新版本中,除了介绍分割点外,还会出现红字温馨提醒你,分层变量也就是目标变量被当做一个连续变量来处理了

    在这里插入图片描述
    加入统计值也是一样的

    out<-scitb1(vars=allVars,fvars=fvars,strata=strata,data=bc,statistic=TRUE)
    
    • 1

    在这里插入图片描述
    其他的都和上一篇差不多,就不详细介绍了,有兴趣的看下上一篇。最后导出数据

    write.csv(out,file = "1.csv",row.names = F)
    
    • 1

    这里要说一下,如果你导出的是乱码,可以使用如下代码纠正

    write.csv(out,file = "1.csv",fileEncoding = "GB18030",row.names = F)
    
    • 1

    在这里插入图片描述
    打开看一下

    在这里插入图片描述
    把它拷贝入word

    在这里插入图片描述
    把它整理一下,这样一个专业表格就做好啦。

    在这里插入图片描述
    如果你还是不会也没有关系,下周我再出个操作视频。

  • 相关阅读:
    矿区井下智慧用电安全监测解决方案
    c++暴力法
    【测控电路】ADDA转换电路
    含文档+PPT+源码等]精品基于Uniapp实现的Android的餐饮管理系统实现的App[包运行成功]计算机毕业设计安卓项目源码
    点击劫持概念及解决办法
    思科认证 | 思科认证考点汇总及常见考试注意事项
    基于51单片机的心率脉搏检测报警系统Proteus仿真
    Win7 easy connect 提示:选路连接失败,可能当前连接网络异常,请稍后重试
    流媒体基础知识TS流 PS流 ES流区别
    MySQL(十一) 用户管理
  • 原文地址:https://blog.csdn.net/dege857/article/details/134324696