Регрессионная кулинария

Одна из распространенных проблем с регрессией в том, что данные обычно содержат выбросы – редкие наблюдения, которые делают оценки коэффициентов смещенными. Скажем, если мы пытаемся использовать характеристики отдельных людей, то неожиданым может считаться возраст 2000 лет, наличие  180 детей и пол “пенсионер”.
Обычно, такие выбросы нужно внимательно осмотреть и убедиться в том, что они результат ошибки заполения и не являются характерными для нашей целевой группы.
Как найти выбросы, если мы не полагаемся на собственную способность увидеть их? Можем найти отдельные наблюдения, которые сильно влияют на оценки коэффициентов модели, рассчитав расстояние Кука. Это расстояние рассчитывается для каждого наблюдения следующим образом:
Не буду здесь расписывать переменные – они есть в статье. Главное, что расстояние для наблюдения i – это сумма разниц между оценками всех наблюдений с помощью регрессии, построенной на всем наборе наблюдений, и регрессии, построенной без наблюдения i.
Для примера возьмем данные из [1] по весу людей, страдающих анорексией, до и после лечения:
Оценим линейную модель LinearModelFit[]:
Мы теперь хотели бы определить, какие из наблюдений имеют большое расстояние Кука и являются выбросами. Используем правило [2], согласно которому выбросами являются наблюдения с 
Здесь показаны расстояния для каждого наблюдения – mod[“CookDistances”], красная линия на уровне 4/n:
Найдем четыре наблюдения, которые, как кажется, выбиваются из общего ряда:
clean = Extract[anarox, 
   Position[mod[“CookDistances”], x_ /; x < 4/Length[anarox]]];
И построим новую модель на очищенных данных:
Здесь синей линией показана новая модель, красные точки – удаленные наблюдения.
Наконец мы можем собрать все вместе и получить функцию, которая самостоятельно  избавится от выбросов и вернет построенную на очищенных данных модель:

cookedReg[l_List] := Module[{x, vars, cooks, clean},
  vars = Table[Subscript[x, i], {i, Length[First[l]] – 1}];
  cooks = LinearModelFit[l, vars, vars][“CookDistances”];
  clean = Extract[l, Position[cooks, x_ /; x < 4/Length[l]]];
  LinearModelFit[clean, vars, vars]
  ]


1.   A. Agresti, B. Finlay, “STATISTICAL METHODS FOR THE SOCIAL SCIENCES”, Prentice Hall, 4th edition, 2008

2. Bollen, Kenneth A.; and Jackman, Robert W. (1990); Regression diagnostics: An expository treatment of outliers and influential cases, in Fox, John; and Long, J. Scott (eds.); Modern Methods of Data Analysis (pp. 257-91). Newbury Park, CA: Sage

Регрессионная кулинария