模型与检验

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

ameans

比较算术、几何与调和均值

Stata

ameans y

R 包:stats

c(arithmetic=mean(data$y),geometric=exp(mean(log(data$y))),harmonic=1/mean(1/data$y))

与 Stata 有差异 对非缺失正值返回三种点估计;Stata还报告相应置信区间。

biprobit

联合拟合相关的二元probit方程

Stata

biprobit y1 y2 x

R 包:VGAM

VGAM::vglm(cbind(y1,y2)~x,family=VGAM::binom2.rho(),data=data)

与 Stata 有差异 两个二元方程共享x并采用固定潜在相关;rho连接参数化不同,但拟合联合概率具有相同模型含义。

centile

估计中位数并自助计算置信区间

Stata

centile y, centile(50)

R 包:boot

{ fit <- boot::boot(data,function(d,i) unname(stats::quantile(d$y[i],0.5,type=6)),R=499); list(median=fit$t0,interval=boot::boot.ci(fit,type="perc")$percent[4:5]) }

点估计对应;此例使用百分位自助区间,而Stata的centile默认使用基于二项分布的顺序统计量区间。

contrast

构造各组与参照类别之间的对比

Stata

contrast r.g

R 包:multcomp

multcomp::glht(fit,linfct=multcomp::mcp(g="Dunnett"))

与 Stata 有差异 返回对比估计与协方差。Stata的contrast默认不调整多重检验;summary(glht)默认采用single-step调整。未调整p值应使用summary(result, test=multcomp::adjusted(“none”))。

cpoisson

拟合右删失泊松计数模型

Stata

cpoisson y x, ul(4)

R 包:VGAM

VGAM::vglm(VGAM::SurvS4(y,status)~x,family=VGAM::cens.poisson(),data=data)

与 Stata 有差异 固定右删失界限为4;精确计数的status为1,已知计数至少为4时为0。删失不能按截断处理。

elasticnet

拟合交叉验证的elasticnet线性预测模型

Stata

elasticnet linear y x z, alpha(0.5)

R 包:glmnet

glmnet::cv.glmnet(as.matrix(data[c("x","z")]),data$y,alpha=0.5,nfolds=10)

预测流程对应:折分、标准化、惩罚网格、损失缩放和lambda选择与Stata默认值不同,系数不保证相同。

esize

估计两个独立组的Cohen标准化均值差

Stata

esize twosample y, by(g) cohensd

R 包:effectsize

effectsize::cohens_d(y~g,data=data,pooled_sd=TRUE)

与 Stata 有差异 使用合并标准差,方向为第一组减第二组;若研究对比方向相反,应改变符号。

esizei

根据组汇总统计量计算合并标准差效应量

Stata

esizei 30 10 2 40 12 3, cohensd

R 包:stats

(10-12)/sqrt(((30-1)*2^2+(40-1)*3^2)/(30+40-2))

固定汇总统计量流程仅返回Cohen d;未计算置信区间或Hedges校正。

icc

估计单向模型单次测量组内相关

Stata

icc y id

R 包:psych

{ wide <- stats::reshape(data,idvar="id",timevar="rater",direction="wide"); psych::ICC(wide[,-1],lmer=FALSE)$results[1,,drop=FALSE] }

与 Stata 有差异 固定平衡设计中每个对象有三次测量。R从宽格式重复测量列开始;ICC1为单向绝对一致性的单次测量形式。

lasso

拟合交叉验证的lasso线性预测模型

Stata

lasso linear y x z

R 包:glmnet

glmnet::cv.glmnet(as.matrix(data[c("x","z")]),data$y,alpha=1,nfolds=10)

预测流程对应:折分、标准化、惩罚网格、损失缩放和lambda选择与Stata默认值不同,系数不保证相同。

manovatest

检验已拟合多变量模型中的因子项

Stata

manovatest g

R 包:stats

summary(fit,test="Pillai")$stats["g",,drop=FALSE]

与 Stata 有差异 先拟合对应MANOVA模型。此R示例提取Pillai统计量;Stata的manovatest报告四种多变量统计量。

nestreg

比较逐步加入的回归变量块

Stata

nestreg: regress y (x) (z)

R 包:stats

{ reduced <- stats::lm(y~x,data=data); full <- stats::lm(y~x+z,data=data); stats::anova(reduced,full) }

与 Stata 有差异 用偏F检验比较这两个嵌套OLS模型;不实现Stata前缀按任意模型块逐步拟合的一般功能。

orthog

按指定顺序对中心化解释变量列正交化

Stata

orthog x z, generate(ox oz)

R 包:stats

{ Q <- qr.Q(qr(cbind(1,as.matrix(data[c("x","z")])))); data[c("ox","oz")] <- Q[,-1,drop=FALSE]*sqrt(nrow(data)); data[c("ox","oz")] }

与 Stata 有差异 无权重QR给出均方为一的正交基;符号可能与Stata改进Gram-Schmidt输出不同。

orthpoly

生成三个正交多项式变量列

Stata

orthpoly x, generate(p1 p2 p3) degree(3)

R 包:stats

data[c("p1","p2","p3")] <- stats::poly(data$x,degree=3)*sqrt(nrow(data))

与 Stata 有差异 把R的标准正交基缩放为均方一;多项式符号与所保存系数的约定可能不同。

predictnl

对预测作非线性变换并计算Delta方法标准误

Stata

predictnl p = invlogit(predict(xb)), se(se)

R 包:stats

{ pred <- stats::predict(fit,type="link",se.fit=TRUE); data$p <- stats::plogis(pred$fit); data$se <- data$p*(1-data$p)*pred$se.fit; data[c("p","se")] }

与 Stata 有差异 在logit广义线性模型后使用;采用导数p*(1-p)和拟合线性指数标准误。

pwcompare

通过Tukey同时置信区间比较全部组对

Stata

pwcompare g, mcompare(tukey)

R 包:stats

stats::TukeyHSD(stats::aov(y~g,data=data))$g

与 Stata 有差异 适用于y对g的单因素等方差模型;R的TukeyHSD不能普遍替代任意模型的调整后边际比较。

pwmean

使用Bonferroni校正的合并方差检验比较组均值

Stata

pwmean y, over(g) mcompare(bonferroni)

R 包:stats

stats::pairwise.t.test(data$y,data$g,p.adjust.method="bonferroni",pool.sd=TRUE)

与 Stata 有差异 采用共同的组内合并方差及Bonferroni调整的成对t检验。返回p值矩阵,不含Stata的成对均值差置信区间。

robvar

使用以中位数为中心的Levene方法检验组间方差相等

Stata

robvar y, by(g)

R 包:car

car::leveneTest(y~factor(g),data=data,center=stats::median)

与 Stata 有差异 对应robvar的W50;Stata另外报告以均值为中心的W0和以10%截尾均值为中心的W10。

runtest

检验阈值二分序列的游程是否随机

Stata

runtest y, threshold(0)

R 包:stats

{ above <- data$y>0; n1 <- sum(above); n0 <- sum(!above); runs <- 1+sum(diff(above)!=0); expected <- 1+2*n1*n0/(n1+n0); variance <- 2*n1*n0*(2*n1*n0-n1-n0)/((n1+n0)^2*(n1+n0-1)); z <- (runs-expected)/sqrt(variance); c(runs=runs,z=z,p.value=2*stats::pnorm(-abs(z))) }

与 Stata 有差异 使用大样本无连续性校正的游程统计量,对应Stata默认约定;使用此流程前需删除缺失值。

slogit

拟合秩一刻板多项logit模型

Stata

slogit y x z, dimension(1) baseoutcome(3)

R 包:VGAM

VGAM::rrvglm(y~x+z,family=VGAM::multinomial(refLevel="3"),data=data,Rank=1)

与 Stata 有差异 采用一维Anderson刻板模型的降秩多项logit形式。类别得分的识别、尺度与符号约定可能不同。

symmi

根据单元格计数直接检验匹配表对称性

Stata

symmi 10 8 \ 3 10

R 包:stats

stats::mcnemar.test(matrix(c(10,8,3,10),2,byrow=TRUE),correct=FALSE)

与 Stata 有差异 对此2乘2表,对称性检验是未作连续性修正的McNemar检验。Stata还报告表格汇总;R返回htest对象。

tnbreg

拟合零截断NB2回归

Stata

tnbreg y x, ll(0)

R 包:VGAM

VGAM::vglm(y~x,family=VGAM::posnegbinomial(),data=data)

与 Stata 有差异 零截断NB2采用固定size参数;VGAM的size等于1/alpha。信息矩阵和优化约定可能不同。

tpoisson

拟合零截断泊松回归

Stata

tpoisson y x, ll(0)

R 包:VGAM

VGAM::vglm(y~x,family=VGAM::pospoisson(),data=data)

与 Stata 有差异 仅对应零截断;拟合值为给定正计数条件下的均值,而对数连接系数参数化的是潜在泊松lambda。

truncreg

拟合在零处左截断的正态回归

Stata

truncreg y x, ll(0)

R 包:VGAM

VGAM::vglm(y~x,family=VGAM::posnormal(),data=data)

与 Stata 有差异 VGAM的posnormal对应仅观察到大于零正态结果的特例;此例不覆盖变动界限或上截断。

ztest

使用已知总体标准差检验均值

Stata

ztest y == 20, sd(3)

R 包:stats

{ z <- (mean(data$y)-20)/(3/sqrt(nrow(data))); c(z=z,p.value=2*stats::pnorm(-abs(z))) }

与 Stata 有差异 数值3假定为已知总体标准差,而非样本估计值。

ztesti

根据已知方差汇总量比较独立均值

Stata

ztesti 30 10 2 40 12 3

R 包:stats

{ z <- (10-12)/sqrt(2^2/30+3^2/40); c(z=z,p.value=2*stats::pnorm(-abs(z))) }

与 Stata 有差异 将给定标准差视为已知,并采用正态参考分布。返回z统计量和双侧p值,不含Stata置信限。