Обозначение |
L(x|a,b) |
Область значений | |
Параметры | Параметр расположения a, параметр масштаба b > 0. |
Плотность (функция вероятности) | |
Математическое ожидание | a |
Дисперсия | |
Функция распределения |
Нормальная функция распределения отличается от логистической не более чем на 0.01. Понятно, что для проверки гипотезы о принадлежности нашей выборки к одному из них требуются выборки непомерно большого объема. Как, по-вашему, почему, все-таки, всюду используется нормальное распределение?
Пусть r– равномерно распределенная на отрезке [0,1] случайная величина.
Тогда случайная величина x,
подчиняющаяся логистическому распределению с параметром расположения a и параметром масштаба b, может быть получена стандартным способом – с помощью следующего соотношения:
.
Не представляет никаких трудностей: используются лишь функции, входящие в стандартные библиотеки (как в Си), либо в сам язык (как в Паскале).
Для совсем ленивых все-таки привожу коды. Помните все же, что использованные стандартные функции работают с ограниченной точностью!
#ifndef __LOGISTIC_H__ /* To prevent redefinition */ #define ENTRY extern #define LOCAL static ENTRY double logisticDF(double x, double a, double b); ENTRY double inv_logisticDF(double q, double a, double b); #define __LOGISTIC_H__ /* Prevents redefinition */ #endif /* Ends #ifndef__LOGISTIC_H__ */ |
#include <assert.h> #include <math.h> double logisticDF(double x, double a, double b) { assert(b > 0); return 1./(1+exp((a-x)/b)); } double inv_logisticDF(double q, double a, double b) { assert(b > 0 && q > 0 && q < 1.); return a-b*log(1./q-1); } #ifdef TEST #include <iostream.h> void main(void) { double a, b; while (1) { cout << "\n\n\rEnter a: "; cin >> a; if (a <= 0) break; cout << "Enter b: "; cin >> b; for(double x=-8; x < 8; x += 0.32) { double y=logisticDF(x, a, b); double z=inv_logisticDF(y, a, b); cout << "x=" << x << "\tl=" << y << "\ti=" << z << endl; } } } #endif |
Дата последней модификации: 25 октября 2000 г.