gpt4 book ai didi

r - 在rmrm中设置上限和下限

转载 作者:行者123 更新时间:2023-12-03 13:44:42 24 4
gpt4 key购买 nike

我正在使用rnorm模拟数据,但是我需要设置一个上限和下限,有人知道怎么做吗?

码:

rnorm(n = 10, mean = 39.74, sd = 25.09)

上限为340,下限为0

我问这个问题是因为我正在将SAS代码重写为R代码。我从未使用过SAS。
我正在尝试重写以下代码:
sim_sample(simtot=100000,seed=10004,lbound=0,ubound=340,round_y=0.01,round_m=0.01,round_sd=0.01,n=15,m=39.74,sd=25.11,mk=4)

最佳答案

像这样?

mysamp <- function(n, m, s, lwr, upr, nnorm) {
samp <- rnorm(nnorm, m, s)
samp <- samp[samp >= lwr & samp <= upr]
if (length(samp) >= n) {
return(sample(samp, n))
}
stop(simpleError("Not enough values to sample from. Try increasing nnorm."))
}

set.seed(42)
mysamp(n=10, m=39.74, s=25.09, lwr=0, upr=340, nnorm=1000)
#[1] 58.90437 38.72318 19.64453 20.24153 39.41130 12.80199 59.88558 30.88578 19.66092 32.46025
但是,结果是 而不是正态分布,通常不会具有您指定的均值和sd(特别是如果限制在指定均值周围不对称时)。
编辑:
根据您的评论,您似乎想翻译 this SAS function。我不是SAS用户,但这应该大致相同:
mysamp <- function(n, m, s, lwr, upr, rounding) {
samp <- round(rnorm(n, m, s), rounding)
samp[samp < lwr] <- lwr
samp[samp > upr] <- upr
samp
}

set.seed(8)
mysamp(n=10, m=39.74, s=25.09, lwr=0, upr=340, rounding=3)
#[1] 37.618 60.826 28.111 25.920 58.207 37.033 35.467 12.434 0.000 24.857
然后,您可能想使用 replicate来运行模拟。或者,如果您想要更快的代码:
sim <- matrix(mysamp(n=10*10, m=39.74, s=25.09, lwr=0, upr=340, rounding=3), 10)
means <- colMeans(sim)
sds <- apply(sim, 2, sd)

关于r - 在rmrm中设置上限和下限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19343133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com