Расчет корреляции с порогом в R - PullRequest
4 голосов
/ 03 октября 2011

Я хотел бы вычислить корреляции в R. Однако у меня много пропущенных значений.Итак, я хотел бы допустить, чтобы в матрице корреляций были только корреляции, которые были рассчитаны как минимум из 10 пар значений.Как продолжить?

Редактировать: обратите внимание, что матрица корреляции генерируется из двух больших матриц X и Y, имеющих одинаковые индивидуумы (строки).

1 Ответ

1 голос
/ 03 октября 2011

Сначала мы сгенерируем некоторые примеры данных:

R> x = matrix(rnorm(100), ncol=5)
##Fill in some NA's
R> x[3:15,1] = NA
R> x[2:10,3] = NA

Затем мы проведем цикл по матрице x, выполняя сравнение для обнаружения NA:

##Create a matrix with where the elements are the
##maximum number of possible comparisons 
m = matrix(nrow(x), ncol=ncol(x),nrow=ncol(x)) 
## This comparison can be made more efficient. 
## We only need to do column i with i+1:ncol(x)

## Each list element
for(i in 1:ncol(x)) {
    detect_na = is.na(x[,i]==x)
    c_sums = colSums(detect_na)
    m[i,] = m[i,] - c_sums
}

Матрица m сейчассодержит номер сравнения для каждой пары столбцов.Теперь преобразуйте матрицу m при подготовке поднабора:

 m = ifelse(m>10, TRUE, NA)

Далее мы рассчитаем корреляцию для всех пар столбцов и подмножеств в соответствии с m:

R> matrix(cor(x, use = "complete.obs")[ m], ncol=ncol(m), nrow=nrow(m))
     [,1]    [,2]     [,3]    [,4]    [,5]
[1,]   NA      NA       NA      NA      NA
[2,]   NA  1.0000 -0.14302 0.35902 -0.3466
[3,]   NA -0.1430  1.00000 0.03949  0.6172
[4,]   NA  0.3590  0.03949 1.00000  0.1606
[5,]   NA -0.3466  0.61720 0.16061  1.0000
...