使用PerformanceAnalytics的chart.Correlation做斯皮尔曼相关如何消结相关p值警告
问题原因
你添加的exact=FALSE参数没有生效的核心原因是:PerformanceAnalytics包的chart.Correlation()函数本身的形参列表中不包含exact参数,你传入的该参数无法被自动传递给函数底层调用的cor.test(),因此没法关闭对应的警告。
这个警告本身不是报错,只是提示你的数据存在相同秩(结),无法计算精确p值,输出的p值为近似结果,不会影响相关系数计算和图表生成。
可行的解决方法
- 方法1:临时屏蔽警告
如果你不需要纠结p值的计算逻辑,仅需要正常生成图表,直接用suppressWarnings()包裹绘图代码即可:suppressWarnings(chart.Correlation(Experts, histogram=TRUE, pch=19, method="spearman")) - 方法2:换用支持自定义参数的绘图工具
你已经用Hmisc::rcorr()计算好了相关系数和p值,rcorr本身处理有结数据时不会触发该警告,可以换用corrplot包来绘制相关图,灵活度更高:library(corrplot) # 可自定义配色、显著性标记规则等 corrplot(res2$r, p.mat = res2$P, sig.level = 0.05, insig = "blank", method = "color", addCoef.col = "black") - 方法3:修改
chart.Correlation的底层逻辑
如果必须使用chart.Correlation的绘图样式,你可以导出该函数的源码,找到内部调用cor.test的代码行,手动添加exact=FALSE参数,将修改后的函数重命名为自定义函数调用即可。
内容的提问来源于stack exchange,提问作者Manon Obdeijn
相关产品推荐
相关产品推荐

