Джулии эквивалент R's qnorm ()? - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь "перевести" эти строки из 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, а версия Джулии возвращает вектор длины 5.

Вот моя попытка:

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

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Попробуйте

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]

Джулия использует множественную диспетчеризацию для выбора подходящего метода quantile для данного дистрибутива, в отличие от R, где у вас, кажется, есть префиксы. Согласно документации первым аргументом должно быть распределение, вторым аргументом - точка, в которой вы хотите оценить обратный cdf.

Странно, но я получаю ошибку, когда пытаюсь сделать quantile.(d, qs) (трансляция квантильного вызова). ОБНОВЛЕНИЕ: Смотрите ответ Богумила в этом случае. В моих тестах оба подхода имеют одинаковую скорость.

0 голосов
/ 30 августа 2018

В соответствии с Julia 1.1 вы должны транслировать вызов на quantile следующим образом:

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