2015-03-16 4 views
0

J'ai une trame de données avec un grand nombre de variables représentées comme des colonnes qui varient avec le temps en tant qu'index pour elles. Je voudrais récupérer des ensembles de variables hautement covarying.Récupération d'ensembles de variables de covariation

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)) 

Deux fonctions qui devraient donner des résultats identiques sont,

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") 

Il serait possible de filtrer les résultats avec un (X_results > 0.6) simple, mais cela semble perdre les noms des variables. J'essaye d'extraire les ensembles de variables qui covarient à un seuil à partir d'une grande base de données. Je m'attendrais à ce qu'il me manque quelques fonctions intégrées simples. Des conseils sur la façon dont cela pourrait être fait? Edit: Je me suis rendu compte que Spearman serait une fonction absolument fausse pour cela, car elle classerait les valeurs aussi, pas seulement le laps de temps.

Répondre

1

Vous pouvez faire quelque chose comme:

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 

pour obtenir une matrice d'indices des cellules répondant à vos besoins. Pour rendre ceci un peu plus lisible, vous pourriez vouloir faire

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" 
+0

Parfait! Merci beaucoup! – puslet88