有没有一种方法可以快速有效地比较3个或更多的相关系数?我知道用于比较两个相关系数的cocor软件包,但我正在寻找一种方法来一次运行所有的两两比较,而不是单独执行每个比较。
这类两两相关系数比较在以下期刊文章中作了说明:
列维,K.J.,1977。涉及与相关性、比例或方差相关的不相等样本大小的两两比较。Br.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-分数,然后计算它们之间的差异(按观测次数加权),最后确定p-值。
下面是一个示例数据集:
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包中的函数生成这些结果,但我希望一次能够在多个成对比较的情况下运行这个测试。
谢谢!
发布于 2019-04-29 15:39:23
我编写了一个函数(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-Multiple-Correlation-Coefficients-in-R
享受吧!
发布于 2018-04-04 18:46:22
您可以创建相关矩阵。以下是一个例子,
# 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.00https://stackoverflow.com/questions/49657646
复制相似问题