繁体   English   中英

比较 R 中的 3 个或更多相关系数

[英]Comparing 3 or more correlation coefficients in R

有没有办法在 R 中快速有效地比较 3 个或更多相关系数? 我知道用于比较 2 个相关系数的cocor包,但我正在寻找一种方法来一次运行所有成对比较,而不是单独进行每个比较。

以下期刊文章中描述了这种类型的成对相关系数比较:

Levy, KJ 1977。成对比较涉及与相关性、比例或方差相关的不等样本量。 兄弟 J. 数学。 统计。 心理学。 30:137-139。

我想通过使用以下代码为每个成对比较生成 p 值来比较相关系数:

p_Value = (2*(1-pnorm(abs(((0.5*log((1+r1)/(1-r1)))-(0.5*log((1+r2)/(1-r2))))/(((1/(n1-3))+(1/(n2-3)))^0.5)))))
# r1 = first correlation coefficient in the comparison
# r2 = second correlation coefficient in the comparison
# n1 = number of observations that went in to generating r1
# n2 = number of observations that went in to generating r2

上面的代码首先将相关系数转换为z-scores,然后计算它们之间的差值(以观察次数加权),最后确定p-value。

这是一个示例数据集:

Relationship <- c("A", "B", "C")
CorrCoeff <- c(0.985, 0.743, 0.430)
CorrCoeff <- as.data.frame(cbind(Comparison, CorrCoeff))
CorrCoeff$nSamples <- 32
> CorrCoeff
  Relationship CorrCoeff nSamples
1            A     0.985       32
2            B     0.743       32
3            C      0.43       32

我想要的输出是:

> Results
  Pairwise_Comparison      p_Value
1                 A-B 1.543237e-08
2                 A-C 4.352074e-14
3                 B-C    0.0582968

或者,更好的是,我正在寻找的函数可以为相关系数分配分隔字母:

> Separation_Lettering
  Relationship Letter
1            A      a
2            B      b
3            C      b

同样,我可以使用cocor包中的函数生成这些结果,但我希望能够一次在多个成对比较上运行此测试。

谢谢!

您可以创建相关矩阵。 这是一个例子,

# Load data
data("mtcars")
my_data <- mtcars[, c(1,3,4,5,6,7)]
# print the first 6 rows
head(my_data, 6)

上面代码的输出:

                   mpg disp  hp drat    wt  qsec
Mazda RX4         21.0  160 110 3.90 2.620 16.46
Mazda RX4 Wag     21.0  160 110 3.90 2.875 17.02
Datsun 710        22.8  108  93 3.85 2.320 18.61
Hornet 4 Drive    21.4  258 110 3.08 3.215 19.44
Hornet Sportabout 18.7  360 175 3.15 3.440 17.02
Valiant           18.1  225 105 2.76 3.460 20.22

现在通过命令创建相关矩阵:

res <- cor(my_data, method = "pearson", use = "complete.obs")
# or just by using res <- cor(my_data)
round(res,2)

上述程序的输出:

       mpg  disp    hp  drat    wt  qsec
mpg   1.00 -0.85 -0.78  0.68 -0.87  0.42
disp -0.85  1.00  0.79 -0.71  0.89 -0.43  
hp   -0.78  0.79  1.00 -0.45  0.66 -0.71
drat  0.68 -0.71 -0.45  1.00 -0.71  0.09
wt   -0.87  0.89  0.66 -0.71  1.00 -0.17
qsec  0.42 -0.43 -0.71  0.09 -0.17  1.00

我写了一个函数( Comparing_Correlation_Coefficients ),它只使用基本的 R 函数来做到这一点。 它需要 6 个参数(前 3 个是必需的):

Correlation_Coefficients : 包含要分析的相关系数的数值向量

Numbers_of_Observations :一个数字或整数向量,其中包含进入每个相应相关系数的观察数量

Identifiers :包含名称的字符或因子向量,用于标识每个相应的相关系数

Data_Frame :要包含的可选数据框,以便可以为前三个参数提供列名(应为此Data_Frame参数提供这些列来自的数据框)

Alpha = 0.05 :可以测试显着性的 alpha 值(默认值为0.05

Control_for_Experimentwise_Error = TRUE :一个参数,指定该函数是否应该给出保守估计(即,将实验错误率保持在给定的 alpha 值)或自由估计(即,对每个成对比较使用给定的 alpha 值); 默认值TRUE将实验错误率保持在 alpha 并根据成对比较的数量计算比较错误率

以下是此功能的 GitHub 页面链接:

https://github.com/davidblakneymoore/A-Function-for-Comparing-3-or-More-Correlation-Coefficients-in-R

享受!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM