Форум: "Основная";
Текущий архив: 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