Stata作为一款功能强大的统计分析软件,在聚类分析领域提供了丰富且便捷的命令,支持从简单到复杂的多种聚类方法,帮助研究者从数据中发现隐藏的群体结构,聚类分析的核心目标是根据样本或变量的相似性将其划分为不同的类别,使得同一类别内的个体相似度高,不同类别间的个体相似度低,Stata中常用的聚类方法包括系统聚类(层次聚类)、K均值聚类、两步聚类等,每种方法都有其适用场景和命令实现。

系统聚类命令
系统聚类(hierarchical clustering)是通过计算样本或变量间的距离,逐步合并或分裂类别的层次化方法,Stata中实现系统聚类的核心命令是cluster singlelinkage
、cluster completelinkage
、cluster averagelinkage
、cluster wardlinkage
等,分别对应不同的链接方法(如最短距离、最长距离、平均距离、Ward法),使用前需先计算距离矩阵,常用cluster dissimilarity
或cluster measure
命令定义距离度量(如欧氏距离、曼哈顿距离等)。
以欧氏距离的系统聚类为例,基本步骤如下:
- 数据准备:确保数据为数值型且无缺失值,可通过
encode
将分类变量转换为虚拟变量。 - 计算距离:
cluster dissimilarity varlist, measure(Euclidean) name(distmat)
,其中varlist
用于聚类的变量列表,measure()
指定距离类型,name()
保存距离矩阵。 - 执行聚类:
cluster wardslinkage distmat, name(hclust)
选择Ward法链接,name()
保存聚类结果。 - 生成聚类树:
cluster dendrogram hclust
,通过horizontal
选项横向展示树状图,帮助确定类别数。 - 切割树状图:
cluster cuttree hclust, k(3)
将数据分为3类,生成新变量_cluster
标识类别。
系统聚类的优势是无需预设类别数,结果直观,但计算量大,不适合大规模数据。
K均值聚类命令
K均值聚类(K-means clustering)是一种非层次化方法,通过迭代将样本分配到预设数量的类别中,使得类内离差平方和最小,Stata中实现K均值聚类的核心命令是cluster kmeans
,适用于大规模数据和数值型变量。

基本步骤如下:
- 数据标准化:
egen stdvar = std(varlist)
对变量进行标准化,消除量纲影响。 - 执行聚类:
cluster kmeans varlist, k(4) name(kmeans4)
,k()
指定类别数(如4类),name()
保存结果。 - 查看结果:
cluster list kmeans4
显示各类别中心,tabulate _cluster
输出各类别样本量。 - 评估聚类效果:
cluster stop kmeans4, measure(R2)
计算R²统计量,值越大表示聚类效果越好。
K均值聚类计算效率高,但需提前指定类别数,且对初始中心敏感,可通过cluster kmeans
的start(kpp)
选项使用k-means++算法优化初始中心。
两步聚类命令
两步聚类(Two-step clustering)适用于同时包含数值型和分类变量的数据,自动确定类别数,基于贝叶斯信息准则(BIC)选择最优模型,Stata中通过cluster twostep
命令实现。
基本步骤如下:

- 定义变量类型:
cluster varlist, measure(interval categorical)
,interval
指定数值变量,categorical
指定分类变量。 - 执行聚类:
cluster twostep varlist, measure(interval categorical) clusters(5) options
,clusters()
可设定最大类别数,或自动选择最优类别数。 - 输出结果:
cluster list
显示各类别特征,predict
生成类别隶属概率。
两步聚类的优势是处理混合数据能力强,自动确定类别数,但对异常值敏感,需通过cluster twostep
的outlier()
选项设置异常值处理方式。
聚类结果可视化与评估
聚类后需通过可视化直观展示结果,Stata提供了多种绘图命令:
- 散点图:
scatter var1 var2 if _cluster==1 || scatter var1 var2 if _cluster==2
,用不同颜色区分类别。 - 轮廓图:需通过
cluster silhouette
命令计算轮廓系数,绘制轮廓图评估类内紧密度。 - 雷达图:使用
graph bar
或radar
包(需安装)展示各类别变量均值。
评估聚类效果的指标包括:轮廓系数(值越接近1越好)、Calinski-Harabasz指数(类间离散度与类内离散度之比)、Davies-Bouldin指数(值越小越好)。
注意事项
- 数据预处理:缺失值需通过
misstable
或mi
命令处理,分类变量需适当编码。 - 变量选择:根据研究目的选择相关变量,避免无关变量干扰聚类结果。
- 类别数确定:可通过肘部法(WSS随类别数变化)、轮廓系数或BIC准则综合判断。
- 稳健性检验:更换聚类方法或距离度量,验证结果一致性。
相关问答FAQs
Q1: 如何确定系统聚类中的最佳类别数?
A1: 确定系统聚类最佳类别数可通过以下方法:(1)观察树状图,选择垂直线最长的位置切割,此时类别间距离最大;(2)计算不同类别数对应的轮廓系数,选择系数最大的类别数;(3)使用cluster stop
命令计算伪F统计量(PSF)和伪t²统计量(PST2),PSF峰值和PST2谷值对应的类别数较优。cluster stop hclust, measure(R2) rsquare
可输出R²随类别数的变化,结合“肘部”判断。
Q2: K均值聚类对初始中心敏感,如何优化初始中心的选择?
A2: K均值聚类的初始中心影响结果稳定性,Stata可通过以下方式优化:(1)使用cluster kmeans
的start(kpp)
选项,采用k-means++算法根据概率选择初始中心,远离已有中心;(2)多次运行cluster kmeans
并比较结果,选择类内离差平方和最小的解,通过cluster kmeans, repeat(10)
重复10次;(3)结合层次聚类结果作为初始中心,先通过cluster wardslinkage
生成初始类别,再用cluster kmeans
的start(cluster)
选项指定初始中心,这些方法可减少局部最优解的风险,提高聚类结果的稳健性。