Расстояние Кука - это масштабированное изменение подгоняемых значений, которое полезно для идентификации отклонений в значениях X (наблюдения для переменных предиктора). Расстояние Кука показывает влияние каждого наблюдения на соответствующие значения отклика. Наблюдение с расстоянием Кука больше, чем в три раза среднее расстояние Кука может быть отклонением.
Каждый элемент на расстоянии D Кука представляет собой нормализованное изменение соответствующих значений отклика из-за удаления наблюдения. Расстояние наблюдения Кука i
) 2p MSE,
где
j - j-ое совпадающее значение отклика.
(i) - значение j-ой подогнанной реакции, где посадка не включает в себя наблюдение i.
MSE - это среднеквадратичная ошибка.
p - число коэффициентов в регрессионной модели.
Расстояние Кука алгебраически эквивалентно следующему выражению:
hii) 2),
где ri - i-й остаток, а hii - i-е значение рычага.
После подгонки модели mdl, например, можно использовать fitlm или stepwiselm кому:
Отображение значений расстояния Кука путем индексирования в свойство с помощью точечной нотации.
mdl.Diagnostics.CooksDistance
CooksDistance является вектором столбца n-by-1 в Diagnostics таблицы LinearModel объект.Постройте график значений расстояния Кука.
plotDiagnostics(mdl,'cookd')
plotDiagnostics функции LinearModel объект.
В этом примере показано, как использовать Cook's Distance для определения отклонений в данных.
Загрузите образцы данных и определите независимые переменные и переменные ответа.
load hospital
X = double(hospital(:,2:5));
y = hospital.BloodPressure(:,1);Подгонка модели линейной регрессии.
mdl = fitlm(X,y);
Постройте график значений расстояния Кука.
plotDiagnostics(mdl,'cookd')
Пунктирная линия на рисунке соответствует рекомендуемому пороговому значению, 3*mean(mdl.Diagnostics.CooksDistance). График имеет некоторые наблюдения со значениями расстояния Кука, превышающими пороговое значение, которое для этого примера равно 3 * (0,0108) = 0,0324. В частности, существуют два значения расстояния Кука, которые относительно выше других, которые превышают пороговое значение. Возможно, потребуется найти и опустить их из данных и перестроить модель.
Найдите наблюдения со значениями расстояния Кука, превышающими пороговое значение.
find((mdl.Diagnostics.CooksDistance)>3*mean(mdl.Diagnostics.CooksDistance))
ans = 10×1
2
13
28
44
58
70
71
84
93
95
Найдите наблюдения со значениями расстояния Кука, которые относительно больше, чем другие наблюдения с расстояниями Кука, превышающими пороговое значение.
find((mdl.Diagnostics.CooksDistance)>5*mean(mdl.Diagnostics.CooksDistance))
ans = 2×1
2
84
[1] Нетер, Дж., М. Х. Кутнер, С. Дж. Нахтсхайм и В. Вассерман. Примененные линейные статистические модели. 4-й ред. Чикаго: Ирвин, 1996.
fitlm | LinearModel | plotDiagnostics | stepwiselm