多变量与心理测量方法
先查看各命令展开的示例,再按需展开其他选项及 R 实现。改写代码前,请阅读适用条件及差异说明。
alpha
不自动反向计分地估计原始Cronbach alpha
Stata
alpha q1 q2 q3, asisR 包:psych
psych::alpha(data[c("q1","q2","q3")],check.keys=FALSE)与 Stata 有差异 asis关闭Stata题项方向自动调整;R中显式指定check.keys=FALSE。
根据量表题项生成均值得分
Stata
alpha q1 q2 q3, generate(score) asisR 包:base
score <- rowMeans(data[c("q1","q2","q3")])与 Stata 有差异 asis关闭Stata题项方向自动调整;R中显式指定check.keys=FALSE。
检查删除各题项后的信度
Stata
alpha q1 q2 q3, item asisR 包:psych
psych::alpha(data[c("q1","q2","q3")],check.keys=FALSE)$alpha.drop与 Stata 有差异 asis关闭Stata题项方向自动调整;R中显式指定check.keys=FALSE。
估计标准化Cronbach alpha
Stata
alpha q1 q2 q3, std asisR 包:psych
psych::alpha(data[c("q1","q2","q3")],check.keys=FALSE)$total$std.alpha与 Stata 有差异 asis关闭Stata题项方向自动调整;R中显式指定check.keys=FALSE。
ca
对列联表进行简单对应分析
Stata
ca g hR 包:MASS
MASS::corresp(unclass(table(data$g,data$h)),nf=2)与 Stata 有差异 MASS返回标准坐标;Stata的ca默认normalize(symmetric),故坐标尺度不同。奇异值和惯量可比,但坐标轴符号可能反向。列联表保留类别名称。
camat
对给定计数矩阵进行对应分析
Stata
camat C, dimensions(2)R 包:MASS
MASS::corresp(C,nf=2)与 Stata 有差异 MASS返回标准对应坐标;Stata默认采用对称归一化。奇异值可比,但坐标缩放和轴符号可能不同。
candisc
估计典型线性判别方向
Stata
candisc x y z w, group(g)R 包:MASS
MASS::lda(g ~ x+y+z+w,data=data,prior=rep(1/3,3))与 Stata 有差异 MASS的lda以等类别先验提供判别方向。这是判别分析流程,不是Stata的candisc全部典型检验及归一化输出。
canon
估计两组变量间的典型相关
Stata
canon (x y) (z w)R 包:stats
stats::cancor(data[c("x","y")],data[c("z","w")])与 Stata 有差异 返回两个变量组的典型相关及系数矩阵。典型变量符号和系数归一化任意;Stata还报告显著性检验。
cluster
对标准化变量进行平均连接层次聚类
Stata
cluster averagelinkage x y z wR 包:stats
stats::hclust(stats::dist(scale(as.matrix(data[c("x","y","z","w")]))),method="average")与 Stata 有差异 对应的Stata调用前需先标准化变量;Ward距离及平方约定需特别核对。
另有 8 个示例及替代实现
对标准化变量进行质心连接层次聚类
Stata
cluster centroidlinkage x y z wR 包:stats
stats::hclust(stats::dist(scale(as.matrix(data[c("x","y","z","w")]))),method="centroid")与 Stata 有差异 对应的Stata调用前需先标准化变量;Ward距离及平方约定需特别核对。
对标准化变量进行完全连接层次聚类
Stata
cluster completelinkage x y z wR 包:stats
stats::hclust(stats::dist(scale(as.matrix(data[c("x","y","z","w")]))),method="complete")与 Stata 有差异 对应的Stata调用前需先标准化变量;Ward距离及平方约定需特别核对。
把层次聚类树切分为三组
Stata
cluster generate group = groups(3)R 包:stats
stats::cutree(fit,k=3)与 Stata 有差异 将已有hclust树切为三组。结果为整数成员向量,聚类标签任意,而Stata生成具名数据变量。
把标准化观测划分为三个k均值聚类
Stata
cluster kmeans x y z w, k(3)R 包:stats
stats::kmeans(scale(as.matrix(data[c("x","y","z","w")])),centers=3,nstart=10)与 Stata 有差异 算法、起点与随机序列不同,聚类编号和局部最优解可能不同。
对标准化变量进行中位连接层次聚类
Stata
cluster medianlinkage x y z wR 包:stats
stats::hclust(stats::dist(scale(as.matrix(data[c("x","y","z","w")]))),method="median")与 Stata 有差异 对应的Stata调用前需先标准化变量;Ward距离及平方约定需特别核对。
对标准化变量进行单连接层次聚类
Stata
cluster singlelinkage x y z wR 包:stats
stats::hclust(stats::dist(scale(as.matrix(data[c("x","y","z","w")]))),method="single")与 Stata 有差异 对应的Stata调用前需先标准化变量;Ward距离及平方约定需特别核对。
对标准化变量进行Ward层次聚类
Stata
cluster wardslinkage x y z wR 包:stats
stats::hclust(stats::dist(scale(as.matrix(data[c("x","y","z","w")]))),method="ward.D2")与 Stata 有差异 对应的Stata调用前需先标准化变量;Ward距离及平方约定需特别核对。
对标准化变量进行加权平均连接层次聚类
Stata
cluster waveragelinkage x y z wR 包:stats
stats::hclust(stats::dist(scale(as.matrix(data[c("x","y","z","w")]))),method="mcquitty")与 Stata 有差异 对应的Stata调用前需先标准化变量;Ward距离及平方约定需特别核对。
clustermat
对预先计算的相异性矩阵聚类
Stata
clustermat completelinkage DR 包:stats
stats::hclust(stats::as.dist(D),method="complete")与 Stata 有差异 对给定不相似矩阵采用完全连接法。距离定义和并列处理影响树;R返回hclust对象,而非Stata具名聚类解。
discrim
使用五个最近邻进行分类
Stata
discrim knn x y z w, group(g) k(5)R 包:class
class::knn(train=as.matrix(data[c("x","y","z","w")]),test=as.matrix(data[c("x","y","z","w")]),cl=data$g,k=5)与 Stata 有差异 按名称选择预测变量并对训练样本分类。class::knn采用不加权多数投票并随机处理并列;Stata默认采用等类别先验,类别不平衡时判别可能不同。预测准确率应在留出数据上评估。
拟合线性判别分析
Stata
discrim lda x y z w, group(g)R 包:MASS
MASS::lda(g ~ x+y+z+w,data=data,prior=rep(1/3,3))与 Stata 有差异 比较结果前需明确类别先验概率与协方差估计约定。
使用留一法线性判别分析分类
Stata
discrim lda x y z w, group(g) lootableR 包:MASS
MASS::lda(g ~ x+y+z+w,data=data,CV=TRUE,prior=rep(1/3,3))Stata的lootable请求留一法分类;MASS的CV=TRUE完成对应预测流程。
在线性判别分析中使用相等先验概率
Stata
discrim lda x y z w, group(g) priors(equal)R 包:MASS
MASS::lda(g ~ x+y+z+w,data=data,prior=rep(1/3,3))与 Stata 有差异 所示代码显式使用等类别先验。MASS的系数归一化及类别顺序可能不同于Stata;须统一先验和协方差估计后比较后验分类。
拟合二次判别分析
Stata
discrim qda x y z w, group(g)R 包:MASS
{ analysis <- droplevels(stats::model.frame(g ~ x + y + z + w, data = data, na.action = stats::na.omit)); groups <- length(unique(analysis$g)); MASS::qda(g ~ x + y + z + w, data = analysis, prior = rep(1 / groups, groups)) }与 Stata 有差异 先对响应及预测变量筛选完整观测并去除未使用的类别,再按剩余类别计算等先验,匹配Stata的discrim qda默认priors(equal)。否则MASS采用样本类别比例。比较后验概率前须统一协方差归一化和类别标签。
estat
报告验证性因子模型拟合指标
Stata
estat gof, stats(all)R 包:lavaan
lavaan::fitMeasures(fit,c("chisq","df","cfi","tli","rmsea","srmr"))与 Stata 有差异 选择六个lavaan SEM拟合指标。须统一模型识别、似然缩放、缺失数据估计及基线模型定义;不包含Stata stats(all)的全部统计量。
另有 4 个示例及替代实现
使用KMO指标评估因子分析适用性
Stata
estat kmoR 包:psych
psych::KMO(stats::cor(X))与 Stata 有差异 从给定相关矩阵计算KMO。R以列表返回总体和各变量测度;须与Stata factor使用相同相关矩阵及缺失处理样本。
检查结构方程模型修正指数
Stata
estat mindicesR 包:lavaan
lavaan::modindices(fit)与 Stata 有差异 返回lavaan对可释放参数的修正指数。须统一模型约束、信息矩阵和缺失数据似然;候选参数集合可能不同于Stata。
检查结构方程模型残差相关
Stata
estat residualsR 包:lavaan
lavaan::lavResiduals(fit,type="raw")与 Stata 有差异 使用观测减模型隐含协方差的原始残差,对应Stata默认原始残差。lavaan还返回按自身尺度标准化的汇总,不能视作相同Stata输出列。
计算量表题项的复相关平方
Stata
estat smcR 包:stats
1-1/diag(solve(stats::cor(X)))与 Stata 有差异 按一减相关逆矩阵对角元素倒数计算平方复相关。要求相关矩阵非奇异,并返回向量而非Stata显示表。
factor
拟合单因子最大似然因子模型
Stata
factor q1 q2 q3 q4 q5 q6, factors(1) mlR 包:stats
stats::factanal(as.matrix(data[c("q1","q2","q3","q4","q5","q6")]),factors=1,rotation="none")与 Stata 有差异 匹配所示ML或主成分提取方法及因子数。载荷符号和旋转不唯一;psych的主成分得分与缩放不必复现Stata的factor后估计。
另有 3 个示例及替代实现
拟合迭代主轴因子模型
Stata
factor q1 q2 q3 q4 q5 q6, factors(2) ipfR 包:psych
psych::fa(as.matrix(data[c("q1","q2","q3","q4","q5","q6")]),nfactors=2,fm="pa",rotate="none")与 Stata 有差异 主轴算法与收敛容差可能不同,不应假定载荷完全相同。
拟合双因子最大似然因子模型
Stata
factor q1 q2 q3 q4 q5 q6, factors(2) mlR 包:stats
stats::factanal(as.matrix(data[c("q1","q2","q3","q4","q5","q6")]),factors=2,rotation="none")与 Stata 有差异 匹配所示ML或主成分提取方法及因子数。载荷符号和旋转不唯一;psych的主成分得分与缩放不必复现Stata的factor后估计。
拟合主成分因子解
Stata
factor q1 q2 q3 q4 q5 q6, factors(2) pcfR 包:psych
psych::principal(as.matrix(data[c("q1","q2","q3","q4","q5","q6")]),nfactors=2,rotate="none")与 Stata 有差异 匹配所示ML或主成分提取方法及因子数。载荷符号和旋转不唯一;psych的主成分得分与缩放不必复现Stata的factor后估计。
factormat
根据相关矩阵拟合最大似然因子模型
Stata
correlate q1 q2 q3 q4 q5 q6
matrix R = r(C)
factormat R, n(300) factors(2) mlR 包:stats
stats::factanal(covmat=R,n.obs=300,factors=2,rotation="none")与 Stata 有差异 固定流程。R为固定相关矩阵对象;样本量用于计算基于似然的拟合统计量。
hotelling
使用Hotelling T平方检验均值向量为零
Stata
hotelling x yR 包:stats
{ n <- nrow(data); k <- 2; m <- colMeans(data[c("x","y")]); T2 <- n*drop(t(m)%*%solve(stats::cov(data[c("x","y")]),m)); F <- (n-k)/(k*(n-1))*T2; c(T2=T2,F=F,p.value=stats::pf(F,k,n-k,lower.tail=FALSE)) }与 Stata 有差异 对这两个变量计算单样本Hotelling T平方及其F变换。假定样本完整且协方差可逆;Stata还显示均值汇总。
kap
估计两名评分者的非加权Cohen kappa
Stata
kap rater1 rater2R 包:psych
psych::cohen.kappa(table(data$rater1,data$rater2))$kappa与 Stata 有差异 从列联表返回未加权Cohen kappa。不含Stata的一致率汇总、标准误和置信区间;须统一缺失及类别处理。
manova
使用Pillai检验多变量组间差异
Stata
manova y z = gR 包:stats
summary(stats::manova(cbind(y,z)~g,data=data),test="Pillai")与 Stata 有差异 Stata显示四种MANOVA统计量;此R示例选择其中指定的一种。
拟合多变量协方差分析
Stata
manova y z = g c.xR 包:stats
stats::manova(cbind(y,z)~g+x,data=data)与 Stata 有差异 拟合所示多变量线性模型。R的summary默认Pillai,Stata显示多个多变量准则;须选择相同准则、假设和因子对比。
另有 3 个示例及替代实现
使用Wilks检验多变量组间差异
Stata
manova y z = gR 包:stats
summary(stats::manova(cbind(y,z)~g,data=data),test="Wilks")与 Stata 有差异 Stata显示四种MANOVA统计量;此R示例选择其中指定的一种。
使用Hotelling-Lawley检验多变量组间差异
Stata
manova y z = gR 包:stats
summary(stats::manova(cbind(y,z)~g,data=data),test="Hotelling-Lawley")与 Stata 有差异 Stata显示四种MANOVA统计量;此R示例选择其中指定的一种。
使用Roy检验多变量组间差异
Stata
manova y z = gR 包:stats
summary(stats::manova(cbind(y,z)~g,data=data),test="Roy")与 Stata 有差异 Stata显示四种MANOVA统计量;此R示例选择其中指定的一种。
mca
通过指示矩阵MCA分析多个分类变量
Stata
mca g h j, method(indicator)R 包:MASS
MASS::mca(data, nf=2)与 Stata 有差异 MASS采用指示矩阵MCA;惯量归一化不同于调整MCA和联合MCA。
mds
拟合经典度量多维尺度分析
Stata
mds x y z w, id(id) dimension(2) noplotR 包:stats
stats::cmdscale(stats::dist(as.matrix(data[c("x","y","z","w")])),k=2,eig=TRUE)与 Stata 有差异 对欧氏距离采用经典度量缩放。Stata的mds默认方法及应力准则可能不同;须统一距离、方法、旋转和反射后比较坐标。
拟合非度量多维尺度分析
Stata
mds x y z w, id(id) method(nonmetric) std noplotR 包:MASS
MASS::isoMDS(stats::dist(scale(as.matrix(data[c("x","y","z","w")]))),k=2,trace=FALSE)与 Stata 有差异 非度量优化、应力定义与初始配置可能不同。
mdsmat
对给定相异性矩阵进行尺度分析
Stata
mdsmat D, dimension(2) noplotR 包:stats
stats::cmdscale(stats::as.dist(D),k=2)与 Stata 有差异 对给定不相似矩阵采用经典度量缩放。须统一Stata的度量方法及特征值处理;坐标旋转和反射任意。
mvreg
拟合多响应多元线性回归
Stata
mvreg y z = x wR 包:stats
stats::lm(cbind(y,z) ~ x+w,data=data)与 Stata 有差异 在共同完整样本上返回多变量lm拟合。Stata的mvreg显示各方程及跨方程汇总;R中须显式提取相应汇总。
mvtest
计算Mardia多变量偏度与峰度检验
Stata
mvtest normality x y z w, stats(skewness kurtosis)R 包:psych
psych::mardia(X,plot=FALSE)与 Stata 有差异 小样本校正可能不同;此例选择Mardia分量,而非Stata默认Doornik-Hansen检验。
pca
拟合相关矩阵主成分分析
Stata
pca x y z wR 包:stats
stats::prcomp(as.matrix(data[c("x","y","z","w")]),center=TRUE,scale.=TRUE)与 Stata 有差异 显式选择相关矩阵或协方差矩阵PCA。成分符号任意;prcomp返回基于奇异值的对象及得分,其缩放不同于Stata显示。
另有 2 个示例及替代实现
保留两个主成分
Stata
pca x y z w, components(2)R 包:stats
stats::prcomp(as.matrix(data[c("x","y","z","w")]),scale.=TRUE,rank.=2)与 Stata 有差异 显式选择相关矩阵或协方差矩阵PCA。成分符号任意;prcomp返回基于奇异值的对象及得分,其缩放不同于Stata显示。
拟合协方差矩阵主成分分析
Stata
pca x y z w, covarianceR 包:stats
stats::prcomp(as.matrix(data[c("x","y","z","w")]),center=TRUE,scale.=FALSE)与 Stata 有差异 显式选择相关矩阵或协方差矩阵PCA。成分符号任意;prcomp返回基于奇异值的对象及得分,其缩放不同于Stata显示。
pcamat
直接根据相关矩阵执行主成分分析
Stata
correlate x y z w
matrix R = r(C)
pcamat R, n(50)R 包:stats
stats::princomp(covmat=R)与 Stata 有差异 固定流程。
predict
预测所有判别类别的后验概率
Stata
predict p1 p2 p3, prR 包:MASS
data[c("p1","p2","p3")] <- stats::predict(fit)$posterior与 Stata 有差异 使用已有判别模型及其类别顺序。返回标签或后验概率列须对应拟合类别;R因子顺序不必等于Stata类别编码顺序。
另有 4 个示例及替代实现
计算前两个主成分得分
Stata
predict pc1 pc2, scoreR 包:stats
data[c("pc1","pc2")] <- stats::predict(fit)[,1:2,drop=FALSE]与 Stata 有差异 从已有PCA模型返回得分。R得分缩放及任意成分符号可能不同于Stata的predict, score;比较数值前须统一标准化。
预测判别分析类别归属
Stata
predict predicted, classificationR 包:MASS
data$predicted <- stats::predict(fit)$class与 Stata 有差异 使用已有判别模型及其类别顺序。返回标签或后验概率列须对应拟合类别;R因子顺序不必等于Stata类别编码顺序。
计算Bartlett方法的因子得分
Stata
predict score1 score2, bartlettR 包:stats
data[c("score1","score2")] <- stats::factanal(as.matrix(data[c("q1","q2","q3","q4","q5","q6")]),factors=2,rotation="none",scores="Bartlett")$scores与 Stata 有差异 使用题项q1-q6的固定测量模型;可以更改输出得分列名。
计算回归方法的因子得分
Stata
predict score1 score2, regressionR 包:stats
data[c("score1","score2")] <- stats::factanal(as.matrix(data[c("q1","q2","q3","q4","q5","q6")]),factors=2,rotation="none",scores="regression")$scores与 Stata 有差异 使用题项q1-q6的固定测量模型;可以更改输出得分列名。
rotate
使用斜交oblimin载荷旋转准则
Stata
rotate, oblique obliminR 包:GPArotation
GPArotation::oblimin(unclass(fit$loadings))与 Stata 有差异 仅旋转给定载荷矩阵。载荷符号、轴序和归一化可能不同于Stata;相关因子解还须比较因子相关矩阵。
使用正交quartimax载荷旋转准则
Stata
rotate, orthogonal quartimaxR 包:GPArotation
GPArotation::quartimax(unclass(fit$loadings))与 Stata 有差异 仅旋转给定载荷矩阵。载荷符号、轴序和归一化可能不同于Stata;相关因子解还须比较因子相关矩阵。
使用promax旋转因子载荷
Stata
rotate, promaxR 包:stats
stats::promax(fit$loadings,m=3)与 Stata 有差异 载荷的符号和排列顺序并不唯一;旋转归一化约定可能不同。
使用varimax旋转因子载荷
Stata
rotate, varimaxR 包:stats
stats::varimax(fit$loadings,normalize=FALSE)与 Stata 有差异 载荷的符号和排列顺序并不唯一;旋转归一化约定可能不同。
rotatemat
旋转外部给定的载荷矩阵
Stata
rotatemat L, varimaxR 包:stats
stats::varimax(L)与 Stata 有差异 对给定矩阵采用varimax。须统一归一化和列序;等价旋转解可能反转列符号。
sem
拟合三因子验证性测量模型
Stata
sem (visual -> x1 x2 x3) (textual -> x4 x5 x6) (speed -> x7 x8 x9), latent(visual textual speed)R 包:lavaan
lavaan::cfa("visual =~ x1+x2+x3; textual =~ x4+x5+x6; speed =~ x7+x8+x9",data=data)与 Stata 有差异 比较估计时需统一潜变量定标约束与均值结构。
另有 1 个示例及替代实现
报告标准化结构方程模型参数
Stata
sem, standardizedR 包:lavaan
lavaan::standardizedSolution(fit)与 Stata 有差异 固定流程。
tetrachoric
使用最大似然估计四分相关
Stata
tetrachoric a bR 包:polycor
polycor::polychor(data$a,data$b,ML=TRUE,std.err=TRUE)与 Stata 有差异 每个二元变量都必须观察到两个水平;推断假设潜在二元正态分布。