Как вычислить значение P и стандартную ошибку из корреляционного анализа R cor()

У меня есть данные, которые содержат 54 отсчетов для каждого условия (x и y). Я вычислил корреляцию следующим образом:

> dat <- read.table("http://dpaste.com/1064360/plain/",header=TRUE)
> cor(dat$x,dat$y)
[1] 0.2870823

Существует ли собственный способ получения SE корреляции в функциях R cor() выше и p-значение от T-теста?

Как объяснено в этом веб-сайте (стр. 14.6)

Ответ 1

Я думаю, что то, что вы ищете, это просто функция cor.test(), которая вернет все, что вы ищете, за исключением стандартной ошибки корреляции. Однако, как вы можете видеть, формула для этого очень проста, и если вы используете cor.test, у вас есть все необходимые для ее расчета входы.

Используя данные из примера (чтобы вы могли сравнить его с результатами на стр. 14.6):

> cor.test(mydf$X, mydf$Y)

    Pearson product-moment correlation

data:  mydf$X and mydf$Y
t = -5.0867, df = 10, p-value = 0.0004731
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.9568189 -0.5371871
sample estimates:
       cor 
-0.8492663 

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

Для удобства здесь уравнение:

enter image description here

r = оценка корреляции и n - 2 = степени свободы, обе из которых легко доступны в выводе выше. Таким образом, простая функция может быть:

cor.test.plus <- function(x) {
  list(x, 
       Standard.Error = unname(sqrt((1 - x$estimate^2)/x$parameter)))
}

И используйте его следующим образом:

cor.test.plus(cor.test(mydf$X, mydf$Y))

Здесь "mydf" определяется как:

mydf <- structure(list(Neighborhood = c("Fair Oaks", "Strandwood", "Walnut Acres",
  "Discov. Bay", "Belshaw", "Kennedy", "Cassell", "Miner", "Sedgewick", 
  "Sakamoto", "Toyon", "Lietz"), X = c(50L, 11L, 2L, 19L, 26L, 
  73L, 81L, 51L, 11L, 2L, 19L, 25L), Y = c(22.1, 35.9, 57.9, 22.2, 
  42.4, 5.8, 3.6, 21.4, 55.2, 33.3, 32.4, 38.4)), .Names = c("Neighborhood", 
  "X", "Y"), class = "data.frame", row.names = c(NA, -12L))

Ответ 2

Не можете ли вы просто взять тестовую статистику из возвращаемого значения? Разумеется, тестовая статистика - это оценка /se, поэтому вы можете рассчитать, просто разделив оценку на tstat:

Используя mydf в ответе выше:

r = cor.test(mydf$X, mydf$Y)
tstat = r$statistic
estimate = r$estimate
estimate; tstat

       cor 
-0.8492663 
        t 
-5.086732