在 Rstudio 中使用约翰逊分布进行均值比较

问题描述 投票:0回答:1

我必须使用约翰逊分布来查看修改偏度值时的均值有何不同(下面代码中的 0.3):

library(moments)
library(SuppDists)

k <- 500

parms <-JohnsonFit(c(0, 1, .3, 6))
sJohnson(parms)
poblacion <- rJohnson(1000, parms)

mu.pob <- mean(poblacion)
sd.pob <- sd(poblacion)

p <- vector(length=k)
for (i in p){
  muestra <- poblacion[rJohnson(1000, parms)]
  p[i] <- t.test(muestra, mu = mu.pob)$p.value
}

a_teo = 0.05
a_emp = length(p[p<a_teo])/k
sprintf("alpha_teo = %.3f <-> alpha_emp = %.3f", a_teo, a_emp)

如果我将 .3 更改为 1,我会得到不同的平均值和标准差值,但我会得到完全相同的 alpha 经验值:1.000。我的代码有什么问题吗?

r rstudio mean
1个回答
0
投票

您的代码中有一些错误。

  • 而不是
    for(i in p)
    ,应该是
    for(i in seq.int(k))
  • 您采样/重新采样的方式,
    poblacion[rJohnson(1000, parms)]
    ,是错误的。索引
    rJohnson
    不是整数,并且不会索引
    ppoblacion
    。正确的方法应该是下面
    for
    循环中的任何一种方法。
  • 虽然你对
    a_emp
    的计算没有错,但太复杂了,请参阅等效的
    mean(p < a_teo)

这是更正后的完整代码。

library(moments)
library(SuppDists)

set.seed(2024)

k <- 500

parms <-JohnsonFit(c(0, 1, .3, 6))
# sJohnson(parms)
poblacion <- rJohnson(1000, parms)

mu.pob <- mean(poblacion)
sd.pob <- sd(poblacion)

p <- numeric(k)
for(i in seq.int(k)){
  # muestra <- sample(poblacion, 1000, TRUE)
  muestra <- rJohnson(1000, parms)
  p[i] <- t.test(muestra, mu = mu.pob)$p.value
}

a_teo <- 0.05
a_emp <- length(p[p<a_teo])/k
mean(p < a_teo)
#> [1] 0.042
sprintf("alpha_teo = %.3f <-> alpha_emp = %.3f", a_teo, a_emp)
#> [1] "alpha_teo = 0.050 <-> alpha_emp = 0.042"

创建于 2024-03-10,使用 reprex v2.1.0

© www.soinside.com 2019 - 2024. All rights reserved.