朱莉娅等于R的qnorm()吗?

时间:2018-08-30 06:39:36

标签: r julia distribution normal-distribution quantile

我正在尝试将这些行从R“翻译”到Julia:

n <- 100
mean <- 0
sd <- 1
x <- qnorm(seq(1 / n, 1 - 1 / n, length.out = n), mean, sd)

但是,我在qnorm函数方面遇到麻烦。我已经搜索了“分位数函数”并找到了quantile()函数。但是,R的版本返回长度为100的向量,而Julia的版本返回长度为5的向量。

这是我的尝试:

import Distributions
n = 100
x = Distributions.quantile(collect(range(1/n, stop=1-1/n, length=n))) 

2 个答案:

答案 0 :(得分:5)

在Julia 1.0下,您应该像这样将呼叫广播到quantile

quantile.(Ref(Normal(0, 1)), range(1/n, stop=1-1/n, length=n))

或这个

quantile.([Normal(0, 1)], range(1/n, stop=1-1/n, length=n))

关键部分是Normal(0, 1)尚未定义广播行为(因此),因此您必须将其包装到broadcast支持的内容中。

答案 1 :(得分:2)

尝试

using Distributions
n = 100
qs = range(1/n, stop=1-1/n, length=n) # no need to collect it
d = Normal() # default is mean = 0, std = 1
result = [quantile(d, q) for q in qs]

Julia使用多个分派为给定的分布选择适当的quantile方法,与R似乎有前缀的情况相反。根据{{​​3}},第一个参数应该是分布,第二个参数是您要求逆cdf的点。

奇怪的是,当我尝试执行quantile.(d, qs)(广播分位数调用)时出现错误。更新:在这种情况下,请参阅Bogumil的答案。在我的基准测试中,两种方法的速度相同。