提取P值 - SIGN测试 - 在R中包装BSDA

时间:2013-10-28 20:40:49

标签: r list extract p-value

我需要从包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"

2 个答案:

答案 0 :(得分:4)

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

print(rval)
return(Confidence.Intervals)

只是

 return(rval)

您将无法获得您获得的置信区间,但如果您愿意,也可以将它们添加到输出列表中,

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

与软件包维护人员联系也许是值得的,尽管它看起来不像自2012年3月以来一直在更新,无论价值多少。

答案 1 :(得分: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中,则通过写入来提取p值。

<强>输入

res<-my(x,md=6.5)

<强>输出

  

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

参考: - https://www.facebook.com/groups/rusers/10152075287578740/