簡體   English   中英

如何從cor.test()中提取p.value和進行估算?

[英]How to extract the p.value and estimate from cor.test()?

我在for循環中對數據集執行cor.test,但是我不知道如何從測試中提取估計和tau等信息。

在數據集中執行for循環之前,cor.test()函數返回如下:

cor.test(armpit$Corynebacterium.1, armpit$Staphylococcus.1, alterantive="two-sided", method="kendall", exact=FALSE, continuity=TRUE)

返回結果

這是我執行for循環的代碼。 現在,我想從測試中提取估計值和tau。

for (i in 1:8) {
  for (j in 1:8) {
    if (j != i)
    cor.test( as.numeric(unlist(armpit[i])),
        as.numeric(unlist(armpit[j])), alterantive="two-sided",
        method="kendall", exact=FALSE, continuity=TRUE)
   }
}

我已經檢查了類似的問題

類似的問題

然后我將代碼更改為:

estimates = numeric(50)
pvalues = numeric(50)
for (i in 1:8) {
  for (j in 1:8) {
    if (j != i)
    cor.test( as.numeric(unlist(armpit[i])),
        as.numeric(unlist(armpit[j])), alterantive="two-sided",
         method="kendall", exact=FALSE, continuity=TRUE)
    estimates[i] = cor.test$estimate
    pvalues[i]= cor.test$p-value
   }
   }

但它返回:

Error in cor.test$estimate : object of type 'closure' is not subsettable

誰能為我提供一些有關如何在for循環中從cor.test()函數提取估計和tau值的幫助? 提前致謝。

cor.test返回一個列表。 您可以創建一個對象來捕獲此列表:

cor_test <- cor.test( as.numeric(unlist(armpit[i])), as.numeric(unlist(armpit[j])), alterantive="two-sided", method="kendall", exact=FALSE, continuity=TRUE)

然后在$之后使用cor_test來訪問列表的每個元素:

estimates[i] = cor_test$estimate  
pvalues[i]= cor_test$p.value  # note the ., not the -

最初的錯誤很神秘,所以您對此感到困惑是可以理解的。 您編寫了cor.test$estimate ,它要求R訪問cor.test 函數estimate組件,而不是測試結果。

estimates = numeric(50)
pvalues = numeric(50)
for (i in 1:8) {
  for (j in 1:8) {
    if (j != i)
    cor_test <- 
      cor.test( as.numeric(unlist(armpit[i])),
        as.numeric(unlist(armpit[j])), alterantive="two-sided",
         method="kendall", exact=FALSE, continuity=TRUE)
    estimates[i] = cor_test$estimate
    pvalues[i]= cor_test$p.value
   }
 }

好吧,找到它了,我們應該早點看到它。 if (j != i)語句為true, if (j != i)語句需要用括號括起來。 對於您使用的特定格式,R無法正確解析它。 我無法獲取您的數據,所以我做了一些(它將針對隨機列測試隨機行)。 這有效:

M <- matrix(rnorm(8*8), ncol = 8) # made up test data
estimates = numeric(50)
pvalues = numeric(50)
for (i in 1:8) {
  for (j in 1:8) {
    if (j != i) { # need this bracket
        cor_test <-  cor.test(M[i,], M[,j],
             alternative="two.sided",
              method="kendall", exact=FALSE, continuity=TRUE)
        estimates[i] = cor_test$estimate
        pvalues[i]= cor_test$p.value
        } # and this bracket
    }
    }
estimates
pvalues

編輯:將所有結果存儲在數據框中的替代版本。

M <- matrix(rnorm(8*8), ncol = 8) # made up test data

ans <- data.frame(i = rep(NA, 64), j = rep(NA, 64), estimate = rep(NA, 64), pvalue = rep(NA, 64))
cnt <- 1
for (i in 1:8) {
  for (j in 1:8) {
    if (j != i) {
        cor_test <-  cor.test(M[i,], M[,j], alternative="two.sided", method="kendall", exact=FALSE, continuity=TRUE)
        ans[cnt,1] <- i
        ans[cnt,2] <- j
        ans[cnt,3] <- cor_test$estimate
        ans[cnt,4] <- cor_test$p.value
        cnt <- cnt + 1
        }
    }
    }

ans <- na.omit(ans)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM