第18章 描述性统计

18.1 分类变量的描述性统计

18.1.1 频数分布表

分类变量的频数分布表可以用xtabs()函数实现。我们以UCI心脏病数据集做演示。

library(tidyverse)
# 读取数据
heart_df <- read_csv("data/heart.csv")

# 展示前6行数据
heart_df %>% head()
## # A tibble: 6 × 14
##     age   sex    cp trestbps  chol   fbs restecg thalach exang oldpeak slope
##   <dbl> <dbl> <dbl>    <dbl> <dbl> <dbl>   <dbl>   <dbl> <dbl>   <dbl> <dbl>
## 1    52     1     0      125   212     0       1     168     0     1       2
## 2    53     1     0      140   203     1       0     155     1     3.1     0
## 3    70     1     0      145   174     0       1     125     1     2.6     0
## 4    61     1     0      148   203     0       1     161     0     0       2
## 5    62     0     0      138   294     1       1     106     0     1.9     1
## 6    58     0     0      100   248     0       0     122     0     1       1
## # ℹ 3 more variables: ca <dbl>, thal <dbl>, target <dbl>
# 生成fbs频数分布表
xtabs(formula = ~fbs, data = heart_df)
## fbs
##   0   1 
## 872 153
# 或者使用
xtabs(formula = ~heart_df$fbs)
## heart_df$fbs
##   0   1 
## 872 153
# 生成sex和fbs的列联表
xtabs(formula = ~sex+fbs, data = heart_df)
##    fbs
## sex   0   1
##   0 270  42
##   1 602 111

18.1.2 计算百分比与合计数

我们可以使用prop.tabls()函数计算列联表的计数百分比,使用margin.table()或者addmargins()函数按行或列对计数进行合计。

# 计算百分比
prop.table(xtabs(formula = ~sex+fbs, data = heart_df))
##    fbs
## sex          0          1
##   0 0.26341463 0.04097561
##   1 0.58731707 0.10829268
# 按行进行合计
margin.table(xtabs(formula = ~sex+fbs, data = heart_df), margin = 1)
## sex
##   0   1 
## 312 713
# 按列进行合计
margin.table(xtabs(formula = ~sex+fbs, data = heart_df), margin = 2)
## fbs
##   0   1 
## 872 153
# 同时按行和列进行合计
addmargins(xtabs(formula = ~sex+fbs, data = heart_df))
##      fbs
## sex      0    1  Sum
##   0    270   42  312
##   1    602  111  713
##   Sum  872  153 1025

18.1.3 四格表与RC列联表

当两个分类变量分别包含两个水平时,做出来的2×2表格有四个格子,因此被称为四格表。四格表存在独立样本和配对样本两种情况。对于不同的情况,需要采用不同的分析方法。

当两个分类变量包含多个水平时,做出来包含多行多列的表格被称为RC列联表。行和列的变量都不是有序变量时,被称为双向无序;只有一个是有序变量时,被称为单向有序;两个都是有序变量时,被称为双向有序

18.2 连续变量的描述性统计

连续变量的描述可以用mean()sd()等函数实现,这些函数在之前都有介绍,这里不做赘述。