Получение наборов ковариационных переменных

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

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

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

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


person puslet88    schedule 16.03.2015    source источник


Ответы (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"
person Miff    schedule 16.03.2015
comment
Идеальный! Большое спасибо! - person puslet88; 16.03.2015