2017-10-19 19 views
0

그래서 이것이 제 문제입니다. 나는 2000 주식의 일일 수익 데이터를 가지고 있으며, 그 아래에 그것의 작은 샘플이있다. (s1 to s8, day1 to 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"]),] 

는 그럼 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 

(BTW 난 몰라 이유 행 번호 그런 사람이 설명 할 수 있을까요?)

여기에서 직감은 가장 높은 상관 계수가 0.49223783 (s7, s8) 인 맨 쌍에 대한 것이 었습니다. 그들은 같은 그룹에 속해야했습니다.

그래서 내 cor_df_ready 데이터 프레임에서, 나는 "S7"포함 모든 쌍을 선택하고 목록의 맨 위에 (S7, S8, S2, S1)에 나타나는 사 개 주식을 추출 그룹 1

그들에게 이름

그런 다음 (s7, s8, s2, s1)을 포함한 모든 행을 내 cor_df_ready에서 제외하고 두 번째 그룹 (s3, s4, s5, s6)이 나오도록 프로세스를 반복했습니다.

이 예제에서 나는 단지 하나의 마지막 세트가 남아 있기 때문에 프로세스를 반복 할 필요가 없었습니다.

그리고, I는 각 그룹에 대한 상관 행렬을 얻었고, 모든 상관 계수의 합 첨가 : I는 각 그룹의 각 행의 평균을 가지고 다음

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

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

을하고, 상관 행렬의 합을 계산 두 개의 그룹을 의미하고 cor_sum_mean이라고 명명했습니다.cor_sum_mean/cor_sum

직감했다, 그룹 간의 최소화 상관 관계도 cor_sum_mean 최소화 할 수 cor_sum을 극대화 할 그룹 내 최대의 상관 관계 :

마지막으로는, 내가 계산.

가능한 한 큰 cor_sum (그룹 내 상관 관계) 및 가능한 작은 cor_sum_mean (그룹 내 상관 관계)을 얻고 싶습니다. 전체 데이터에 대한 내 방법을 사용하여

, 내가 10 개 그룹으로 2000 주식을 나누어 무엇을 내가 가진 것은 내가 얻을 수 있습니다 알고

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

했다 cor_sum_mean/cor_sum 아래 0.000542 (또는 더 작은)하지만, 나는 단지 붙어있다.

나는 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

계층 적 클러스터링을 사용하십시오.

평균 연결을 사용하면 평균 상관 관계를 최적화합니다.