首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从p.value ()中提取p.value和估计值?

如何从p.value ()中提取p.value和估计值?
EN

Stack Overflow用户
提问于 2015-12-26 13:03:36
回答 2查看 2.8K关注 0票数 2

我在for循环中对数据集执行cor.test,但我不知道如何从测试中提取估计和τ之类的信息。

在dataset中执行for循环之前,cor.test()函数按如下方式返回:

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

返回结果

下面是我执行for循环的代码。现在我想从我的测试中提取估计值和τ值。

代码语言:javascript
复制
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)
   }
}

我检查过类似的问题

相似问题

然后,我将代码更改为:

代码语言:javascript
复制
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()函数中提取估计值和τ值吗?提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-26 19:54:14

好吧,找到了,我们应该早点看的。如果语句为真,则if (j != i)语句需要围绕应该执行的所有操作设置括号。使用特定的格式,R没有正确地解析它。我无法获得您的数据,所以我编造了一些(这将测试随机列的随机行)。这样做是可行的:

代码语言:javascript
复制
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

编辑:可选版本,用于将所有结果存储在数据框架中。

代码语言:javascript
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2015-12-26 13:37:27

cor.test返回一个列表。您可以创建一个对象来捕获此列表:

代码语言:javascript
复制
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$一起使用,以访问列表中的每个元素:

代码语言:javascript
复制
estimates[i] = cor_test$estimate  
pvalues[i]= cor_test$p.value  # note the ., not the -

最初的错误是相当神秘的,所以你对此感到困惑是可以理解的。您编写了cor.test$estimate,它要求R访问cor.test 函数estimate组件,而不是测试结果。

代码语言:javascript
复制
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
   }
 }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34471573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档