将均匀绘制转换为 R 中具有已知均值和标准值的正态分布



我在R中应用敏感度包。特别是,我想使用sobolroalhs,因为它对输入使用采样程序,允许评估具有大量参数的模型。该函数对所有输入统一采样 [0,1]。声明需要获得所需的分布

,如下所示
####################
# Test case: dealing with non-uniform distributions
x <- sobolroalhs(model = NULL, factors = 3, N = 1000, order =1, nboot=0)
# X1 follows a log-normal distribution:
x$X[,1] <- qlnorm(x$X[,1])
# X2 follows a standard normal distribution:
x$X[,2] <- qnorm(x$X[,2])
# X3 follows a gamma distribution:
x$X[,3] <- qgamma(x$X[,3],shape=0.5)
# toy example
toy <- function(x){rowSums(x)}
y <- toy(x$X)
tell(x, y)
print(x)
plot(x)

对于要从正态分布中采样的某些输入参数,我有非零均值和标准差。对于其他人,我想在定义的范围之间均匀采样(例如 [0.03,0.07] 而不是 [0,1](。我尝试使用内置的R函数,例如

SA$X[,1]  <- rnorm(1000, mean = 579,  sd = 21) 

但恐怕这个过程会弄乱封装的采样设计,并导致灵敏度指数的奇怪结果。因此,我认为我需要坚持 sobolroalhs 函数的均匀绘制,并在绘制所需分布时使用 [0, 1] 之间的采样值(我认为是密度绘制?这对任何人有意义和/或有没有人知道我如何按照包描述中的语法从正确的发行版中采样?

您可以在qnorm中指定meansd。 所以修改这样的行:

x$X[,2] <- qnorm(x$X[,2])

像这样:

x$X[,2] <- qnorm(x$X[,2], mean = 579, sd = 21)

同样,您可以使用qunifminmax参数来获取给定范围内的值。

当然,也可以使用X <- 579 + 21*ZY <- 0.03 + 0.04*U之类的东西将标准法线或制服转换为您想要的法线或制服,其中Z是标准法线,U是标准均匀,但对于某些分布,这些转换并不那么简单,使用q*函数可以更容易。

最新更新