You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R语言中基于单个变量查找数据集中相似组的最优方法

识别年份间的相似组(基于多变量特征)

针对你的需求,以下是用R实现的标准化流程,可直接适配500个变量的大规模数据集:

1. 数据格式转换(长转宽)

首先需要将长格式数据转换为宽格式:每行对应一个年份,每列对应一个特征变量(比如你的500个变量,或示例中的多个Timings观测)。

示例代码:

# 为每个年份的观测添加索引
gfg_data$obs_id <- ave(gfg_data$year, gfg_data$year, FUN = seq_along)

# 转换为宽格式
wide_data <- reshape(gfg_data, idvar = "year", timevar = "obs_id", direction = "wide")
colnames(wide_data) <- c("year", paste0("Timing_", 1:(ncol(wide_data)-1)))

2. 变量标准化(推荐)

如果变量量纲差异较大(比如有的是数值、有的是百分比),必须先标准化,避免量纲干扰相似度计算:

scaled_data <- scale(wide_data[, -1])

3. 计算相似度/距离矩阵

使用欧氏距离(连续变量最常用)计算年份间的特征距离:

dist_matrix <- dist(scaled_data, method = "euclidean")

若变量是二元类型,可替换为method = "jaccard"

4. 聚类分组

方法一:层次聚类(适合小样本,可视化直观)

# 用ward.D2方法构建聚类树(最小化组内方差)
hc <- hclust(dist_matrix, method = "ward.D2")

# 绘制聚类树,查看年份间的相似关系
plot(hc, labels = wide_data$year, main = "年份聚类树(基于多变量特征)")

# 切割聚类树得到分组(示例分成2组)
groups <- cutree(hc, k = 2)
# 查看分组结果
cbind(year = wide_data$year, group = groups)

方法二:K-Means聚类(适合大样本,计算高效)

针对500个变量的大规模数据,K-Means速度更快:

# 指定聚类数k=2,nstart=20避免局部最优
km <- kmeans(scaled_data, centers = 2, nstart = 20)
# 查看分组结果
cbind(year = wide_data$year, group = km$cluster)

方法三:PCA降维+聚类(超大规模数据优化)

当变量过多时,先通过PCA降维减少计算量,再聚类:

# PCA降维,保留90%解释方差的主成分
pca <- prcomp(scaled_data, scale. = FALSE)
cum_var <- cumsum(pca$sdev^2 / sum(pca$sdev^2))
n_comp <- which(cum_var >= 0.9)[1]
pca_data <- pca$x[, 1:n_comp]

# 降维后执行层次聚类
hc_pca <- hclust(dist(pca_data), method = "ward.D2")
plot(hc_pca, labels = wide_data$year, main = "PCA降维后的年份聚类树")
groups_pca <- cutree(hc_pca, k = 2)

关键说明

  • 聚类数k的选择:可通过观察聚类树的高度拐点,或计算轮廓系数(silhouette score)确定最优分组数。
  • 距离与聚类方法:可根据变量类型调整距离算法,聚类方法也可尝试complete、average等,对比结果选择最贴合业务逻辑的分组。

内容的提问来源于stack exchange,提问作者EV_Mustang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 09:01:15