探索数据

先查看各命令展开的示例,再按需展开其他选项及 R 实现。改写代码前,请阅读适用条件及差异说明。

anova

方差分析

Stata

anova y group

R 包:stats

summary(aov(y ~ factor(group), data = data))

browse

观察数据表

Stata

browse

R 包:tidystata

browse(data)
另有 9 个示例及替代实现

选中、观察某些变量

Stata

browse x1 x3-x5

R 包:tidystata

browse(data, x1, x3:x5)

变量范围用冒号(x3:x5),而不是减号。

找到所有以某些字符结尾的变量

Stata

browse *x

R 包:dplyr

select(data, ends_with("x"))

找到所有包含某些字符的变量

Stata

browse *x*

R 包:dplyr

select(data, contains("x"))

根据某些变量取值,选中、观察数据特定行

Stata

browse if x1 == 1 & x2 == 2

R 包:dplyr

filter(data, x1 == 1 & x2 == 2)

选中、观察数据后几行

Stata

browse in -10/-1

R 包:base

tail(data, 10)

选中、观察数据前几行

Stata

browse in 1/10

R 包:base

head(data, 10)

选中、观察数据某几行

Stata

browse in 7/12

R 包:dplyr

slice(data, 7:12)

找到所有以某些字符开头的变量

Stata

browse x*

R 包:dplyr

select(data, starts_with("x"))

选中、观察某些变量(批量选择)

Stata

browse x* y*

R 包:tidystata

browse(data, varlist("x* y*"))

varlist() 支持 Stata 的 * 和 ? 通配符,可用于 select() 等任何选择变量的函数。

ci

均值的置信区间

Stata

ci mean x

R 包:stats

t.test(data$x)$conf.int

加上 conf.level = 0.99 相当于 ci mean x, level(99)。

codebook

详细描述每个变量

Stata

codebook

R 包:tidystata

codebook(data)
另有 1 个示例及替代实现

每个变量一行的简要统计

Stata

codebook, compact

R 包:tidystata

summ(data)

correlate

相关系数矩阵(仅用完整个案)

Stata

correlate x1 x2 x3

R 包:stats

cor(select(data, x1, x2, x3), use = "complete.obs")

describe

描述数据结构

Stata

describe

R 包:tidystata

variables(data)

glimpse(data) 可以紧凑地显示每个变量的前几个取值。

另有 1 个示例及替代实现

不载入数据,查看文件中的变量

Stata

describe using data.dta

R 包:haven

haven::read_dta("data.dta", n_max = 0)

ds

查看变量名列表

Stata

ds

R 包:tidystata

ds(data)

ds(data, .type = “table”) 以单列数据表返回变量名;base R 中可用 names(data)。

dtable

描述统计表(“表 1”,Stata 18 及以上)

Stata

dtable x1 x2, by(group)

R 包:gtsummary

gtsummary::tbl_summary(data, by = group, include = c(x1, x2))

modelsummary::datasummary_skim(data) 可以快速概览所有变量,不需要分组变量。

factor

因子分析

Stata

factor x1 x2 x3

R 包:stats

factanal(na.omit(select(data, x1, x2, x3)), factors = 1)

与 Stata 有差异 factanal() 使用最大似然法;psych::fa(…, fm = “pa”) 对应 Stata 默认的主因子法。

fre

带合计的频数表

Stata

fre x

R 包:tidystata

fre(data, x)

与 Ben Jann 的 fre 命令类似,即带合计行的 tab()。

inspect

变量的分布、零值和缺失值

Stata

inspect x

R 包:tidystata

summ(data, x, .detail = TRUE)

hist(data$x) 可以画出 inspect 显示的简易直方图。

ksmirnov

Kolmogorov-Smirnov 分布相等性检验

Stata

ksmirnov x, by(group)

R 包:stats

ks.test(data$x[data$group == 0], data$x[data$group == 1])

与 Stata 有差异 R 代码假设分组编码为 0 和 1;精确或渐近推断和并列值处理可能与 Stata ksmirnov 不同。

ktau

Kendall tau 相关

Stata

ktau x y

R 包:stats

cor.test(data$x, data$y, method = "kendall")

与 Stata 有差异 秩相关系数含义相同,但精确或渐近 p 值的选择和并列值校正可能不同;需另行匹配推断选项。

kwallis

Kruskal-Wallis 检验

Stata

kwallis x, by(group)

R 包:stats

kruskal.test(x ~ group, data = data)

levelsof

变量的所有不同取值

Stata

levelsof x

R 包:base

sort(unique(data$x))

与 Stata 有差异 可以存起来用于循环:levels <- sort(unique(data$x)),然后 for (v in levels) { … }。 sort(unique()) 默认排除 NA,但字符串按 R 排序规则排列,可能与 Stata 不同。

list

打印数据表

Stata

list

R 包:tidystata

print_all(data)

打印所有行和列。直接输入数据名只显示前几行;print_headtail(data) 显示首尾若干行。

另有 1 个示例及替代实现

选中、观察某个变量

Stata

list x

R 包:dplyr

pull(data, x)

data$x 效果相同;select(data, x) 则保留为只有一列的数据表。

lookfor

根据变量名或标签查找变量

Stata

lookfor income

R 包:tidystata

variables_search(data, "income")

mean

均值及其标准误

Stata

mean x

R 包:tidystata

summ(data, x, .stat = c("mean", "se"))

与 Stata 有差异 t.test(data$x) 还会给出置信区间。 R 代码仅返回点汇总(mean 另含标准误);Stata 还报告置信区间并保存估计结果。

oneway

单因素方差分析

Stata

oneway y group

R 包:stats

summary(aov(y ~ factor(group), data = data))

与 Stata 有差异 bartlett.test(y ~ group, data = data) 给出 oneway 报告的方差齐性检验。 aov() 给出方差分析表,但不含 oneway 打印的 Bartlett 等方差检验;该检验须另用 bartlett.test()。

pca

主成分分析

Stata

pca x1 x2 x3

R 包:stats

prcomp(na.omit(select(data, x1, x2, x3)), scale. = TRUE)

与 Stata 有差异 Stata 基于相关矩阵进行分析,因此 scale. = TRUE 与之一致。 scale. = TRUE 对应相关矩阵主成分分析;特征向量正负号可任意翻转,保存的旋转向量和打印载荷的归一化规则不同。

proportion

各类别的比例

Stata

proportion x

R 包:base

prop.table(table(data$x))

与 Stata 有差异 tab(data, x) 给出同样的百分比;prop.test() 可以给出单个比例的置信区间。 R 代码仅返回点汇总(mean 另含标准误);Stata 还报告置信区间并保存估计结果。

prtest

比例检验

Stata

prtest x == 0.5

R 包:stats

prop.test(sum(data$x == 1, na.rm = TRUE), sum(!is.na(data$x)), p = 0.5, correct = FALSE)

与 Stata 有差异 correct = FALSE 对应 Stata 不做连续性校正的正态近似检验。 关闭校正后检验统计量对应正态近似,但 prop.test() 置信区间使用得分反演,而 prtest 使用 Wald 区间。

pwcorr

两两相关系数

Stata

pwcorr x1 x2 x3

R 包:tidystata

pwcorr(data, x1, x2, x3)

与 Stata 有差异 每对变量给出 r、n 和 p;.wide = TRUE 给出相关矩阵。base R:cor(select(data, x1, x2, x3), use = “pairwise.complete.obs”)。 pwcorr() 用整洁表返回配对数和 p 值;Stata 默认打印相关矩阵,其他报告内容需额外选项。

ranksum

Wilcoxon 秩和检验(Mann-Whitney 检验)

Stata

ranksum x, by(group)

R 包:stats

wilcox.test(x ~ group, data = data)

与 Stata 有差异 R 对小样本可能使用精确推断,正态近似默认作连续性校正;Stata 默认不同。应明确指定 exact 和 correct。

signrank

Wilcoxon 符号秩检验

Stata

signrank x = y

R 包:stats

wilcox.test(data$x, data$y, paired = TRUE)

与 Stata 有差异 R 对小样本可能使用精确推断,正态近似默认作连续性校正;Stata 默认不同。应明确指定 exact 和 correct。

sktest

偏度和峰度

Stata

sktest x

R 包:tidystata

summ(data, x, .stat = c("skew", "kurtosis"))

正式的正态性检验可用 shapiro.test(data$x)。

spearman

Spearman 秩相关

Stata

spearman x y

R 包:stats

cor.test(data$x, data$y, method = "spearman")

与 Stata 有差异 秩相关系数含义相同,但精确或渐近 p 值的选择和并列值校正可能不同;需另行匹配推断选项。

stem

茎叶图

Stata

stem x

R 包:graphics

stem(data$x)

summarize

用统计量描述所有变量

Stata

summarize

R 包:tidystata

summ(data)

与 Stata 有差异 base R 的 summary(data) 也可以,但输出格式不够整齐。 summ() 还报告缺失数量,并有自己的默认统计量布局;匹配 Stata 输出时应明确指定 .stat。

另有 4 个示例及替代实现

用统计量描述单个变量

Stata

summarize x

R 包:tidystata

summ(data, x)

与 Stata 有差异 summ() 还报告缺失数量,并有自己的默认统计量布局;匹配 Stata 输出时应明确指定 .stat。

用统计量分组描述变量

Stata

bysort group: summarize x

R 包:tidystata

summ(data, x, .by = group)

与 Stata 有差异 group_by(data, group) |> summ(x) 结果相同。 summ() 还报告缺失数量,并有自己的默认统计量布局;匹配 Stata 输出时应明确指定 .stat。

加权描述统计

Stata

summarize x [aweight = w]

R 包:tidystata

summ(data, x, .wt = w, .wt_type = "analytic")

与 Stata 有差异 默认是频数权重:summ(data, x, .wt = w)。 summ() 还报告缺失数量,并有自己的默认统计量布局;匹配 Stata 输出时应明确指定 .stat。

详细统计量(含分位数)

Stata

summarize x, detail

R 包:tidystata

summ(data, x, .detail = TRUE)

与 Stata 有差异 用 .stat 选择个别统计量,例如 summ(data, x, .stat = “p25”)。 summ() 还报告缺失数量,并有自己的默认统计量布局;匹配 Stata 输出时应明确指定 .stat。

swilk

Shapiro-Wilk 正态性检验

Stata

swilk x

R 包:stats

shapiro.test(data$x)

与 Stata 有差异 shapiro.test() 接受 3 至 5000 个非缺失观测;Stata swilk 的样本量限制和报告方式不同。

tab1

逐个描述变量

Stata

tab1 x1 x2 x3

R 包:tidystata

tab1(data, x1, x2, x3)

与 Stata 有差异 tidystata 默认保留缺失类别;Stata tabulate 仅在指定 missing 时保留。使用 .missing = FALSE 可匹配 Stata。

tab2

两个变量的交叉表

Stata

tab2 x1 x2

R 包:tidystata

tab2(data, x1, x2)

与 Stata 有差异 三个或更多变量时,tab2(data, x1, x2, x3) 会像 Stata 一样返回每一对变量的交叉表。 tidystata 默认保留缺失类别;Stata tabulate 仅在指定 missing 时保留。使用 .missing = FALSE 可匹配 Stata。

table

用表格描述多个类别变量取值分布(长表)

Stata

table x1 x2 x3

R 包:tidystata

tab(data, x1, x2, x3)
另有 1 个示例及替代实现

按类别列出统计量(Stata 17 及以上的 table)

Stata

table x, statistic(mean y)

R 包:tidystata

summ(data, y, .by = x, .stat = "mean")

tabstat

用统计量分组描述若干变量

Stata

tabstat x1 x2, by(group) stat(mean sd)

R 包:tidystata

tabstat(data, x1, x2, .by = group, .stat = c("mean", "sd"))

与 Stata 有差异 R 保留缺失分组键;Stata tabstat by() 和 tabulate summarize() 默认排除缺失分组类别。应核对分组样本。

tabulate

用表格描述单个类别变量取值分布

Stata

tabulate x

R 包:tidystata

tab(data, x)

与 Stata 有差异 tidystata 默认保留缺失类别;Stata tabulate 仅在指定 missing 时保留。使用 .missing = FALSE 可匹配 Stata。

另有 8 个示例及替代实现

用表格描述两个类别变量取值分布

Stata

tabulate x1 x2

R 包:tidystata

tab2(data, x1, x2)

与 Stata 有差异 fre2(data, x1, x2) 会加上行合计和列合计。 tidystata 默认保留缺失类别;Stata tabulate 仅在指定 missing 时保留。使用 .missing = FALSE 可匹配 Stata。

分组频数表

Stata

bysort g: tabulate x

R 包:tidystata

tab(data, x, .by = g)

与 Stata 有差异 tidystata 默认保留缺失类别;Stata tabulate 仅在指定 missing 时保留。使用 .missing = FALSE 可匹配 Stata。

带分析权重(抽样权重)的频数表

Stata

tabulate x [aweight = w]

R 包:tidystata

tab(data, x, .wt = w, .wt_type = "analytic")

与 Stata 有差异 tidystata 默认保留缺失类别;Stata tabulate 仅在指定 missing 时保留。使用 .missing = FALSE 可匹配 Stata。

带频数权重的频数表

Stata

tabulate x [fweight = n]

R 包:tidystata

tab(data, x, .wt = n)

与 Stata 有差异 tidystata 默认保留缺失类别;Stata tabulate 仅在指定 missing 时保留。使用 .missing = FALSE 可匹配 Stata。

包含缺失值的频数表

Stata

tabulate x, missing

R 包:tidystata

tab(data, x)

tab() 总会把缺失值单独列为一行。

按 x 的类别描述 y

Stata

tabulate x, summarize(y)

R 包:tidystata

summ(data, y, .by = x)

与 Stata 有差异 R 保留缺失分组键;Stata tabstat by() 和 tabulate summarize() 默认排除缺失分组类别。应核对分组样本。

卡方独立性检验

Stata

tabulate x1 x2, chi2

R 包:tidystata

tab2(dplyr::filter(data, !is.na(x1), !is.na(x2)), x1, x2, .chi2 = TRUE)

与 Stata 有差异 为匹配不带missing选项的Stata tabulate, chi2,先剔除任一变量缺失的观测;否则tab2将显示的缺失类别也纳入Pearson检验。 tidystata 默认保留缺失类别;Stata tabulate 仅在指定 missing 时保留。使用 .missing = FALSE 可匹配 Stata。

Fisher 精确检验

Stata

tabulate x1 x2, exact

R 包:stats

fisher.test(data$x1, data$x2)

ttest

两样本 t 检验

Stata

ttest x, by(group)

R 包:stats

t.test(x ~ group, data = data)

与 Stata 有差异 R 默认使用 Welch 检验;加上 var.equal = TRUE 即为 Stata 默认的等方差检验。

univar

详细的单变量统计量

Stata

univar x1 x2

R 包:tidystata

summ(data, x1, x2, .detail = TRUE)