2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему
 
 Практические вычисления интегрального F - распределения
Сообщение07.12.2019, 16:12 


07/10/15

2400
Использование статистических таблиц в компьютерной программе не всегда удобно, особенно, в случае F - распределения, зависящего сразу от 2-х параметров:
$$F(x | k,m)=\frac{\Gamma ((k+m)/2)}{\Gamma (k/2)\Gamma (m/2)}\int\limits_{0}^{x}\frac{(k/m)^{k/2}f{(k-1)/2}}{(1+t\cdot k/m)^{(k+m)/2}}dt$$
Естественно возникает вопрос: есть ли для этой функции какие либо аппроксимации или разложения, удобные для практических вычислений?

Для других распределений (нормального, Хи - квадрат) такие формулы представлены в большом разнообразии, и найти их не составляет особого труда. Но по данному вопросу информации практически нет. Единственное, что удалось найти - книга Абрамовица М., Стиган И. Справочник по специальным математическим функциям. - М. "Наука", 1979г. В ней представлено несколько сомнительных формул. Но к ним нет никаких описаний. Главное - непонятно какова их точность.

Буду благодарен любой полезной информации по данному вопросу

 Профиль  
                  
 
 Re: Практические вычисления интегрального F - распределения
Сообщение07.12.2019, 16:45 
Заблокирован


16/04/18

1129
Из под интеграла действительно можно вынести всё что сверху?
И в адрес такой уважаемой профессионалами книги, как Абрамовиц-Стиган, я бы не стал высказываться, что там сомнительные формулы. Что теперь есть более новые и полные справочники - не влияет.

 Профиль  
                  
 
 Re: Практические вычисления интегрального F - распределения
Сообщение07.12.2019, 17:28 
Заслуженный участник


27/04/09
28128
Andrey_Kireew
Эта функция распределения выражается через неполную и обычную бета-функции (совершенно не удивлюсь, если упомянутый справочник это сообщает, он есть и среди ссылок на той странице), которые более широко реализованы; если её нет в том, чем пользуетесь, то её достаточно приемлемую реализацию хотя бы должно быть проще найти, чем если искать что-то про само F-распределение; см. также несколько конкретных описаний на странице тех же бета-функций (тогда требуется гамма-функция, а лучше логарифм гамма-функции, но это ещё более распространено).

-- Сб дек 07, 2019 19:29:48 --

Можно заметить, что всего этого я раньше не знал и просто нашёл чуть-чуть поискав. :-)

-- Сб дек 07, 2019 19:31:28 --

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

 Профиль  
                  
 
 Re: Практические вычисления интегрального F - распределения
Сообщение07.12.2019, 18:05 


07/10/15

2400
arseniiv в сообщении #1429185 писал(а):
Можно заметить, что всего этого я раньше не знал и просто нашёл чуть-чуть поискав


оно и заметно ...

ничего там не выражается, бета-распределение вычислить так же сложно, как и F - распределение, интеграл от такой замены никуда не исчезает. Напрямую, через гамма-функцию и численное интегрирование, вычислять слишком громоздко. А никаких разложений или аппроксимаций для бета-распределения, разумеется, я точно также не нашел. Потому и написал, подумав, что может кто знает решение проще. И у меня есть подозрение, что решение это существует

 Профиль  
                  
 
 Re: Практические вычисления интегрального F - распределения
Сообщение07.12.2019, 18:16 
Заслуженный участник


27/04/09
28128
Andrey_Kireew в сообщении #1429191 писал(а):
Напрямую, через гамма-функцию и численное интегрирование, вычислять слишком громоздко.
Так на практике гамма-функция (обычная ли, логарифм ли её) и вычисляется с некоторыми попущениями, чтобы побыстрее. И интегрирование в явном виде не понадобится, только гамма.

-- Сб дек 07, 2019 20:18:37 --

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

 Профиль  
                  
 
 Re: Практические вычисления интегрального F - распределения
Сообщение07.12.2019, 18:56 


07/10/15

2400
Да потому, что пересмотрел уже всё 100 раз ... нет там ничего хорошего. Самое близкое к тому что нужно, как я уже писал, есть в книжке Абрамовица М., Стиган И ... (к стати, бета-распределения там не обнаружил), но там не указана точность этих приближенных формул, как это обычно делается. Без этого их использовать проблематично.

На счёт вычисления гамма-функции вопросов нет, с этим всё предельно ясно. А как вычислять интегральную бета-функцию, точно так же, нигде не сказано. И как же тогда не понадобится интегрирование в явном виде?

Я к тому, что сама по себе, эта замена мало что даёт, так как нужен способ вычисления бета-распределения.
По любезно предоставленной Вами ссылке я нашел изящное решение
Цитата:
An incomplete beta value can be calculated as: Value = BetaDist(x, a, b) * Exp(GammaLn(a) + GammaLn(b) − GammaLn(a + b)).
These result follow from the properties listed above.


но в math.h нет никакой BetaDist(), хотя гамма-функция там и есть.

Получается, вопрос как был, так и остался. Кроме численного интегрирования я пока вариантов не вижу

 Профиль  
                  
 
 Re: Практические вычисления интегрального F - распределения
Сообщение07.12.2019, 19:24 
Заслуженный участник


27/04/09
28128
BetaDist определяется строчкой выше.

Кстати если пишете на C++ и компилятор поддерживает C++17, есть и бета-функция (не неполная). Если поискать по c math library beta, можно найти код для C аж с объяснением того, как он получен: https://codeplea.com/incomplete-beta-function-c (найти внезапно, потому что предполагалось найти код из какой-нибудь целой библиотеки, а не отдельный пост; и например код из Boost находится, но он не для C, а для плюсов).

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

 Профиль  
                  
 
 Re: Практические вычисления интегрального F - распределения
Сообщение07.12.2019, 19:45 


07/10/15

2400
arseniiv в сообщении #1429196 писал(а):
можно найти код для C аж с объяснением того, как он получен: https://codeplea.com/incomplete-beta-function-c

Спасибо arseniiv, это похоже на то, что нужно. Буду переводить, я по английски читаю плохо.

 Профиль  
                  
 
 Re: Практические вычисления интегрального F - распределения
Сообщение08.12.2019, 08:22 
Заблокирован


16/04/18

1129
Про формулу ещё раз - там действительно интеграл по t, но в числителе под интегралом и в самой функции ничего от $t$ не зависит?
Про F распределение. Есть очень хороший современный справочник по теме в 2 томах.
Джонсон и др. Одномерные непрерывные распределения. 2012.
Во 2 томе в пар. 27 всё про F распределения.

 Профиль  
                  
 
 Re: Практические вычисления интегрального F - распределения
Сообщение08.12.2019, 17:31 


07/10/15

2400
novichok2018 в сообщении #1429283 писал(а):
Про формулу ещё раз - там действительно интеграл по t, но в числителе под интегралом и в самой функции ничего от $t$ не зависит?

Просто в формуле ошибка, вместо f должно быть t (иначе возникает вопрос, что же такое f), я потом только заметил, исправлять было уже поздно.
Спасибо за ссылку, правда скачать пока её не получилось.

Хотелось бы отдельно поблагодарить arseniiv, за предоставленную ссылку. Алгоритм Lentz's оказался на удивление хорош. Я его тут "погонял" немного на разных числовых значениях, получается максимальная относительная погрешность $10^{-7}$, а средняя $10^{-12}$. Если уменьшить критерий останова с $10^{-8}$ до $10^{-9}$, точность возрастает в 10 раз. Потом она уже не увеличивается, видимо, сказывается точность вычисления гамма-функции. Работает быстро, обычно сходится за 4-5 итераций. В редких случаях (примерно один из 20), количество итераций возрастает до нескольких десятков. Максимум - это 50.

К стати, гамма функция реализована только в С++11, у меня её к сожалению тоже не было. Так, что исходный код пришлось немного дополнить.
Но это всё мелочи

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group