0

これは私の問題です。 私は2000株の1日当たりのリターンデータを持っており、それ以下はその小さなサンプルです (s1からs8、day1からday15)類似のデータをグループ化してグループ内相関を最大化し、グループ間相関を最小化する

データを「df」と呼びます。

> df[1:15,1:8] 
      s1  s2   s3   s4  s5  s6  s7  s8 
1 -0.026410 -0.001030 -0.0027660 0.0126500 -0.030110 0.001476 -0.008271 -0.005299 
2 -0.018990 -0.013680 -0.0092050 -0.0008402 -0.002739 -0.014170 -0.006091 -0.011920 
3 0.004874 0.024140 -0.0002107 -0.0084770 -0.006825 -0.001448 -0.002724 -0.003132 
4 0.019300 -0.004649 0.0223400 0.0080200 -0.008197 -0.015270 0.004064 -0.008149 
5 0.010350 -0.010650 0.0087780 0.0059960 -0.001390 -0.006454 0.018990 0.002822 
6 0.028650 0.010490 0.0157200 -0.0004123 0.019750 -0.005902 0.004261 0.019110 
7 0.004203 -0.002682 -0.0099840 -0.0070060 -0.025670 -0.014550 -0.016700 -0.011580 
8 -0.042170 -0.019490 -0.0023140 -0.0083030 -0.018170 0.021160 -0.006864 -0.009438 
9 0.017250 0.026600 0.0031630 -0.0069090 0.035990 0.008429 0.001500 -0.011830 
10 -0.037400 -0.022370 0.0088460 0.0012690 -0.050820 -0.025300 -0.028040 -0.023790 
11 -0.091140 -0.018830 0.0052160 -0.0403000 0.001410 -0.007050 -0.024340 -0.013110 
12 -0.051620 0.004791 0.0336000 -0.0094320 -0.018320 -0.019490 -0.044080 -0.024020 
13 0.007711 0.002158 -0.0177400 0.0090470 -0.004346 -0.001562 -0.096030 0.015840 
14 0.041440 -0.001072 -0.0168400 0.0180300 -0.012980 -0.015280 0.059780 0.014730 
15 -0.042620 -0.025560 -0.0180200 -0.0115200 0.033320 -0.015150 -0.014580 -0.012710 

グループ内の相関が最大化され、グループ間の相関が最小になるように、私はグループ化する方法が必要です。 二つのグループ

したがって、例えば、私ができるグループにそれらをランダムに以下のように: (S1、S2、S3、S4)および(S5、S6、S7、S8) 問題は、いくつかの株式は相互に関連している可能性があり、そうでないかもしれない。

だから私のソリューションは、にした:降順に(平ら)相関リストを溶融し、相関係数と重複して行を削除

cor_df <- cor(df) 

(ピアソンのメソッドが正常に動作しますと仮定して)相関行列を取得

= 1(使用変形ライブラリ)

cor_df_melt <- melt(cor_df) 
names(cor_df_melt)[1] <- "x1" 
names(cor_df_melt)[2] <- "x2" 
names(cor_df_melt)[3] <- "corr" 
cor_df_ordered <- cor_df_melt[order(-cor_df_sample_melt["corr"]),] 

そしてIはcorrelatと重複(偶数のもの)と行を除去し、平坦化行列の番号が付け次のようにイオン係数= 1

cor_df_numbered <- cbind(row=c(1:nrow(cor_df_ordered)),cor_df_ordered) 
cor_df_ready <- cor_df_numbered[cor_df_numbered$row%%2==0&cor_df_numbered$corr%%2!=1,2:4] 

この後、降順に各対についてうまく順序付けられた相関係数と私のデータフレームが準備ができていた:

> cor_df_ready 
    x1 x2  corr 
63 s7 s8 0.49223783 
57 s1 s8 0.42518667 
50 s2 s7 0.42369762 
49 s1 s7 0.40824283 
58 s2 s8 0.40395569 
42 s2 s6 0.40394894 
54 s6 s7 0.39408677 
62 s6 s8 0.38536734 
34 s2 s5 0.36882709 
53 s5 s7 0.36066870 
45 s5 s6 0.35734278 
59 s3 s8 0.34295713 
51 s3 s7 0.34163733 
61 s5 s8 0.33264868 
9 s1 s2 0.32812763 
41 s1 s6 0.31221715 
18 s2 s3 0.30692909 
43 s3 s6 0.29390325 
33 s1 s5 0.28845243 
35 s3 s5 0.27859972 
17 s1 s3 0.25039209 
52 s4 s7 0.12989487 
60 s4 s8 0.12095196 
25 s1 s4 0.10902471 
26 s2 s4 0.09471694 
44 s4 s6 0.08039435 
36 s4 s5 0.06957264 
27 s3 s4 0.06027389 

(ところで私は考えている理由の行数このように、私の直感は、最も高い相関係数0.49223783(s7、s8)を持つトップペアのために同じグループに属していなければなりませんでした。

は、だから私のcor_df_readyデータフレームから、私が含まれている「S7」ですべてのペアを選んだと(S7、S8、S2、S1)リストの上部に表示される4つの銘柄を抽出し、それらをグループ1

の名前

その後、(s7、s8、s2、s1)を含むすべての行をmy cor_df_readyから除外し、プロセスを繰り返して2番目のグループ(s3、s4、s5、s6)を作り出しました。

この例では、最後のセットが1つしか残っていないため、このプロセスを繰り返す必要はありませんでした。

そして、私は、各グループの相関行列を持って、すべての相関係数の和追加:私は各グループ内の各列の平均値を得、次いで

group1_cor <- cor(group1) 
group2_cor <- cor(group2) 

cor_sum <- sum(group1_cor) + sum(group2_cor) 

を、相関行列の和を計算します2つのグループ手段のために、それをcor_sum_meanと名付けました。cor_sum_mean/cor_sum

直感た、グループ間の最小相関もcor_sum_mean最小にするcor_sumを最大にするグループ内の最大相関:

最後には、私はのために計算しました。

可能な限り大きなcor_sum(グループ内相関)とできるだけ小さなcor_sum_mean(グループ内相関)を取得したいと考えています。全体のデータのための私の方法を使用して

は、私が10個のグループに2000株を分割し、どのような私が得たことは、私は私がダウン0.000542(あるいは小さい)にcor_sum_mean/cor_sumを得ることができます知っている

#cor_sum = 131923.1 
#cor_sum_mean = 83.1731 
#cor_sum_mean/cor_sum = 0.0006305 

だったが、私は単に立ち往生しています。

私はgoogle、stackoverflow、crossvalidatedを検索しました。私は機械学習/時系列クラスタリング/分類が私が探している答えかもしれないという考えを得ていました。

https://stats.stackexchange.com/questions/9475/time-series-clustering/19042#19042

https://stats.stackexchange.com/questions/3238/time-series-clustering-in-r

....

次の二つ前の投稿質問は役に立つように見えたが、私は唯一の私はそれらを理解するのに苦労を抱えているので、データ科学を学ぶために始めています

誰かが具体的に何を探すか説明したり指示したりできますか?

これは長い質問でした...読んでいただきありがとうございます!

答えて

0

階層的クラスタリングを使用します。

平均リンケージでは、平均相関を最適化します。

関連する問題