Выбор «похожих» групп - с чего начать с вероятностей? - PullRequest
3 голосов
/ 13 июля 2011

Допустим, у меня есть таблица с 10.000 строками (представляющими 10.000 человек) и следующими столбцами:

id    qualification    gender    age    income

Когда я выбираю всех лиц, имеющих определенную квалификацию (скажем, «сантехник»), я получаю 100 строк, имеющих определенный пол, возраст и распределение доходов.

Теперь я хочу выбрать какую-нибудь группу тестирования, чтобы проверить, зависит ли доход от квалификации или распределения других атрибутов.

Это означает (и теперь я перехожу к своему вопросу), я хочу получить еще один набор из 100 строк, имеющих такое же распределение по полу и возрасту (но с другим значением квалификации). Эти 100 строк должны быть выбраны случайным образом.

Моя основная проблема заключается в том, что я не знаю, как написать команду SQL, которая бы позаботилась о распределениях (которые, конечно, могут и, возможно, должны рассматриваться как вероятности в этом контексте), когда я выбираю случайные строки.

Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 14 июля 2011

Вы, похоже, пытаетесь решить что-то, что тесно связано с этой чрезвычайно сложной проблемой .

На вики-странице представлен ряд подходов для обнаружения корреляций в базе данных, в комплекте сссылки на предыдущие обсуждения pg-hacker (, вот еще ), различные (отклоненные) предложения патчей и научные статьи, в которых обсуждается эта тема.

Если это звучит слишком сложно, я бывторое предложение Catcall's pl / r.Или другой применимый pl, если на то пошло.

Кроме того, вы также можете найти полезными pg-kmeans:

http://pgxn.org/dist/kmeans/doc/kmeans.html

Как и PostStat (никогда не пыталсяэто сам):

http://poststat.projects.postgresql.org/

1 голос
/ 13 июля 2011

Может быть лучше на stats.stackexchange.com .

Выбор случайных строк прост;согласовать распределение сложно.

Вы могли бы написать хранимую процедуру, которая

  • многократно выбирает 100 строк случайным образом,
  • вычисляет статистику,
  • и возвращается, когда находит 100 подходящих строк.

Но это похоже на то, как пнуть мертвых китов по пляжу.И, в зависимости от ваших данных, они могут никогда не вернуться.

Прежде чем тратить много времени на попытки сделать это в SQL, подумайте о том, как потратить немного времени, чтобы понять, насколько сложно (или легко) это сделать со статистикой.программное обеспечение, например R .

Позже

Только что обнаружили, что есть пакет под названием pl / R .

PL / R - это загружаемый процедурный язык, который позволяет вам писать функции и триггеры PostgreSQL на языке программирования R.PL / R предлагает большинство (если не все) возможностей, которые есть у разработчика функций на языке R.

Google postgresql +statistics +r +pl для дополнительных ссылок на статьи и учебные пособия.

0 голосов
/ 13 июля 2011
SELECT * from Table1 order by random() limit 100;

random () действителен для PostgreSql. Для MySql вы можете использовать RAND () вместо Random ()

...