首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:用模拟计算p值。

R:用模拟计算p值。
EN

Stack Overflow用户
提问于 2017-07-15 21:05:17
回答 1查看 1.5K关注 0票数 0

我编写这段代码是为了在两个随机分布的x和y观测上运行测试统计数据。

代码语言:javascript
复制
mean.test <- function(x, y, B=10000,
alternative=c("two.sided","less","greater"))
{
p.value <- 0
alternative <- match.arg(alternative)
s <- replicate(B, (mean(sample(c(x,y), B, replace=TRUE))-mean(sample(c(x,y), B, replace=TRUE))))
t <- mean(x) - mean(y) 
p.value <- 2*(1- pnorm(abs(quantile(T,0.01)), mean = 0, sd = 1, lower.tail = 
TRUE, log.p = FALSE))   #try to calculate p value 
data.name <- deparse(substitute(c(x,y)))
names(t) <- "difference in means"
zero <- 0
names(zero) <- "difference in means"
return(structure(list(statistic = t, p.value = p.value,
method = "mean test", data.name = data.name,
observed = c(x,y), alternative = alternative,
null.value = zero),
class = "htest"))
}

该代码使用蒙特卡罗模拟来生成测试统计平均值(X)-均值(Y)的分布函数,然后计算p-值,但显然我没有定义这个p-值,因为:

代码语言:javascript
复制
> set.seed(0)
> mean.test(rnorm(1000,3,2),rnorm(2000,4,3)) 

输出应该如下所示:

代码语言:javascript
复制
    mean test
data: c(rnorm(1000, 3, 2), rnorm(2000, 4, 3))
difference in means = -1.0967, p-value < 2.2e-16
alternative hypothesis: true difference in means is not equal to 0

但我得到的是:

代码语言:javascript
复制
      mean test
data:  c(rnorm(1000, 3, 2), rnorm(2000, 4, 3))
difference in means = -1.0967, p-value = 0.8087
alternative hypothesis: true difference in means is not equal to 0

有人能给我解释一下窃听器吗?

EN

回答 1

Stack Overflow用户

发布于 2017-07-17 06:48:46

据我所知,您的代码中有许多错误和错误:

  • quantile(T, 0.01) -这里是T == TRUE,所以你在计算1的分位数。
  • 从来不使用对象s
  • mean(sample(c(x,y), B, replace=TRUE)),你想在这里做什么?c()函数结合了xy。取样是没有意义的,因为你不知道他们来自什么人口
  • 当您计算测试统计量t时,它应该取决于方差(和样本大小)。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45122721

复制
相关文章

相似问题

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