0

インデックスとして時間とともに変化する列として表される多数の変数を含むデータ フレームがあります。高度に共変する変数のセットを取得したいと思います。

data <- data.frame(time_series=c(1,2,3), 
                           score1=c(0.5, 0.4, 0.6), 
                           score2=c(0.3, 0.2, 0.1), 
                           score3=c(0.1, 0.4, 0.5), 
                           score4=c(0.5, 0.2, 0.4), 
                           score5=c(0.1, 0.1, 0.2))

同じ結果が得られるはずの 2 つの関数は、次のとおりです。

library(stats)
#autocorrelation function with lag 0 over a data frame
acf_results <- acf(data[2:length(names(data))], plot = FALSE, lag.max = 0)

#simple Pearson correlation function.
cor_results <- cor(data[2:length(names(data))], method = "pearson")

単純な で結果をフィルタリングすることは可能(X_results > 0.6)ですが、これでは変数の名前が失われるようです。

大きなデータフレームからしきい値に共変する変数のセットを抽出しようとしています。いくつかの単純な組み込み関数が欠けていると思います。これを行う方法について何かアドバイスはありますか?

編集: Spearman は、時間枠だけでなく値もランク付けするため、これには絶対に間違った機能であることに気付きました。

4

1 に答える 1

1

次のようなことができます:

cor_results <- cor(data[2:length(names(data))], method = "spearman")
x <- which(cor_results > 0.6, arr.ind=TRUE)
x
#        row col
# score1   1   1
# score5   5   1
# score2   2   2
# score3   3   3
# score5   5   3
# score4   4   4
# score1   1   5
# score3   3   5
# score5   5   5

要件を満たすセルのインデックスのマトリックスを取得します。これをもう少し読みやすくするために、あなたがしたいかもしれません

x[] <- colnames(cor_results)[x]
rownames(x) <- NULL
x
      row      col     
# [1,] "score1" "score1"
# [2,] "score5" "score1"
# [3,] "score2" "score2"
# [4,] "score3" "score3"
# [5,] "score5" "score3"
# [6,] "score4" "score4"
# [7,] "score1" "score5"
# [8,] "score3" "score5"
# [9,] "score5" "score5"
于 2015-03-16T16:04:37.237 に答える