Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Как бы посчитать табличный коэффициент Стьюдента?


Автор: _Y_ 27.11.2006, 16:59
Подскажите, уважаемые, алгоритм рассчета коэффициентов Стьюдента для произвольно выбранной вероятности и степени свободы. К сожалению, книги и Интернет полны только "школьной" формулой нахождения экспериментального значения коеффициента. После чего весело говориться "а теперь сравните полученное значение с табличнымsmile  А как получить табличное!?.. smile 

Честно рыл статистические книги и т.п. (и этот сайт тоже). Все что нарыл - уравнения, описыващие распределение Стьюдента. Можно, конечно, положить несколько дней и сконструировать на их основе свой алгоритм.  smile  Только что-то я уверен в уродливости такого моего велосипедоизобретания.

ЗЫ: Пишу сейчас на Яве, но языков знаю десяток - так что, наверное, разберусь в чем ни дадите.

Спасибo!

Автор: Dims 28.11.2006, 03:10
Не понял. Если есть формула, то в чём проблема

(А есть она, например, тут http://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D1%82%D1%8C%D1%8E%D0%B4%D0%B5%D0%BD%D1%82%D0%B0)

Автор: esperant0 28.11.2006, 08:01
убитая ссылка.

"если есть формула то в чем проблема"

Как в чем? Не все формулы вычислимы, и не все вычислимые формулы лекго вычислимы.


Автор: Silver 28.11.2006, 09:21
Смотри тут, даже есть программы с коментариями:
http://alglib.sources.ru/specialfunctions/distributions/student.php

Автор: Mercator 29.11.2006, 15:49
Посоветую посмотреть, например, такой документ (нашла по яндексу, так что все в ваших руках)
http://www.exponenta.ru/educat/referat/XIkonkurs/student5/tabt-st.pdf

А вообще есть предчувствие, что такие таблицы (в тех или иных интервалах и количестве знаков после запятой) должны встречаться в учебниках по статистике (в приложениях, а не в текстеsmile или даже издаваться отдельно (надо спрашивать в библиотеке).

Автор: bagira 30.11.2006, 18:19

Цитата(_Y_ @  27.11.2006,  18:59 Найти цитируемый пост)
А как получить табличное!?..

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

Вот здесь разные таблицы критических значений статистических критериев:
http://chemstat.com.ru/tables/index.html

Автор: Dims 3.12.2006, 06:51
Цитата(esperant0 @ 28.11.2006,  08:01)
убитая ссылка.

К ссылке приклеилась скобка в конце 

Вот ещё раз: http://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D1%82%D1%8C%D1%8E%D0%B4%D0%B5%D0%BD%D1%82%D0%B0


Там справа внизу есть формула. Отдельно надо искать, как посчитать "гамма" функцию. Для неё должны быть ряды.

Автор: Joss 3.12.2006, 12:17
Мне приходилось использовать такую аппроксимацию:

Код

t = u*(1 + (1 + pow(u,2))/(4*v) + (3 + 16*pow(u,2) + 5*pow(u,4))/(96*pow(v,2)))


Здесь v - количество степеней свободы, а u - квантиль нормального распределения, соответствующий заданной вероятности alpha. Его можно вычислять по формуле:

Код

const double c0 = 2.515517, c1 = 0.802863, c2 = 0.010328,
                     d1 = 1.432788, d2 = 0.189269, d3 = 0.001208;
                
double r = sqrt(-2*log(alpha));
u = r - (c0 + c1*r + c2*r*r)/(1 + d1*r + d2*r*r + d3*pow(r, 3));
 

Автор: _Y_ 9.12.2006, 20:30
Прошу прощения - не сразу отвечаю. Никак не успеваю довести до конца этот алгоритм. Так что этот ответ - просто чтобы вы не считали что писали зря. Я вам очень благодарен. По ходу же дела:
Цитата(bagira @ 30.11.2006, 18:19)
Табличное не получают, его ищут в специальных таблицах
 Разрешите пожать Вашу руку, а также руки все остальных, кто так считает smile 
Цитата(Silver @ 28.11.2006, 09:21)

...программы с коментариями:
http://alglib.sources.ru/specialfunctions/...ons/student.php
 Видимо это именно то, что нужно. Проблема в том, что кода много и перевести на Яву пока не успел. Но буду стараться smile 
Цитата(Joss @ 3.12.2006,  12:17)
Мне приходилось использовать такую аппроксимацию:

Код

t = u*(1 + (1 + pow(u,2))/(4*v) + (3 + 16*pow(u,2) + 5*pow(u,4))/(96*pow(v,2)))


Здесь v - количество степеней свободы, а u - квантиль нормального распределения, соответствующий заданной вероятности alpha. Его можно вычислять по формуле:

Код

const double c0 = 2.515517, c1 = 0.802863, c2 = 0.010328,
                     d1 = 1.432788, d2 = 0.189269, d3 = 0.001208;
                
double r = sqrt(-2*log(alpha));
u = r - (c0 + c1*r + c2*r*r)/(1 + d1*r + d2*r*r + d3*pow(r, 3));


Скопировал в Яву (в этом случае это просто)
Код

        double alpha = 0.99; //probability
        int v = 5; //freedom degree
        
        double c0 = 2.515517, c1 = 0.802863, c2 = 0.010328, d1 = 1.432788, d2 = 0.189269, d3 = 0.001208;
   
        double r = Math.sqrt(-2*Math.log(alpha));
        double u = r - (c0 + c1*r + c2*r*r)/(1 + d1*r + d2*r*r + d3*Math.pow(r, 3));

        double t = u*(1 + (1 + Math.pow(u,2))/(4*v) + (3 + 16*Math.pow(u,2) + 5*Math.pow(u,4))/(96*Math.pow(v,2)));
    
        System.out.println("t=" + t);

Пока не работает smile Выдает отрицательное число.  С этими исходными (взятыми для тестирования) это t=-2.6932476886073093

Поборюсь еще. Сообщу о результатах.

Автор: Joss 10.12.2006, 21:14
Дело в том, что аппроксимация квантиля нормального распределения используется при alpha < 0.47. Еще один вариант:

Код

const double a0 = 2.30753, a1 = 0.27061,
                     b1 = 0.99229, b2 = 0.04481;
double r = sqrt(-2*log(alpha));
double u = r - (a0 + a1r)/(1 + b1*r + b2*r*r)


Автор: _Y_ 11.12.2006, 19:09
Цитата(Joss @ 10.12.2006,  21:14)
Дело в том, что аппроксимация квантиля нормального распределения используется при alpha < 0.47.

Кажется понял:  В Вашем алгоритме берется не вероятность вхождения в интервал, а вероятность выхода из него.

Теперь результаты положительные, но, все равно значительно отличаются от табличных. Например для alpha = 0.05;  v = 4; таблица дает 2.78, а Ваша программа 2.1148169356975965 (старая) или 2.1139172317561585 (новая). 

Возникло подозрение: в липких глубинах моего серого вешества таится воспоминание о том, что t-коэффициент может быть посчитан как для одной ветки кривой распределения, так и для всего "колокола", т.е. во втором случае он дает вероятность попадания в интервал с центром соответствуюшим максимуму на кривой. Не может быть так, что Вы описываете первый случай, а я смотрю таблицы для второго?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)