流行病学

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

cc

病例对照交叉乘积优势比

Stata

cc case exposed

R 包:base

unname(a * d / (b * c))

与 Stata 有差异 固定流程;请明确调整示例列名。病例对照抽样可识别优势比,不能识别绝对疾病风险。

精确条件优势比推断

Stata

cc case exposed, exact

R 包:stats

stats::fisher.test(tab, alternative = "two.sided")

与 Stata 有差异 固定流程;请明确调整示例列名。条件估计和双侧p值计算约定可能不同。

对数优势比近似Wald区间

Stata

cc case exposed, woolf

R 包:stats

{ log_or <- log(a * d / (b * c)); se <- sqrt(sum(1 / tab)); exp(c(estimate = log_or, lower = log_or - qnorm(.975) * se, upper = log_or + qnorm(.975) * se)) }

与 Stata 有差异 固定流程;请明确调整示例列名。计数不能为零;未自动施加连续性修正。

cci

病例对照交叉乘积优势比

Stata

cci 20 10 80 90

R 包:base

unname(a * d / (b * c))

与 Stata 有差异 固定流程;请明确调整示例列名。病例对照抽样可识别优势比,不能识别绝对疾病风险。

精确条件优势比推断

Stata

cci 20 10 80 90, exact

R 包:stats

stats::fisher.test(tab, alternative = "two.sided")

与 Stata 有差异 固定流程;请明确调整示例列名。条件估计和双侧p值计算约定可能不同。

对数优势比近似Wald区间

Stata

cci 20 10 80 90, woolf

R 包:stats

{ log_or <- log(a * d / (b * c)); se <- sqrt(sum(1 / tab)); exp(c(estimate = log_or, lower = log_or - qnorm(.975) * se, upper = log_or + qnorm(.975) * se)) }

与 Stata 有差异 固定流程;请明确调整示例列名。计数不能为零;未自动施加连续性修正。

cs

风险比和风险差

Stata

cs case exposed

R 包:base

{ risk1 <- a / (a + c); risk0 <- b / (b + d); c(risk_exposed = risk1, risk_unexposed = risk0, risk_ratio = risk1 / risk0, risk_difference = risk1 - risk0) }

与 Stata 有差异 固定流程;请明确调整示例列名。点风险量要求可比随访的队列设计;病例对照抽样不能识别绝对风险。

暴露组和总体归因分值

Stata

cs case exposed

R 包:base

{ rr <- (a / (a + c)) / (b / (b + d)); af_exposed <- 1 - 1 / rr; risk_population <- (a + b) / (a + b + c + d); c(attributable_fraction_exposed = af_exposed, attributable_fraction_population = (risk_population - b / (b + d)) / risk_population) }

与 Stata 有差异 固定流程;请明确调整示例列名。因果解释还要求可交换性和正确的研究抽样。

队列表的Fisher精确关联检验

Stata

cs case exposed, exact

R 包:stats

stats::fisher.test(tab)

与 Stata 有差异 固定流程;请明确调整示例列名。R报告条件极大似然优势比;Stata还报告样本交叉乘积指标。

队列表的Woolf优势比区间

Stata

cs case exposed, or woolf

R 包:stats

{ odds <- a * d / (b * c); se <- sqrt(1 / a + 1 / b + 1 / c + 1 / d); c(odds_ratio = odds, lower = exp(log(odds) - qnorm(.975) * se), upper = exp(log(odds) + qnorm(.975) * se)) }

与 Stata 有差异 固定流程;请明确调整示例列名。Woolf近似要求所有单元格计数为正。

csi

风险比和风险差

Stata

csi 20 10 80 90

R 包:base

{ risk1 <- a / (a + c); risk0 <- b / (b + d); c(risk_exposed = risk1, risk_unexposed = risk0, risk_ratio = risk1 / risk0, risk_difference = risk1 - risk0) }

与 Stata 有差异 固定流程;请明确调整示例列名。点风险量要求可比随访的队列设计;病例对照抽样不能识别绝对风险。

暴露组和总体归因分值

Stata

csi 20 10 80 90

R 包:base

{ rr <- (a / (a + c)) / (b / (b + d)); af_exposed <- 1 - 1 / rr; risk_population <- (a + b) / (a + b + c + d); c(attributable_fraction_exposed = af_exposed, attributable_fraction_population = (risk_population - b / (b + d)) / risk_population) }

与 Stata 有差异 固定流程;请明确调整示例列名。因果解释还要求可交换性和正确的研究抽样。

队列表的Fisher精确关联检验

Stata

csi 20 10 80 90, exact

R 包:stats

stats::fisher.test(tab)

与 Stata 有差异 固定流程;请明确调整示例列名。R报告条件极大似然优势比;Stata还报告样本交叉乘积指标。

队列表的Woolf优势比区间

Stata

csi 20 10 80 90, or woolf

R 包:stats

{ odds <- a * d / (b * c); se <- sqrt(1 / a + 1 / b + 1 / c + 1 / d); c(odds_ratio = odds, lower = exp(log(odds) - qnorm(.975) * se), upper = exp(log(odds) + qnorm(.975) * se)) }

与 Stata 有差异 固定流程;请明确调整示例列名。Woolf近似要求所有单元格计数为正。

dstdize

分层发生率的直接标准化

Stata

dstdize deaths population age, by(group) base(1)

R 包:base

sum(data$deaths / data$population * standard / sum(standard))

固定流程;请明确调整示例列名。固定单总体计算;标准权重须代表目标参考总体。

ir

发生率比和发生率差

Stata

ir cases exposed time

R 包:base

c(rate_exposed = 20 / 100, rate_unexposed = 10 / 200, incidence_rate_ratio = (20 / 100) / (10 / 200), rate_difference = 20 / 100 - 10 / 200)

与 Stata 有差异 固定流程;请明确调整示例列名。分母为人时,结果是发生率而非风险。

两组Poisson发生率的精确比较

Stata

ir cases exposed time, exact

R 包:stats

stats::poisson.test(c(20, 10), T = c(100, 200))

与 Stata 有差异 固定流程;请明确调整示例列名。Stata ir和iri默认mid-p,本例明确请求精确推断。

iri

发生率比和发生率差

Stata

iri 20 10 100 200

R 包:base

c(rate_exposed = 20 / 100, rate_unexposed = 10 / 200, incidence_rate_ratio = (20 / 100) / (10 / 200), rate_difference = 20 / 100 - 10 / 200)

与 Stata 有差异 固定流程;请明确调整示例列名。分母为人时,结果是发生率而非风险。

两组Poisson发生率的精确比较

Stata

iri 20 10 100 200, exact

R 包:stats

stats::poisson.test(c(20, 10), T = c(100, 200))

与 Stata 有差异 固定流程;请明确调整示例列名。Stata ir和iri默认mid-p,本例明确请求精确推断。

istdize

间接标准化及标准化死亡比

Stata

istdize deaths population age using reference, by(group)

R 包:base

{ expected <- sum(data$population * reference_rate); observed <- sum(data$deaths); c(observed = observed, expected = expected, SMR = observed / expected) }

固定流程;请明确调整示例列名。仅提供点估计;参考分层和人时单位必须匹配。

mcc

根据不一致配对计算匹配优势比

Stata

mcc exposed_case exposed_control

R 包:base

c(matched_odds_ratio = tab[1, 2] / tab[2, 1], discordant_pairs = tab[1, 2] + tab[2, 1])

与 Stata 有差异 固定流程;请明确调整示例列名。一致配对不提供匹配优势比信息。

配对二元暴露的McNemar比较

Stata

mcc exposed_case exposed_control

R 包:stats

stats::mcnemar.test(tab, correct = FALSE)

与 Stata 有差异 固定流程;请明确调整示例列名。使用未修正的渐近统计量;精确或连续性修正方法不同。

mcci

根据不一致配对计算匹配优势比

Stata

mcci 30 12 4 54

R 包:base

c(matched_odds_ratio = tab[1, 2] / tab[2, 1], discordant_pairs = tab[1, 2] + tab[2, 1])

与 Stata 有差异 固定流程;请明确调整示例列名。一致配对不提供匹配优势比信息。

配对二元暴露的McNemar比较

Stata

mcci 30 12 4 54

R 包:stats

stats::mcnemar.test(tab, correct = FALSE)

与 Stata 有差异 固定流程;请明确调整示例列名。使用未修正的渐近统计量;精确或连续性修正方法不同。

mhodds

Mantel-Haenszel共同优势比

Stata

mhodds case exposed stratum

R 包:stats

stats::mantelhaen.test(tabs, correct = FALSE)

与 Stata 有差异 固定流程;请明确调整示例列名。表格方向决定优势比方向;假设各层共同效应。

tabodds

按暴露类别列出疾病优势

Stata

tabodds case exposed

R 包:stats

{ out <- stats::aggregate(case ~ exposed, data = data, function(v) c(cases = sum(v), noncases = sum(1 - v))); data.frame(exposed = out$exposed, odds = out$case[, 1] / out$case[, 2]) }

固定流程;请明确调整示例列名。仅计算类别优势,不包含调整后的趋势检验。