Генерация нормально распределенных серий с использованием BIgQuery - PullRequest
0 голосов
/ 12 июня 2018

Есть ли способ генерировать нормально распределенные серии в BQ?идеально указав среднее значение и sd распределения.Я нашел способ с использованием полярного метода Марсальи, но он не идеален, так как я не хочу, чтобы полярные координаты распределения, а генерировать массив, который соответствует параметрам, указанным для его нормального распределения.Заранее спасибо.

1 Ответ

0 голосов
/ 06 июля 2018

Этот запрос дает вам евклидовы координаты нормального распределения с центром в 0. Вы можете отрегулировать как среднее (средняя переменная), так и sd (дисперсионная переменная) и значения по оси x (GENERATE_ARRAY(beginning,end,step)):

CREATE TEMPORARY FUNCTION normal(x FLOAT64)
RETURNS FLOAT64
LANGUAGE js AS """
  var mean=0;
  var variance=1;
  var x0=1/(Math.sqrt(2*Math.PI*variance));
  var x1=-Math.pow(x-mean,2)/(2*Math.pow(variance,2));
  return x0*Math.pow(Math.E,x1);
""";
WITH numbers AS
  (SELECT x FROM UNNEST(GENERATE_ARRAY(-10, 10,0.5)) AS x)
SELECT x, normal(x) as normal
FROM numbers;

Для этого я использовал «Пользовательские функции» [1] .Они используются, когда вы хотите иметь другое выражение SQL или когда вы хотите использовать Java Script (как я сделал).

ПРИМЕЧАНИЕ: я использовал функцию плотности вероятности нормального распределения, если вы хотите использовать другую, вам нужно изменить переменные x0, x1 и return (я написал их отдельно, чтобы было понятнее).

...