2013-08-29 81 views
1

我有一個關於時間序列R中的分層分組問題分組目前,我有這個矩陣:時間序列層次/ R中

  A  B  C  F  G  H  I 
[1,] -33.697 8.610 42.31 17.465 24.84 14.210 10.632 
[2,] -4.698 15.993 20.69 6.222 14.47 3.423 11.047 
[3,] -37.458 9.687 47.14 14.659 32.49 12.759 19.726 
[4,] -23.851 16.517 40.37 14.392 25.98 9.438 16.538 
[5,] 3.329 15.629 12.30 3.449 8.85 2.635 6.215 
[6,] -38.071 5.746 43.82 15.932 27.89 14.113 13.772 

僅僅通過檢查,我可以找出是:

  • G = H +我
  • C = F + G
  • A = B - Visual C

有沒有一種方法可以在R中的大時間序列上自動找到這些相加關係(正數和負數)?我曾嘗試使用lm()來找出關係,但是在每個系列上都耗費太多時間。更不用說多次存在共線性問題。

非常感謝!

structure(list(A = c(-33.6970557915047, -4.69841752527282, -37.457728596637, 
-23.8508993089199, 3.32904924079776, -38.0712462896481), B = c(8.60984595282935, 
15.9929901333526, 9.68719404516742, 16.5167794595473, 15.6285679822322, 
5.74573907931335), C = c(42.306901744334, 20.6914076586254, 47.1449226418044, 
40.3676787684672, 12.2995187414344, 43.8169853689615), F = c(17.4649945173878, 
6.22195235290565, 14.6593122615013, 14.3921482057776, 3.44929573708214, 
15.9315551938489), G = c(24.8419072269462, 14.4694553057197, 
32.4856103803031, 25.9755305626895, 8.8502230043523, 27.8854301751126 
), H = c(14.2098777298816, 3.42268325854093, 12.7592747195158, 
9.43778987810947, 2.63517117220908, 14.1129822209477), I = c(10.6320294970647, 
11.0467720471788, 19.7263356607873, 16.5377406845801, 6.21505183214322, 
13.7724479541648)), .Names = c("A", "B", "C", "F", "G", "H", 
"I"), row.names = c(NA, -6L), class = "data.frame") 
+0

你提出的是一種假設生成方法。科學通常會以相反的方式工作:假定一個假設並檢查數據是否支持它。我也看不出G = H + K可能是一種關係,因爲K不存在於您的數據中?另一個需要注意的是,如果您使用dput命令提供數據,我們可以更加輕鬆地爲您提供幫助。 –

+0

@ Dr.Mike謝謝你的提示。我的意思是我編輯的H + I。假設生成方法的原因是我有許多行項目在某天回到某個地方。但是,現在他們是非結構化的,我想看看他們是如何相關的。 – user2728814

回答

0

您可以嘗試層次聚類方法。這不會給你確切的關係和係數,但可以讓你瞭解你應該測試的關係。首先我們準備你的數據。

a<-rbind(c(-33.697,8.610,42.31, 17.465, 24.84, 14.210, 10.632), 
    c(-4.698,15.993,20.69,6.222, 14.47,3.423, 11.047), 
    c(-37.458,9.687, 47.14, 14.659, 32.49, 12.759, 19.726), 
    c(-23.851,16.517,40.37,14.392,25.98,9.438,16.538), 
    c(3.329,15.629,12.30,3.449,8.85,2.635,6.215), 
    c(-38.071,5.746,43.82,15.932,27.89,14.113,13.772)) 
colnames(a)<-c("A", "B", "C", "F", "G", "H", "I") 

然後我們計算您的變量之間的相關性並創建我們然後聚類的距離。

dd <- as.dist((1 - cor(a))/2) 
plot(hclust(dd)) 

這應該給你一個關於不同時間序列之間關係的想法。結果圖如下所示。

The plot of the cluster dendrogram

0

您可以找到MASS::Null線性相關關係。 它們相當於,但不像您通過視覺檢查發現的稀疏。

library(MASS) 
Null(t(d)) # One relation per column 
#    [,1]  [,2]  [,3] 
# [1,] 0.41403998 -0.04178588 0.45582586 
# [2,] -0.41403998 0.04178588 -0.45582586 
# [3,] -0.02626794 -0.52439443 0.49812649 
# [4,] 0.44030792 0.48260856 -0.04230063 
# [5,] 0.62687195 -0.01159430 -0.36153375 
# [6,] -0.18656403 0.49420285 0.31923312 
# [7,] -0.18656403 0.49420285 0.31923312 
as.matrix(d) %*% Null(t(d)) # zero 
1

這也採用迴歸,但它

  • 使用lm.fitlm更快。 (也存在着rcppArmadillo和rcppEigen,你可以嘗試以及fastLm 。)

  • 避免只用獨特的組合複製迴歸。

  • 假定只有三元組需要調查削減計算量(因爲這似乎是在後的情況下)

  • 假定所有係數均爲整數清理輸出

的代碼是:

eps <- .1 
combos <- combn(ncol(DF), 3) 
for(j in 1:ncol(combos)) { 
    ix <- combos[, j] 
    fit <- lm.fit(as.matrix(DF[ix[-1]]), DF[[ix[1]]]) 
    SSE <- sum(resid(fit)^2) 
    if (SSE < eps) { 
     ecoef <- round(c(-1, coef(fit))) 
     names(ecoef)[1] <- names(DF)[ix[1]] 
     print(ecoef) 
    } 
} 

,其與在後數據給出了這樣的:

A B C 
-1 1 -1 
C F G 
-1 1 1 
G H I 
-1 1 1