在Stata中进行K均值聚类(K-means clustering)可以通过内置的`cluster kmeans`命令实现,该方法适用于将数据按照指定的K个类别进行划分,使同类数据的相似度最大化,不同类数据的差异最大化。以下是详细的操作步骤和示例:
一、K均值聚类的基本原理
K均值聚类的核心是:
1. 预先指定聚类数量K(需根据研究目的或数据特征确定);
2. 随机选择K个初始中心点;
3. 计算每个样本到各中心点的距离(默认欧氏距离),将样本分配到最近的类别;
4. 重新计算每个类别的中心点(均值),重复步骤3-4,直到中心点稳定或达到最大迭代次数。
二、Stata操作步骤
1. 数据准备
确保数据满足以下条件:
- 输入变量为连续型(分类变量需先处理为哑变量);
- 变量已标准化(可选但推荐,避免量纲差异影响聚类结果,如用`egen`命令标准化)。
stata
示例:使用Stata自带的auto数据集
sysuse auto, clear
选择聚类变量(如价格、重量、里程)
keep price weight mpg
(推荐)标准化变量(均值为0,标准差为1)
foreach var of varlist price weight mpg {
egen z_`var' = std(`var') // 生成标准化后的变量z_price、z_weight、z_mpg
}
2. 确定最佳K值(关键步骤)
K值需提前指定,可通过以下方法判断:
-经验法:根据研究目的设定(如按收入分为高、中、低三类,K=3);
-统计指标:通过`cluster kmeans`的`silhouette`选项计算轮廓系数(越接近1越好),或使用肘部法则(elbow method)。
stata
尝试不同K值(如K=2到K=5),计算轮廓系数
forvalues k=2/5 {
cluster kmeans z_price z_weight z_mpg, k(`k') name(km`k') // 执行K均值聚类,结果保存为km2到km5
cluster sil km`k' // 计算轮廓系数,值越大聚类效果越好
}
根据输出结果,选择轮廓系数最高的K值(例如K=3时效果最佳)。
3. 执行K均值聚类
指定最佳K值后,运行聚类命令:
stata
以K=3为例,使用标准化变量进行聚类
cluster kmeans z_price z_weight z_mpg, k(3) name(km3) gen(cluster3) // gen(cluster3)生成聚类结果变量
查看聚类结果
tab cluster3 // 显示每个类别的样本数
输出结果会显示:
- 每个类别的样本量;
- 每个变量在各类别中的均值(可用于解释类别特征)。
4. 结果分析与可视化
通过描述性统计和图形理解聚类特征:
stata
按聚类结果分组,计算原始变量的均值(便于解读)
table cluster3, c(mean price mean weight mean mpg)
可视化聚类结果(以价格和里程为例)
scatter price mpg, by(cluster3) title("K=3时的聚类分布")
通过分组均值和散点图,可以直观看到:
- 类别1可能是“高价、低里程、重重量”的车型;
- 类别2可能是“低价、高里程、轻重量”的车型等。
三、关键参数说明
`cluster kmeans`命令的常用选项:
- `k()`:指定聚类数量(必选);
- `name(name)`:为聚类结果命名,方便后续分析;
- `gen(varname)`:生成存储聚类结果的变量;
- `measure(L2)`:距离计算方法(默认L2为欧氏距离,L1为曼哈顿距离);
- `maxiter()`:最大迭代次数(默认100, convergence未达标时可增大);
- `start(random)`:初始中心点选择方式(默认随机,可选`kmeans++`智能初始化)。
四、注意事项
1.变量标准化:若变量量纲差异大(如价格单位为元,重量单位为磅),必须标准化,否则量纲大的变量会主导聚类结果;
2.K值敏感性:K值不同会导致结果差异,需结合理论和统计指标选择;
3.局部最优解:K均值可能收敛到局部最优,可通过`reps()`选项重复多次(如`reps(10)`),选择最优结果:
stata
cluster kmeans z_price z_weight z_mpg, k(3) reps(10) gen(cluster3) // 重复10次,取最好结果
4.适用场景:适用于大样本、连续变量数据,不适用于分类变量或非线性关系明显的数据(此时可考虑层次聚类)。


雷达卡


京公网安备 11010802022788号







