[英]Pearson correlation and significance of the correlation
我有一個6行14列的數據框。 我通過以下方式計算皮爾遜相關性:
#read data
data1 <- read.csv("test.csv")
#calculate correlation
pearson_coef <- cor(data1[sapply(data1, is.numeric)])
而且我得到正確的相關系數。 現在,我想獲得相關性的顯着性水平。 所以我用了:
significance <- cor.test(data1)
但是我得到這個錯誤:
Error in cor.test.default(data1) :
argument "y" is missing, with no default
我不明白是什么問題。 你可以幫幫我嗎?
此外,我想知道是否有可能獲得帶有Pearson相關系數和相關顯着性水平的輸出(唯一的數據幀)?
對不起,這個問題!
stats::cor.test
接受兩個輸入x
和y
,它們是相同長度的數字向量 -請參見文檔?cor.test
長和短,您不能將cor.test
data.frame
。
要獲得所需的行為,您可以使用psych
包及其corr.test()
函數-嘗試以下操作:
# install.packages("psych")
library(psych)
corr.test(data1[sapply(data1, is.numeric)])
這將返回相關矩陣,樣本大小和p值矩陣。 根據您的示例,您可以使用以下代碼僅提取p值並將它們分配給significance
:
significance <- corr.test(data1[sapply(data1, is.numeric)])$p
psych::corr.test
的文檔:
“對於對稱矩陣,原始概率報告在對角線以下,並且相關性已針對對角線上方的多個比較進行了調整。如果x和ys不同,則默認值為調整多個測試的概率。”
您可以像這樣...通過使用adjust = "none"
關閉p值調整...
corr.test(data1[sapply(data1, is.numeric)], adjust = "none")
...但是,在解釋此類結果時,請務必謹慎。 有關調整的p值的更多信息,請參見?p.adjust
。
cor.test
有一個非常特定的輸入法。 假設您在數據x
和y
有兩個變量:
cor.test(~ x + y, data)
會得到你想要的東西。
沒有可重現的示例,這會有些麻煩。 我將以虹膜數據集為例。 您的cor.test()
調用無法正常運行的原因是,您需要指定要比較的變量。 查看?cor.test
了解更多詳細信息。
但是,如果您想通過數據dplyr
解決這個問題,我建議您使用dplyr
軟件包。 首先,您需要了解如何從cor.test()
對象提取值。 運行關聯:
iris.cor <- cor.test(iris$Petal.Width, iris$Petal.Length)
然后看一下數據框的結構:
str(iris.cor)
請注意,您可以像這樣從cor.test()對象提取值:
iris.cor$estimate
iris.cor$p.value
現在,如果要將這些值包含在數據框中,則有幾種方法可以做到這一點。 我更喜歡dplyr
解決方案,但是有很多方法可以給這只貓蒙皮。
library(dplyr)
iris %>%
summarise(coef=cor.test(Petal.Width, Petal.Length)$estimate,
pval=cor.test(Petal.Width, Petal.Length)$p.value)
這具有易於添加cor.test()
對象的其他元素或添加分組變量的優點:
iris %>%
group_by(Species) %>%
summarise(coef=cor.test(Petal.Width, Petal.Length)$estimate,
pval=cor.test(Petal.Width, Petal.Length)$p.value)
歸根結底,R總是有幾種處理方法。 這是一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.