2015-03-16 5 views
0

У меня есть кадр данных с большим количеством переменных, представленных в виде столбцов, которые меняются со временем как индекс для них. Я хотел бы получить наборы очень ковариантных переменных.Извлечение наборов переменных covarying

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

Две функции, которые должны давать одинаковые результаты,

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), но это, кажется, теряет имена переменных.

Я пытаюсь извлечь множество переменных, которые коварируют до порога из большого блока данных. Я бы ожидал, что мне не хватает простых встроенных функций. Любые советы о том, как это можно сделать?

Редактировать: Я понял, что Спирмен был бы абсолютно неправильной функцией для этого, поскольку он также оценивал бы ценности, а не только временные рамки.

ответ

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

Отлично! Большое спасибо! – puslet88