Главная страница
    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
6-25478
TButton
2003-11-07 22:34
2004.01.09
закрыть сокет


1-25400
Rte
2003-12-25 17:54
2004.01.09
Как обьявить структуру как в C?


14-25564
Dimich1978
2003-12-18 13:13
2004.01.09
Электроника 60


6-25497
sipliy
2003-11-10 11:32
2004.01.09
Бьются файлы при закачке их на ftp сервер.


1-25343
velial
2003-12-22 11:59
2004.01.09
Delphi && Excel Replace





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский