我的数据包含每个条件(x 和 y)的 54 个样本。我通过以下方式计算了相关性:
> dat <- read.table("http://dpaste.com/1064360/plain/",header=TRUE)
> cor(dat$x,dat$y)
[1] 0.2870823
是否有一种本地方法可以在上述 R 的 cor() 函数中产生相关 SE 以及来自 T 检验的 p 值?
如本网站所述(第 14.6 页)
我认为您正在寻找的只是cor.test()
函数,它将返回您正在寻找的所有内容,除了相关的标准错误。但是,正如您所看到的,该公式非常简单,如果您使用cor.test
,则您拥有计算它所需的所有输入。
使用示例中的数据(因此您可以自己将其与第 14.6 页上的结果进行比较):
> cor.test(mydf$X, mydf$Y)
Pearson's 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
如果您愿意,您还可以创建如下所示的函数来包含相关系数的标准误差。
为方便起见,这是等式:
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))
您不能简单地从返回值中获取测试统计信息吗?当然,测试统计量是估计值/se,因此您可以通过将估计值除以 tstat 来计算 se:
mydf
在上面的答案中使用:
r = cor.test(mydf$X, mydf$Y)
tstat = r$statistic
estimate = r$estimate
estimate; tstat
cor
-0.8492663
t
-5.086732