数值描述性分析

💡 原文英文,约1000词,阅读约需4分钟。
📝

内容提要

本文介绍用R对birthwt数据集进行数值描述性分析:先将low、race、smoke等分类变量转为因子,用summary()和epiDisplay包的summ()查看统计量;对age、lwt、bwt等连续变量计算均值、标准差、偏度、峰度,并按smoke、race分组,可通过aggregate()、tapply()、describeBy()或dplyr的group_by()与summarise()实现。

🔎

延伸解读

分类变量因子化的重要性

在分析前将low、race、smoke等分类变量转换为因子,不仅使summary()输出频数表,还能在后续分组统计中正确识别类别。但需注意,epiDisplay包的summ()函数对因子变量会将其各水平视为数值计算统计量,可能导致误导性结果,因此使用该函数时应避免直接分析因子变量。

连续变量分布形态的评估

除了均值和标准差,偏度和峰度能揭示数据的分布形状。基础R不提供这些统计量,但可通过psych包的describe()函数获得。对于age、lwt、bwt等连续变量,检查偏度和峰度有助于判断是否近似正态分布,从而决定后续分析是否适用参数方法。

分组统计方法的选择与比较

R提供了多种分组计算统计量的方式:aggregate()和tapply()来自基础包,describeBy()来自psych包,而dplyr的group_by()与summarise()最为灵活。aggregate()的by参数需用list指定分组变量,且可同时按多个变量分组;tapply()一次只能处理一个变量;dplyr方法则能清晰简洁地计算任意统计量。

探索性数据分析的实用技巧

使用summ()函数按分组变量输出有序点图,能直观展示数值变量的集中趋势和异常值。对于birthwt数据,按smoke分组观察bwt的分布,可快速发现吸烟组的新生儿体重均值较低(2771.9 vs 3055.7),但需注意这仅为描述性结果,不能直接推断因果关系。

❓

Q&A

在R中对birthwt数据集进行数值描述性分析前,需要做哪些数据预处理?

需要将分类变量low、race、smoke、ht、ui转换为因子,并可使用labels参数为各水平指定标签,例如low的标签为"no"和"yes"。

如何用summary()和epiDisplay包的summ()函数查看birthwt数据集的描述性统计量?

summary()函数对数值变量给出最小值、下四分位数、中位数、均值、上四分位数和最大值,对分类变量给出频数表;summ()函数以另一种格式输出,将变量按行排列,最小值和最大值放在最后两列,便于查看数据范围。

在R中如何计算连续变量的偏度和峰度?

基础包不提供计算偏度和峰度的函数,可以自行根据公式计算,或调用其他包如Hmisc、psych、pstecs中的函数。例如psych包的describe()函数可以计算偏度和峰度。

如何按smoke分组计算birthwt数据集中age、lwt、bwt的均值和标准差?

可以使用aggregate()函数,如aggregate(cont.vars, by = list(smoke = birthwt$smoke), mean)计算均值,将mean改为sd计算标准差;也可以使用tapply()、describeBy()或dplyr的group_by()与summarise()实现。

aggregate()函数中的by参数需要注意什么?

by参数必须设置为list。如果直接使用list(birthwt$smoke),分组列的名称会显示为"Group.1"而不是"smoke"。可以在list中设置多个分类变量,例如list(smoke = birthwt$smoke, race = birthwt$race),以计算多个变量组合的统计量。

describeBy()和dplyr的group_by()与summarise()在分组统计上有何区别?

describeBy()函数可以按组计算与describe()相同的统计量,但无法指定任意函数,扩展性较差;而dplyr的group_by()与summarise()可以灵活计算分组统计量,例如summarise(Mean.bwt = mean(bwt), Sd.bwt = sd(bwt)),方法更清晰、结果更简洁。

🏷️

标签

➡️

继续阅读