Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.09;
Скачать: CL | DM;

Вниз

Кто знаком с мат.статистикой?   Найти похожие ветки 

 
-=DeMoH=- ©   (2003-12-23 15:12) [0]

Помогите, пожалуйста, написать процедуры вычисления распределения Фишера и Стьюдента!!!
Аналог программы лежит на http://sinisha.chat.ru/products/scg/


 
Тимохов ©   (2003-12-23 15:17) [1]

Бог поможет.

Ты спроси, что конкретно тебе не ясно.


 
TUser ©   (2003-12-23 15:18) [2]

Вроде бы формулы эти есть в почти любом учебнике по теорверу. Если очень надо - попроси меня по мылу, дома у меня эти формулы точно есть.


 
-=DeMoH=- ©   (2003-12-23 18:43) [3]

Дело в том, что именно этих формул нет в чистом виде (может "лыжи не едут" :). Мне нужны куски кода, которые бы вычисляли также, как это делаем MathCad (функции qF и qt) или программа, лежащая по вышеуказанному адресу. Или если у кого есть нормальная теория, но ему ее совершенно лень запрограммить, то можно закинуть теорию.


 
TUser ©   (2003-12-23 20:25) [4]

На algolist.manuals.ru есть алгоритмы вычисления этих распределений. Правда на Сях. Я так понимаю, что проюлема состоит г.о. в том, чтобы вычислить Гамма-функцию. Алгоритм ее вычисления точно совершенно существует, я его даже недавно видел. Может быть у Кнута, а может еще где-то. Но, наверное, алголиста хватит.


 
-=DeMoH=- ©   (2003-12-23 22:08) [5]

че-то не могу зайти на этот сайт - может неправильно адрес написал?


 
-=DeMoH=- ©   (2003-12-23 22:27) [6]

опа, нашел ошибку! Сайт называется http://algolist.manual.ru
Очень полезный сайт - нашел все, что было нужно!


 
TUser ©   (2003-12-24 07:50) [7]

Конкретная математика. С. 332. Там описывается, как найти Гамма-функцию. Ну, а дальше - можно и эти распределения посчитать. А если точность особая не требуется - тогда по формуле Стирлинга.


 
-=DeMoH=- ©   (2003-12-24 10:27) [8]

Скачал Бета-распределение, log-Гамма распределение, распределение Фишера и распределение Стьюдента.
Так вот, распределение Фишера я наладил (сейчас занимаюсь конверсией и Билдера в Делфи), а вот со Стьюдентом запарка - в тексте программы есть строчка "z=b.quantile(fabs(z));" - которая никаким боком туды не лезет (сообщение об ошибке, что в Бета-распределении нет такого метода - "quantile"). Я посмотрел - нигде эта "quantile" не описана - может они чего напутали или я какой модуль не подключил? (аналогичный косяк я нашел еще в хи-квадрат)


 
PVOzerski ©   (2003-12-24 10:44) [9]

У меня кое-что в архиве есть (расчет уровней значимости), только вот куда высылать? Адрес demoh@nekto.com меня почему-то смущает :^)


 
TUser ©   (2003-12-24 11:00) [10]

Я бы все-таки пробовал расчитать Гамма-функцию, а все остальные распределения вычислит через гамму. Метод универсальный, и Г вычисляется, вроде, не очень сложно, как я понимаю.


 
-=DeMoH=- ©   (2003-12-24 11:30) [11]

если кто желает помочь - кидайте на мыло!
P.S.: а че с моим адресом - нечего смущатся :) (это домен www.mailgate.ru)


 
-=DeMoH=- ©   (2003-12-24 11:32) [12]

Ксатати, для вычисления распределения Стьюдента используются BetaDF.cpp и logGamma.cpp, так же как и в распределении Фишера. Проблема, как я уже говорил, в том, что те исходники распределения Стьюдента, которые выложены на вышеуказанном сайте, наверное косячны! :-[(


 
PVOzerski ©   (2003-12-24 11:45) [13]

>если кто желает помочь - кидайте на мыло!
>P.S.: а че с моим адресом - нечего смущатся :) (это домен www.mailgate.ru)
Ну, тогда лови!


 
Brahman ©   (2003-12-24 12:36) [14]

Как не помочь товарищу по несчастью.
Из моей биб-ки:

// GammaLn(5) = 3.17805
function GammaLn(value: double): double;
const
stp = 2.50662827465;
half = 0.5;
one = 1.0;
fpf = 5.5;
var
x,tmp,ser: double;
j: integer;
cf: array [0..5] of double;
begin
cf[0] := 76.18009173;
cf[1] := -86.50532033;
cf[2] := 24.01409822;
cf[3] := -1.231739516;
cf[4] := 0.120858003e-2;
cf[5] := -0.536382e-5;
x := value-one;
tmp := x+fpf;
tmp := (x+half)*ln(tmp)-tmp;
ser := one;
for j := 0 to 5 do begin
x := x+one;
ser := ser+cf[j]/x
end;
Result := (tmp+ln(stp*ser));
end;

function BetaI(a,b,x: double): double;
var
bt: double;
begin
Result :=0.0;
if ((x < 0.0) or (x > 1.0)) then Exit;
if ((x = 0.0) or (x = 1.0)) then bt := 0.0
else bt := exp(GammaLn(a+b)-GammaLn(a)-GammaLn(b)
+a*ln(x)+b*ln(1.0-x));
if (x < ((a+1.0)/(a+b+2.0))) then
Result := bt*BetaCF(a,b,x)/a
else
Result := 1.0-bt*BetaCF(b,a,1.0-x)/b
end;

function BetaCF(a,b,x: double): double;
const
itmax=100;
eps=3.0e-7;
var
tem,qap,qam,qab,em,d: double;
bz,bpp,bp,bm,az,app: double;
am,aold,ap: double;
m: integer;
begin
am := 1.0;
bm := 1.0;
az := 1.0;
qab := a+b;
qap := a+1.0;
qam := a-1.0;
bz := 1.0-qab*x/qap;
for m := 1 to itmax do begin
em := m;
tem := em+em;
d := em*(b-m)*x/((qam+tem)*(a+tem));
ap := az+d*am;
bp := bz+d*bm;
d := -(a+em)*(qab+em)*x/((a+tem)*(qap+tem));
app := ap+d*az;
bpp := bp+d*bz;
aold := az;
am := ap/bpp;
bm := bp/bpp;
az := app/bpp;
bz := 1.0;
if ((abs(az-aold)) < (eps*abs(az))) then break;
end;
result := az
end;


 
-=DeMoH=- ©   (2003-12-24 21:46) [15]

Спасибо! Если не трудно, напишите кто-нить распределение Стьюдента (такое, чтобы оно вычислялось как можно точнее к табличному) - насколько я понимаю, его как раз вычисляют, используя Гамма-распределение и Бетта-распределение.
Заранее благодарен...


 
Amoeba ©   (2003-12-25 11:45) [16]

Готовые Бета и Гамма ф-ии есть в бесплатной (с исходниками) библиотеке ESBMaths: http://www.esbconsult.com.au



Страницы: 1 вся ветка

Текущий архив: 2004.01.09;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.021 c
3-25228
AlexA
2003-12-11 10:13
2004.01.09
Возращение всех множеств в ХП


9-25170
mrk
2003-06-15 16:33
2004.01.09
как сделать звезды в glscne?


1-25426
Бушин Сергей
2003-12-24 05:50
2004.01.09
Как добалять элементы в TActionMainMenuBar в RunTime


3-25199
zergey
2003-12-12 10:54
2004.01.09
Доступ к нескольким книгам Excel


1-25408
UDS
2003-12-23 23:37
2004.01.09
Обратный отсчет времени.