我必须使用约翰逊分布来查看修改偏度值时的均值有何不同(下面代码中的 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。我的代码有什么问题吗?
您的代码中有一些错误。
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