Толерантные интервалы
При определении понятия толерантного интервала, в качестве примера, будем рассматривать функцию плотности вероятности стандартного нормального распределения. На рисунках 1 и 2 изображены квантили распределения - значения, которые случайная величина не превышает с заданной вероятностью или
где - функция плотности вероятности распределения, - квантиль, соответствующий значению вероятности .
Иллюстрация к данному соотношению, где черный квадрат - соответствующий квантиль распределения:
Таким образом, можно сказать, что квантиль распределения представляет собой границу, ниже которой расположена долясоответствующего распределения. Аналогично, долю распределения внутри некоторого интервала, обе границы которого конечны, можно определить как:
где - меньший и больший квантили, соответственно.
Можно переписать данное выражение в другой форме
где - функция распределения.
Меньший и больший квантили назовем нижней и верхней границами соответствующего интервала, например . Ниже на рисунке 3 можно увидеть как изменяется доля распределения, содержащаяся внутри интервала, при изменении его ширины, то есть в зависимости от значений соответствующих границ (нижняя граница обозначена зеленым квадратом, верхняя - синим)
Перейдем непосредственно к определению понятия толерантного интервала. В Википедии, со ссылкой на соответствующую литературу, пишут:
Толерантный интервал является интервалом в выборочном пространстве наблюденных случайных величин. Он определяется достаточной статистикой на основе требования о том, чтобы при заданном доверительном уровне содержать вероятностную меру статистического распределения, не меньшую заданного уровня.[1]
Доверительный интервал определяется для некоторого параметра функции распределения и является интервалом в параметрическом пространстве. Он определяется достаточной статистикой на основе требования о том, чтобы вероятность того, что он содержит истинное значение неизвестного параметра была не меньше доверительного уровня.[1]
[1] Закс, 1975
Толерантные интервалы являются по своему смыслу доверительными интервалами, но не для параметров, явно участвующих в задании распределения случайных чисел, а для самих функций распределения. До настоящего момента мы еще не упоминали о доверительном уровне (или уровне доверия), который фигурирует в приведенных определениях. Поскольку речь идет о случайных величинах, то какие-либо утверждения необходимо делать в вероятностной форме. Итак, еще раз дадим определение толерантного интервала: толерантный интервал - это интервал, между границами которого с заданной вероятностью содержится доля распределения не меньшая заданной.
Стоит акцентированно отметить важную особенность толерантного интервала, а именно то, что толерантный интервал содержит в себе некоторую долю распределения, то есть долю всей генеральной совокупности, хотя строится он на основании выборочных значений.
Для дальнейшего использования введем обозначения. Долю совокупности (2), содержащуюся внутри интервала, переобозначим как:
и будем называть ее - доля накрытия. А вероятность, с которой данная доля (4) превышает некоторую заданную, будем называть уровнем доверия . Тогда в математической форме, определение толерантного интервала можно записать как:
где - требуемая доля накрытия генеральной совокупности толерантным интервалом с заданными границами.
Как уже говорилось, толерантный интервал строится на основании выборки некоторого размера , поэтому нам необходимо найти выборочные оценки соответствующих статистик (в случае нормального закона распределения - математического ожидания и стандартного отклонения). В таком случае, границы интервала можно определить как:
Из соотношения (6) видно, что соответствующие границы являются случайными числами. Поэтому, чтобы определить уровень доверия к доле накрытия генеральной совокупности толерантным интерваломмы должны многократно повторить следующие процедуры:
Извлечение выборки заданного размера из генеральной совокупности;
Нахождение оценок необходимых статистик (в общем случае - параметры сдвига и масштаба распределения);
Вычисление соответствующих границ толерантного интервала;
Вычисление доли генеральной совокупности внутри интервала.
Находя долю интервалов, для которых выполняется условиемы получим соответствующий уровень доверия.
Уровень доверия - предел доли интервалов, накрывающих долю выбранной совокупности не менее заданной, при бесконечном повторении метода.[2]
[2] [ГОСТ Р 50779.10—2000, статья 2.61 ]
Другими словами:
где- множество всех значений доли накрытия,- подмножество,- количество повторений процедуры (число статистических испытаний).
Вообще говоря, толерантный интервал не обязательно должен быть центральным, то есть значения толерантных границ в соотношении (4) могут быть не равны друг другу. На рисунках 5 и 6 приведены два отличных друг от друга интервала, содержащих в себе одну и ту же долю распределения. Квадраты, соответствующие значениям границ, помещены для наглядности на функции плотности:
Уровень доверия
Перейдем к вычислению уровня доверия. Разброс случайной величины удобно измерять в единицах параметра масштаба, в нашем случае - в единицах стандартного отклонения. Проиллюстрируем на примере:
В нашем случае - это расстояние от «центра» распределения до одной из толерантных границ, а - соответствующее расстояние в единицах стандартного отклонения. Таким образом, рассчитав уровень доверия к различным значениям доли накрытия для определенных значений коэффициентов мы всегда сможем восстановить границы интервала (соотношение 6) по результатам статистических наблюдений.
Реализуем процедуру расчета, а затем рассмотрим возможные варианты применения толерантных интервалов на практике. Для рабочих задач мне необходима большая статистика и малый шаг вычислительных сеток и , поэтому пришлось реализовывать процедуру на Cи + MPI для запуска на суперкомпьютере. В статье предлагаю использовать Python.
Для начала определим некоторые функции, которые будут нам необходимы.
def cumulative_sum(x):
"""
Возвращает значение функции вероятности нормального распределения в точке x
"""
cumulative_sum = (1 + sc.special.erf(x / 2**0.5)) * 0.5
return cumulative_sum
В модуле stats
библиотеки scipy
также есть реализации функции вероятности для различных распределений.Теперь непосредственно реализуем процедуру вычисления толерантных границ. Вычисления будем производить для ряда значений коэффициентов .
Зададим два одномерных массива, один из которых содержит значения толерантных коэффициентов , а второй - , например:
k1 = np.linspace(0.05, 10, 100, dtype=np.float64)
k2 = np.copy(k1)
Сгенерируем выборку случайных чисел с нормальным законом распределения размера sample_size
. Будем генерировать выборку не один раз, а некоторое число раз num_of_events
, равное числу статистических испытаний
# размер выборки n (или число наблюдений)
sample_size = 10
# число статистических испытаний N (сколько раз повторим процедуру)
num_of_events = 10000
Для каждого отдельного повтора по выборке найдем оценки математического ожидания и стандартного отклонения
sample = np.random.randn(sample_size, num_of_events)
sample_means = sample.mean(axis=0)
sample_stds = sample.std(axis=0)
sample_means
и sample_stds
имеют размерность равную num_of_events
, то есть содержат в себе значения среднего и выборочного стандартного отклонения для каждого из num_of_events
повторов.
В соответствии с выражением (6) вычислим толерантные границы (также для каждого повтора и каждой пары коэффициентов )
mean_grid, k1_grid, k2_grid = np.meshgrid(sample_means, k1, k2)
std_grid, k1_grid, k2_grid = np.meshgrid(sample_stds, k1, k2)
l1 = mean_grid - k1_grid * std_grid
l2 = mean_grid + k2_grid * std_grid
Теперь вычислим значения доли накрытия генеральной совокупности каждым толерантным интервалом в соответствии с выражением (4)
stat_coverages = cumulative_sum(l2) - cumulative_sum(l1)
Итоговая функция для расчета доли накрытия в скрытом блоке:
Функция для расчета доли накрытия
def calc_coverages(sample_size, num_of_events, tolerance_factor_lower, tolerance_factor_upper):
"""
Вычисляет долю накрытия генеральной совокупности с нормальным законом распределения
толерантными интервалами с заданными границами. Розыгрыш событий производится заданное
число раз для выборки заданного размера
Параметры:
1. sample_size - размер генерируемых выборок из нормального распределения
2. num_of_events - число статистических испытаний
3. tolerance_factor_lower - массив нижних толерантных коэффициентов
4. tolerance_factor_upper - массив верхних толерантных коэффициентов
Вычисление производится для каждой пары коэффициентов
Возвращаемые значения:
1. stat_coverages - статистически вычисленная доля накрытия генеральной совокупности (для каждого испытания)
толерантным интервалом с коэффициентами tolerance_factor_lower и tolerance_factor_upper
Размерность массива coverages [len(tolerance_factor_lower)][num_of_events][len(tolerance_factor_upper)]
"""
k1 = tolerance_factor_lower
k2 = tolerance_factor_upper
sample = np.random.randn(sample_size, num_of_events)
sample_means = sample.mean(axis=0)
sample_stds = sample.std(axis=0)
mean_grid, k1_grid, k2_grid = np.meshgrid(sample_means, k1, k2)
std_grid, k1_grid, k2_grid = np.meshgrid(sample_stds, k1, k2)
l1 = mean_grid - k1_grid * std_grid
l2 = mean_grid + k2_grid * std_grid
stat_coverages = cumulative_sum(l2) - cumulative_sum(l1)
return stat_coverages
Имея рассчитанные значения доли накрытия (4) мы найти число тех, которые не меньше заданного значения required_coverage
-
required_coverage = 0.95 # Любое значение в интервале [0, 1]
# ось вдоль которой расположены результаты каждого статистического испытания
event_ax = 1
successes = (stat_coverages > required_coverage).sum(axis=events_ax)
Последним шагом, в соответствии с выражением (7) вычислим уровень доверия как отношение числа успехов к общему числу статистических испытаний. Под успехом в нашем случая подразумевается событие, в котором рассчитанная доля накрытия интервалом оказалась не меньше заданной доли
confidence_level = successes / stat_coverages.shape[events_ax]
В результате мы получили зависимость уровня доверия к доле накрытия от толерантных коэффициентов . Повторив данную процедуру для различных значенийв диапазоне от 0.01 до 1 получим следующий результат:
И, например, для различных размеров выборки, на основании которой строится толерантный интервал:
Из полученных зависимостей следуют общие выводы:
Чем о большей части (доле ) генеральной совокупности необходимо сделать утверждение, тем шире должен быть соответствующий толерантный интервал (большие значения толерантных коэффициентов ) для обеспечения одного и того же уровня доверия . Еще раз отметим: уровень доверия - вероятность сделать ложный вывод о доле нашей совокупности;
Для примера - изменение положения точки, соответствующей уровню доверия , при различных значениях доли накрытия:
Чем меньше размер выборки, на основании которой мы делаем вывод относительной генеральной совокупности, тем шире границы соответствующего толерантного интервала (рисунок 10).
Обработка результатов наблюдений
Один из возможных вариантов применения - анализ надежности систем различного рода. Для примера, на рисунке 12 приведено изменение тока смещения операционного усилителя [3] от поглощенной дозы:
Оригинал:
На рисунке показано ухудшение тока смещения операционного усилителя PM 155 в зависимости от дозы. Было использовано 22 образца из трех различных производственных партий.Среднее значение и граница одностороннего толерантного интервала были рассчитаны для логнормального закона распределения, и [3]
[3] Christian Poivey. Radiation Hardness Assurance for Space Systems / NASA GSFC, 2002. «Обеспечение радиационной стойкости космических систем».
Смоделируем похожую ситуацию. Пусть необходимо сделать вывод о работоспособности партии (генеральной совокупности) изделий при воздействии определенного фактора, например, ионизирующего излучения космического пространства. Для испытаний на радиационную стойкость из всей партии извлекается выборка размера. В качестве модели, описывающей зависимость значения параметра критерия годности (ПКГ) от воздействующего фактора, выберем модель вида:
где - напряжение, являющееся параметром критерия годности; - поглощенная доза излучения; - коэффициент с нормальным законом распределения.
Соответствующий код
loc = 0
scale = 0.01
voltage = lambda a, dose: a * dose
dose = np.linspace(0, 100, 100) # поглощенная доза
lcb = np.zeros_like(dose) - 1 # нижняя критическая граница ПКГ
ucb = np.zeros_like(dose) + 1 # верхняя критическая граница ПКГ
sample_size = 10
voltages = np.empty(shape=(sample_size, dose.shape[0]))
for i in range(sample_size):
a = sc.stats.norm.rvs(loc=loc, scale=scale)
voltages[i] = voltage(a, dose)
fig, ax = plt.subplots(figsize=(9, 7))
for v in voltages:
ax.plot(dose, v, lw=0.7)
average = voltages.mean(axis=0)
ax.plot(dose, lcb, lw=2, c='#00FF00', label='Критическое значение ПКГ')
ax.plot(dose, ucb, lw=2, c='#00FF00')
ax.plot(dose, average, lw=3, c='b', label='Среднее значение ПКГ')
Результат приведен на рисунке 13:
Зелеными линиями на рисунке обозначены верхняя и нижняя критическая граница параметра критерия годности, то есть значение напряжения, при достижении которого изделие считается вышедшим из строя (временная потеря работоспособности, необратимый отказ и так далее).
С помощью толерантных интервалов по результатам испытаний определим с % ошибкой вероятность сохранения работоспособности при соответствующем уровне воздействия. То есть, для каждого значения дозы мы будем искать долю всех изделий для которой можно сделать вывод о нахождении ПКГ внутри интервалас уровнем доверия %.
Выполним следующие действия:
Для каждого значения уровня воздействия по результатам испытаний найдем толерантные коэффициенты
Для каждой пары коэффициентов найдем значение (рисунок 8), для которого выполняется условие:
Итоговая функция для обработки результатов
def search_nearest(array, target):
return np.argmin(np.abs(array - target))
def get_coverages(confidence_arr, coverages_mesh, required_confidence, voltages, lcb, ucb, tolerance_mesh):
"""
Возвращает значение доли накрытия P, для которого уровень доверия максимально близок к заданному
Параметры:
1. confidence_arr - трехмерный массив значений уровня доверия, где первая ось соответствует
каждому значению доли накрытия; вторая и третья - толерантным коэффициентам k1 и k2
2. coverages_mesh - одномерный массив значений доли накрытия, для которых расчитан confidence_arr
3. required_confidence - требуемый уровень доверия к результату
4. voltages - массив, содержащий результаты испытаний (зависимости напряжения от дозы)
5. lcb - нижняя граница параметра критерия годности (массив)
6. ucb - верхняя граница параметра критерия годности (массив)
7. tolerance_mesh - одномерный массив значений толерантных коэффициентов (узлы расчетной сетки)
Возвращаемое значение:
1. coverages - массив значений доли накрытия (для каждого значения уровня воздействия),
для которых уровень доверия равен требуемому required_confidence
"""
mean = voltages.mean(axis=0)
std = voltages.std(axis=0)
k1_exp = (mean - lcb) / std
k2_exp = (ucb - mean) / std
k1_indices = np.array([search_nearest(tolerance_mesh, k) for k in k1_exp])
k2_indices = np.array([search_nearest(tolerance_mesh, k) for k in k2_exp])
coverages = np.empty_like(mean)
for i in range(k1_indices.shape[0]):
distance_init = 1e6
for j, arr in enumerate(confidence_arr):
confidence_level = arr[k1_indices[i]][k2_indices[i]]
distance = np.abs(confidence_level - required_confidence)
if distance <= distance_init:
distance_init = distance
coverages[i] = coverages_mesh[j]
return coverages
В результате получаем зависимость следующего вида:
Выбрав, например, максимально допустимую вероятность отказа % можем получить оценку критического уровня воздействия - максимальную поглощенную дозу излучения, которую в данном случае нельзя превышать для выполнения требования:
Заключение
В заключение хотелось бы сказать, что, конечно, область возможного применения толерантных интервалов не ограничивается одной лишь теорией надежности, и приведенный пример использования далеко не единственный, а просто один из многих. Как мне кажется, в принципе, данная идея может быть использована в любой области, затрагивающей вопросы статистической обработки данных. Например, возможно также осуществление обработки (корректировки поведения каких-либо систем на основе поступающих данных) не только в статике, но и в динамике и многое другого.
Мы рассмотрели только случай нормального распределения, но общая концепция может быть распространена и на другие законы распределения, в том числе и распределение Коши. В таком случае, необходимо будет выбрать соответствующие методы построения оценок параметров сдвига и масштаба. Также существуют методы построения так называемых «свободных от закона распределения» толерантных интервалов; подробнее можно почитать в книге:
[4] Кендалл М., Стюарт А. Статистические выводы и связи. М., Наука, Физматлит, Т. 2, 1973. — 899 с.
Вообще, все три тома хорошие, особенно могут быть полезны тем, кто занимается теоретической статистикой.
На этом, наверное, все. В данной статье я постарался поделиться с вами личным опытом знакомства с толерантными интервалами и понагляднее описать некоторые моменты, надеюсь, что кому-то приведенная информация сможет оказаться полезной. Буду рад вашему мнению, замечаниям или критике. Всем желаю здоровья и творческих успехов. Спасибо.
Комментарии (10)
gumyar60
12.11.2023 17:35"Не читал, но не нравится", - круче некуда.
MasterMentor
12.11.2023 17:35+2Немного не так. "Пробовал прочесть, но отказался от дальнейшего чтения с обоснованием почему". Так вернее. :)
Colorbit
12.11.2023 17:35Не совсем понял, чем "толерантный доверительный интервал" отличается от обычного доверительного интервала?
danisgrpv Автор
12.11.2023 17:35+1Здравствуйте. Коротко говоря: доверительный интервал - интервал для оценки параметра распределения, в таком случае уровень доверия - доля всех возможных значений параметра внутри интервала; толерантный интервал - интервал для самого распределения, содержит в себе его определенную часть.
По поводу границ. Как мне кажется, если мы строим доверительный интервал, то мы ищем границы функции плотности распределения оценки (назовем ее ) истинного параметра некоторого распределения . Когда мы говорим о толерантном интервале - мы ищем границы функции плотности распределения исходных случайных чисел (то есть, самого распределения , а не распределения его оценки).
Таким образом, просто оба этих интервала находятся в разных пространствах. Поскольку доверительный интервал - для конкретного значения, то обходятся одним параметром - уровнем доверия; в случае интервала не для числа, а для одномерного распределения (то есть в случае толерантного интервала) размерность пространства становится больше - к уровню доверия добавляется второй параметр - доля распределения, о которой делается наш вывод.
Надеюсь, что ничего особо не напутал и что-то смог объяснить)
Nergal2004
12.11.2023 17:35Толерантный интервал интервал определяется "достаточной статистикой". А достаточной статистики может не существовать в принципе.
danisgrpv Автор
12.11.2023 17:35Здравствуйте. Да, та формулировка, которая из Википедии, - про толерантные интервалы для параметризованных распределений. Для их построения, действительно, необходимо наличие достаточных статистик.
Еще есть понятие «свободных от распределений толерантных интервалов», подробнее можно почитать у Кендалла [4] . Про них ничего не могу сказать, сам еще не применял.
MasterMentor
>>буду рад вашему мнению и замечаниям
О себе
Подписан на статьи по словам "Forth, Демосцена, Математика, Ненормальное программирование".
О содержании
Вижу, Ваша статья хорошая, проработанная. Однако, её не читал, хотя и пробовал: форма отбивает желание. Отсюда и не ставил оценок.
О форме
"Толерантных интервалов", "доверительными интервалами", "квантиль" - на людей, понимающих математику эти т.н. "термины" действуют как стоп-лист. Ведь, как Вы сами расшифровываете, т.н. "квантиль" - "представляет собой границу". Для чего забивать голову некими "новыми" терминами, коль есть устоявшиеся, общеизвестные? К примеру, чем Вам не угодили термины "верхняя/нижняя граница", либо "асимпотота"? (А открыть т.н. "Википедию" - "источник знаний" "обо всём" "ото всех" - так для этого большого ума не нужно. Полагаю, она для того и создана.)
И т.н. "определение" т.н. "толерантных интервалов" там есть.
Вопрос: следует ли "строгать" новый термин под частный случай?! Где обоснование, такого решения? ("кто-то где-то в какой-то книге написал" - слабый аргумент). Отсюда для аудитории знающей и любящей математику - Ваша статья проходит мимо.
Что до любителей "модных словечек" - так содержание статьи им до "одного места". И, поверьте, это место - не голова. Их интересы: "бабло", "тачки" и "власть". Поэтому статья опять проходит мимо (не "заметят" и не "оценят").
Отсюда вывод: для данной статьи аудитории нет. Либо, что то же самое, её прочтут единицы, а поймут - ещё менее. Статью ждёт забвение.
О времени
Есть время, когда можно и "вашим и нашим". Есть время, - когда это просто необходимо. Но сейчас время не то. Просто определитесь с кем Вы и для кого пишете. И идите этим путём. Поверьте, любителей "толерантных интервалов" - предостаточно. Но для них математика - лишь фетиш: сегодня одно модное словцо, а завтра - другое. :)
ММ
danisgrpv Автор
Здравствуйте. Отвечу по порядку:
По поводу новых терминов, таких как «квантиль», «доверительный интервал» - термины общеизвестны и являются устоявшимися в академической среде, упоминаются в ГОСТах, например, в [1]. Квантиль и процентиль упоминается [2] в работе Карла Пирсона, что датируется 1916 годом, может быть есть и более ранние упоминания - искать не стал.
По поводу модных слов. Понятия «толерантный интервал», «доля накрытия» - также в соответствии с ГОСТ [3] из каталога национальных стандартов Российской Федерации, видимо все из-за того, что там много любителей "модных словечек".
По поводу Википедии. Информацией Википедию наполняют пользователи - люди, которые, возможно, тоже прочитали "какие-то" книги "каких-то" авторов. По поводу того, что считать авторитетным источником - выбор каждого.
Про аудиторию, любящую и знающую математику. В каждой научной области есть устоявшаяся терминология, которая служит для более удобного и лаконичного изъяснения между соответствующими специалистами, придерживаться ее или нет - также личное дело каждого. Мое мнение - для любителей математики (или науки в целом) незнакомая терминология не помеха.
На этом, пожалуй, все. В любом случае, спасибо за обратную связь!
Источники:
AndreyDmitriev
А я вот прочитал с большим интересом, особенно последний пример (я закончил физтех, у нас был семестр статистики, но весьма рудиментарный). Я работаю в области неразрушающего контроля и есть сценарии, кода детали проверяются лишь частично, исходя из статистической вероятости появления дефектов литья, пример в статье во многом с этим перекликается. В чём-то предыдущий оратор прав — статья довольно быстро уйдёт с главной хабра и её таки ждёт определённое "забвение", но совсем она не исчезнет, и найдутся люди, которые её найдут, и которым она будет полезна, как мне. Ссылки также весьма ценные, я с удовольствием полистал вчера вечером Кендалла и Стюарта, так что "автор, пиши ещё".
danisgrpv Автор
Здравствуйте! Спасибо большое за проявленный интерес. Рад, что статья оказалась полезной.
По поводу забвения - на мой взгляд, ничего страшного в этом и нет, что-то приходит, что-то уходит. Как говорил де Тревиль в романе Александра Дюма - се ля ви = )
Появится время - постараюсь поделиться чем-нибудь еще. Желаю творческих успехов и всего доброго)