Table 1一般是关于被试的summary statistics. 制作这个表,大概用过以下几种方式:
1. 数据导入SPSS,计算然后手动填入表格
2. 使用matlab代码统计信息,手动填入表格
3. 使用R的package生成表格
那天Excel已经准备好,正要打开matlab开始写code做统计的时候,我觉得应该有一个更好的解决方案。手动填写这些信息的话,筛选被试的条件发生改变时,意味着你将再一次手动填写同类内容。虽然Table 1往往是放到最后生成的,但是也难以避免需要多次反复生成的命运,所以还是使用code比较省心。btw,分析数据时的图表能用code就用code,手动参与的越多,修改的时候也越痛苦。
今天分享一个生成基本统计信息的软件包qwraps2.
其实这样的工具包有很多:
arsenal
qwraps2
amisc
table1
tangram
furniture
tableone
compareGroups
htmltable
这些package的横评和使用见此文章:
大概内容就是哪个可以显示missing value,哪个只能生成html的形式,哪个的代码少更简洁。这些package的原理应该都大同小异,最后选择使用qwraps2的原因是它的使用逻辑清晰,在p值计算和重命名变量名称上有很多的flexibility,使用之后感觉疗效不错。
qwraps2使用流程
定义输出的格式
对于连续变量可以统计min/max/mean等信息,
对于分类变量可统计个数和百分比
生成表
格式是 summary_table(data, summary_format)
如果需要根据某个条件进行分类统计,使用dplyr的group_by即可
按需增加p值的统计方式
计算连续变量的p值
这里使用的是简单的线性模型
计算分类变量的p值
增加p值
原理是首先增加一列,然后查找相应的关键字,加入p值。这部分代码只对markdown的输出形式有效!这个软件默认的输出格式是latex,所以需要提前修改默认的输出形式。当然如果你选择自己写code查找替换latex的内容,也是可以的。。
使用pandoc转化成docx
之前步骤中看到的表其实是html显示markdown的效果,在R中的输出是这样的:
Latex
Markdown
因此要将output粘贴到相应后缀名.md或者.tex文件中,使用pandoc转化成docx。
详情可以参阅该package的vignette
最后附上一个自己的example:
1. 定义输出格式
sex/handedness/BSL PDS计算个数和百分比
age/mean FD计算mean和SD
2. 生成表
3. 增加p值
age/mean FD使用简单的线性模型统计组间差异
sex/pds/handedness使用chi-square统计组间差异
这里根据需要选取统计方式
最后将输出复制到文件中,使用pandoc转换成docx
pandoc test.md -o test.docx
Bonus: Mann-Whitney-Wilcoxon Test使用这个fomular