Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];

Вниз

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

 
-=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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.013 c
14-25515
vuk
2003-12-15 18:34
2004.01.09
Мыло для веревок.


7-25616
Seldon
2003-10-29 19:47
2004.01.09
Системные шрифты


1-25340
drummer
2003-12-19 15:02
2004.01.09
Excel with Delphi


11-25270
Ал
2003-04-18 16:48
2004.01.09
Работа с COM


4-25656
KbIC
2003-11-06 12:27
2004.01.09
Console application





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский