Корреляция и значимость, если более 30 пар используют R и ddply

Часть решения моей проблемы я нашел здесь: Как рассчитать корреляцию в R

set.seed(123)
X <- data.frame(ID = rep(1:2, each=5), a = sample(1:10), b = sample(1:10))
ddply(X, .(ID), summarize, cor_a_b = cor(a,b))

В дополнение к cor (который вычисляет r Пирсона) я вычисляю cor.test (для p-значения). Но это не работает в случае «недостаточно конечных наблюдений», поэтому, когда некоторые идентификаторы являются соло, что в моем случае довольно часто.

Поэтому мне нужно вычислить r, только если имеется более 30 или около того пар данных, если их меньше, я хочу NA.

Вторая проблема заключается в том, что подробный вывод cor.test завышает результирующий фрейм данных, даже если единственное, что мне нужно, это p-значение. То есть, если p на самом деле есть то, что я понимаю. Это значение r?

Я знаю только t-критерий, чтобы вычислить значимость r.

{Формула значения t-теста: t = (r·(n-2)^0.5)/(1-r^2)^0.5) - но t пока не является значением, иначе я бы попытался внедрить формулу в оператор ddply}


person Thomas Langkamp    schedule 15.03.2012    source источник


Ответы (1)


попробуй это:

> d <- data.frame(id = rep(1:3, c(5, 1, 10)), a = rnorm(16), b = rnorm(16))
> ddply(d, .(id), summarize, cor_a_b = if(length(id) < 3) {NA} else {cor.test(a, b)$p.value})
  id   cor_a_b
1  1 0.4393595
2  2        NA
3  3 0.5602855
person kohske    schedule 15.03.2012
comment
Вау! Очень быстро, очень хороший ответ! Работает как шарм. Спасибо :) - person Thomas Langkamp; 15.03.2012