我试图弄清楚是否有办法找到一种方法来对对象进行排序,从而最大限度地提高组内相关性并最大限度地减少组间相关性。
例如,让数据帧DF包含12列s1到s12,每列包含100个观测值。假设每个代表股票的回报。
我想找到一种方法将这些数据分为3组4个变量,这将最大化组内相关性并最小化组间相关性。 假设Pearson方法运作良好,
df_cor <- cor(df)
这将给出一个12x12的相关矩阵。
我的直觉是通过使用这个相关矩阵,我应该制作一个代码来只选择能给出最大相关系数总和的唯一对,但我有点迷失。
你们有没有提供关于如何做到的提示?
我的真实数据有2000列,每列有3000个观察值,我必须将它们分成10组。
我是用R做的,但我也可以用python做它。
感谢阅读!
答案 0 :(得分:0)
前段时间我写了一个函数(func_correlation),它接受一个矩阵或数据帧(预测变量)并返回高度相关的对,并考虑了许多参数。希望是你实际要问的。
示例数据,
lst_s = list()
set.seed(1)
for (i in 1:12) {
nam = paste0("s_", i)
lst_s[[nam]] = runif(100)
}
s_matr = do.call(cbind, lst_s)
使用devtools::install_github('mlampros/FeatureSelection'),您可以安装软件包,然后运行
dat = FeatureSelection::func_correlation(s_matr, target = NULL, correlation_thresh = 0.05, use_obs = "everything", correlation_method = "pearson")
# here the *correlation_thresh* is low because I use random data, adjust it to your needs
它返回一个列表( out_list )和一个数据框( out_df )。该列表显示 correlation_thresh 之上的个人预测变量的相关性,
$out_list
$out_list[[1]]
s_1
s_3 0.14450632
s_6 0.10891246
s_7 0.13232308
s_8 0.07818346
s_9 0.06381170
$out_list[[2]]
s_2
s_10 0.1380704
s_11 0.1737746
.........
而数据框显示 correlation_thresh 之上的所有预测变量对,
$out_df
predictor1 predictor2 prob
1 s_3 s_1 0.14450632
2 s_6 s_1 0.10891246
3 s_7 s_1 0.13232308
4 s_8 s_1 0.07818346
5 s_9 s_1 0.06381170
6 s_10 s_2 0.13807039
7 s_11 s_2 0.17377459
8 s_4 s_3 0.10395950
9 s_6 s_3 0.21541706
...............