3

我需要从包BSDA中的 SIGN.test 函数中提取 p 值:

> library(BSDA)
> x <- c(7.8, 6.6, 6.5, 7.4, 7.3, 7., 6.4, 7.1, 6.7, 7.6, 6.8)
> t1=SIGN.test(x,md=6.5)

        One-sample Sign-Test

data:  x
s = 9, p-value = 0.02148
alternative hypothesis: true median is not equal to 6.5
95 percent confidence interval:
 6.571273 7.457455
sample estimates:
median of x 
          7     

但我收到以下错误:

> t1$p.value
Error in t1$p.value : $ operator is invalid for atomic vectors

我也试过str(t1)了也没用。

> str(t1)
 num [1:3, 1:3] 0.935 0.95 0.988 6.6 6.571 ...
 - attr(*, "dimnames")=List of 2
  ..$ : chr [1:3] "Lower Achieved CI" "Interpolated CI" "Upper Achieved CI"
  ..$ : chr [1:3] "Conf.Level" "L.E.pt" "U.E.pt"
4

2 回答 2

4

我查看了函数的代码,它似乎没有将其包含在输出中,除非k<1满足特定标准 ( ),其中k在函数中定义。这不是文档所说的应该做的。您的选择可能是将函数的修改版本放在您自己的工作区中;你需要做的是替换最后两行

print(rval)
return(Confidence.Intervals)

只需

 return(rval)

你不会得到你得到的置信区间,但如果你愿意,你也可以将它们添加到输出列表中,使用

rval$Confidence.Intervals <- Confidence.Intervals
return(rval)

与包维护者联系可能也是值得的,尽管它看起来自 2012 年 3 月以来没有更新,不管它有什么价值。

于 2013-10-28T20:55:14.077 回答
1

我遇到了同样的问题,一位优秀的 R 程序员为我修改了代码以提取 p 值。

就这样做吧。你的问题将得到解决。

1)发送一行只写SIGN.test,它会向您显示函数,复制它,随意命名,然后复制步骤2中的文本并将它们替换为函数的最后几行......

2)

print(rval)
list(rval,Confidence.Intervals)
}
}

3)请注意,最后几行是

   print(rval)
         return(Confidence.Intervals)
    }
}
<environment: namespace:BSDA>

将它们替换为步骤 2 中的行

4)如果我们将函数命名为my,并将函数结果存储在res中,那么通过写this来提取p值。

输入

res<-my(x,md=6.5)

输出

res[[1]]$p.value [1] 0.02148438; 其中 x 是你的向量

参考:- https://www.facebook.com/groups/ruse​​rs /10152075287578740/

于 2014-03-17T04:29:01.743 回答