Критерий Дарбина-Уотсона (Durbin–Watson statistic) — один из самых распространенных критериев для проверки автокорреляции.
Данный критерий входит в стандартный инструментарий python:
присутствует в таблице выдачи результатов регрессионного анализа модуля линейной регрессии Linear Regression;
К сожалению, стандартные инструменты python не позволяют получить табличные значения статистики критерия Дарбина-Уотсона, нам предлагается воспользоваться методом грубой оценки: считается, что при расчетном значении статистики критерия в интервале [1; 2] автокорреляция отсутствует (см. Durbin–Watson statistic). Однако, для качественного статистического анализа такой подход неприемлем.
Представляет интерес реализовать в полной мере критерий Дарбина-Уотсона средствами python, добавив этот важный критерий в инструментарий специалиста DataScience.
В данном обзоре мы коснемся только собственно критерия Дарбина-Уотсона и его применения для выявления автокорреляции. Особенности построения регрессионных моделей и прогнозирования в условиях автокорреляции (двухшаговый метод наименьших квадратов и пр.) мы рассматривать не будем.
Как пересчитать смету из старой формы в новую методику в Грандсмте с построчным начислением индексов
Применение пользовательских функций
Как и в предыдущем обзоре, здесь будут использованы несколько пользовательских функций для решения разнообразных задач. Все эти функции созданы для облегчения работы и уменьшения размера программного кода. Данные функции загружается из пользовательского модуля my_module__stat.py, который доступен в моем репозитории на GitHub.
Вот перечень данных функций:
graph_plot_sns_np — функция строит линейный график средствами seaborn;
graph_regression_plot_sns — функция строит график регрессионной модели и график остатков средствами seaborn;
regression_error_metrics — функция возвращает ошибки аппроксимации регрессионной модели;
graph_hist_boxplot_probplot_sns — функция позволяет визуализировать исходные данные для одной переменной путем одновременного построения гистограммы, коробчатой диаграммы и вероятностного графика средствами seaborn; имеется возможность выбирать, какие графики строить (h — hist, b — boxplot, p — probplot);
norm_distr_check — проверка нормальности распределения исходных данных с использованием набора из нескольких статистических тестов.
Goldfeld_Quandt_test, Breush_Pagan_test, White_test — проверка гетероскедастичности с использование тестов Голдфелда-Квандта, Бриша-Пэгана и Уайта соответственно;
graph_regression_pair_predict_plot_sns — прогнозирование: построение графика регрессионной модели (с доверительными интервалами) и вывод расчетной таблицы с данными для заданной области значений X.
В процессе данного обзора мы создаем пользовательскую функцию Durbin_Watson_test, которая проверяет гипотезу о наличии автокорреляции (она тоже включена в пользовательский модуль my_module__stat.py).
Основы теории
Информацию о критерии Дарбина-Уотсона можно почерпнуть в [1, с.659], [2, с.117], [3, с.239], [4, с.188], а также:
Как начислять индексы Минстроя на ФЕР(Федеральные Единичные Расценки) в 2020 году
Итак, предположим, мы рассматриваем регрессионную модель:
или в матричном виде:
Критерий Дарбина-Уотсона применяется в ситуации, когда регрессионные остатки связаны автокорреляционной зависимостью 1-го порядка [2, с.111]:
где — некоторое число (), а случайные величины удовлетворяют требованиям, предъявляемым к регрессионным остаткам классической модели (т.е. равенство нулю среднего значения, постоянство дисперсии и некоррелированность между собой):
Проверяется нулевая гипотеза об отсутствии автокорреляции:
Альтернативной гипотезой может быть:
существование отрицательной автокорреляции (левосторонняя критическая область):
существование положительной автокорреляции (правосторонняя критическая область):
существование автокорреляции вообще (двусторонняя критическая область):
Расчетное значение статистики критерия Дарбина-Уотсона имеет вид:
где — остатки (невязки) регрессионной модели.
По таблицам (см. [1, с.659], [2, с.402], [3, с.291]) в зависимости от уровня значимости (5%, 2.5%, 1%), числа параметров регрессионной модели (кроме свободного члена ) (от 1 до 5) и объема выборки (от 15 до 100) определяются критические значения статистики Дарбина-Уотсона: нижний и верхний предел.
Правила принятия гипотез по критерию Дарбина-Уотсона выглядят довольно своеобразно — критические значения образуют пять областей различных статистических решений (причем критические границы принятия и непринятия не совпадают):
есть положительная автокорреляция
есть отрицательная автокорреляция
Есть очень удачная мнемоническая схема, приведенная в [3, с.240]:
Особенности критерия Дарбина-Уотсона:
Критические значения критерия табулированы для объема выборки от 15 до 100, аппроксимаций мне обнаружить не удалось. При меньших значениях критерий применять нельзя, при больших — очевидно, приходиться пользоваться грубым оценочным правилом: при расчетном значении статистики критерия в интервале [1; 2] автокорреляция отсутствует (см. https://en.wikipedia.org/wiki/Durbin–Watson_statistic).
Критерий позволяет выявить только автокорреляцию 1-го порядка. Отклонение нулевой гипотезы не означает, что автокорреляции нет вообще — возможно наличие автокорреляции более высоких порядков.
Критерий построен в предположении, что регрессоры и ошибки не коррелированы, поэтому его нельзя применять, в частности, для моделей авторегрессии [4, с.191].
Критерий не подходит для моделей без свободного члена .
Критерий имеет зону неопределенности, когда нет оснований ни принимать, ни отвергать нулевую гипотезу.
Между статистикой критерия и коэффициентом автокорреляции существует приближенное соотношение:
Существуют и другие критерии для проверки автокорреляции (тест Бройша-Годфри, Льюнга-Бокса и пр.).
Как было указано выше, большой проблемой является отсутствие табличных значений статистики критерия Дарбина-Уостона в стандартном инструментарии python. Для реализации возможностей данного критерия в полном объеме нам потребуется оцифровка весьма объемных таблиц критических значений.
Оцифровка табличных значений статистики критерия Дарбина — Уотсона
Я решил добавить в обзор этот раздел, хотя, строго говоря, можно было обойтись и без него, а сразу воспользоваться оцифрованными таблицами статистики критерия Дарбина-Уотсона.
Однако, если мы хотим выполнять качественный статистический анализ, неизбежно придется работать с большим количеством статистических критериев и далеко не все из них реализованы в python. Критерий Дарбина-Уотсона — это только один из многих. Количество критериев, рассматриваемых в литературе по прикладной статистике в последние годы постоянно увеличивается.
Специалисту придется реализовывать многие критерии самостоятельно и одна из проблем, с которой придется столкнуться — это таблицы критических значений. Далеко не все табличные значения имеют аппроксимации, а значит придется каким-то образом оцифровывать эти таблицы. Небольшие таблицы можно сохранить в файлах вручную, а вот такой подход с объемными таблицами (как в нашем случае) — это слишком непроизводительно и нерационально.
В общем, на мой взгляд, представляет интерес разобрать пример оцифровки статистических таблиц на примере нашего критерия Дарбина-Уотсона — это позволит специалистам сэкономить человеко-часы работы и облегчить совершенствование инструментов статистического анализа.
Замечу сразу, что я не являюсь глубоким специалистом в области анализа и обработки изображений и текстов на python — это не совсем мой профиль. Профессионалы в этой области, возможно, раскритикуют то, как решается поставленная задача и предложат более удачное решение. Если будет так — то заранее спасибо. Я же эту задачу старался решить наиболее простым и рациональным способом, доступным для широкого круга специалистов. На всякий случай могу процитировать Давоса Сиворта из «Игры престолов»: «Простите за то, что увидите».
Алгоритм действий:
Для оцифровки я использовал таблицы, приведенные в [3, с.290-292].
Сканируем таблицы, сохраняем в виде jpg-файлов (Durbin_Watson_test_1.jpg, Durbin_Watson_test_2.jpg, Durbin_Watson_test_3.jpg) в папке text_processing, расположенной внутри папки с рабочим .ipynb-файлом:
Распознаем текст (я воспользовался онлайн-сервисом https://convertio.co/), полученные текстовые файлы Durbin-Watson-test-1.ocr.txt, Durbin-Watson-test-2.ocr.txt, Durbin-Watson-test-3.ocr.txt также помещаем в папке text_processing.
Откроем файлы, запишем содержимое файлов в переменные, каждая из которых соответствует одной странице:
С остальными файлами — действуем аналогично:
Видим, что переменные представляют собой списки, элементами которых является строки.
Для облегчения дальнейшей обработки данных создадим список, элементами которого являются переменные-страницы:
Далее я не стал публиковать здесь скриншоты с обработкой страниц — из-за экономии места. В ipyng-файле, который доступен в моем репозитории, весь процесс обработки представлен достаточно подробно.
Исключаем все строки, которые начинаются не с цифр; при этом воспользуемся алгоритмом перезаписи списка:
Исключаем из текста управляющие символы (t, n) — с помощью регулярных выражений (regex) (модуль re):
Удаляем все символы, кроме цифр, точек, запятых и пробелов:
Заменяем запятые на точки:
Сохраняем данные в DataFrame — для этого создадим список Durbin_Watson_list_df, элементами которого являются отдельные DataFrame, каждый из которых соответствует отдельной странице:
Исправляем вручную отдельные аномалии, возникшие при распознавании отсканированных данных — к сожалению, работы вручную совсем избежать не удается.
Корректируем DataFrame, соответствующий 1-й странице:
Корректируем DataFrame, соответствующий 2-й странице:
Корректируем DataFrame, соответствующий 3-й странице:
Обращаем внимание, что откорректированные вручную значения являются числовыми, а все остальные значения — еще имеют строковый тип.
11. Преобразуем значения из строкового в числовой тип:
Корректируем структуру DataFrame:
меняем индекс — индексом теперь будет объем выборки n
каждый DataFrame снабжаем мультииндексом по столбцам (подробнее см. [7, с.169])
Объединяем отдельные DataFrame в один:
Итак, мы сформировали DataFrame с оцифрованными данными таблиц критических значений статистики Дарбина-Уотсона. Получить доступ к данным теперь очень просто — например, нам требуется вывести табличные значения статистики критерия при объеме выборки , доверительной вероятности и числе параметров регрессионной модели :
Построим график табличных значений.
График получился весьма объемным — 3х5 элементов — однако он необходим: на графике можно увидеть те ошибки (пики и впадины), которые мы могли пропустить при ручной обработке ранее (некорректно отсканированные и распознанные цифры), тогда придется вернуться к этапу 10.
Сохраняем полученный DataFrame в csv-файл, помещаем его в папку table, расположенную внутри папки с рабочим .ipynb-файлом (в которой папку table у нас хранятся файлы с данными из статистических таблиц):
Табличные значения статистики критерия Дарбина-Уотсона у нас теперь имеются, можем приступать к созданию пользовательской функции.
Создание пользовательской функции для реализации критерия Дарбина — Уотсона
Рассчитать статистику критерия Дарбина-Уотсона мы можем с помощью функции statsmodels.stats.stattools.durbin_watson.
Создадим пользовательскую функцию Durbin_Watson_test для проверки гипотезы об автокорреляции:
Протестируем созданную функцию — будем моделировать временные ряды с различными свойствами и выполнять проверку автокорреляции:
Смоделируем временной ряд с трендом, без автокорреляции остатков:
Смоделируем временной ряд без тренда:
Смоделируем временной ряд с трендом, с положительной автокорреляцией:
Смоделируем временной ряд с трендом, с отрицательной автокорреляцией:
Смоделируем временной ряд без тренда, с положительной автокорреляцией:
Смоделируем временной ряд без тренда, с отрицательной автокорреляцией:
Конечно, данный вычислительный эксперимент не может претендовать на всеобъемлемость, однако определенный любопытный предварительный вывод можно сделать: при наличии любого тренда (даже если этот тренда представляет собой равенство постоянной величине ) критерий Дарбина-Уотсона выдает нам наличие положительной автокорреляции (даже если в модели автокорреляция не заложена нет или она отрицательная). Такой вывод нужно исследовать более глубоко, но это не входит в цель данного обзора. Специалист должен помнить об особенностях критерия Дарбина-Уотсона.
Теперь мы можем перейти к практическим примерам.
Пример 1: проверка автокорреляции модели временного ряда
Формирование исходных данных
В качестве исходных данных рассмотрим динамику показателей индексов пересчета сметной стоимости проектно-изыскательских работ в РФ. Эти показатели ежеквартально публикует Министерство строительства и ЖКХ РФ, а все проектные и изыскательские организации используют эти показатели при составлении смет на свои работы.
В данном случае мы имеем набор показателей в виде временного ряда, для которого будем строить регрессионную модель долговременной тенденции (тренда), и остатки этой регрессионной модели будем исследовать на автокорреляцию.
Не будем подробно останавливаться на содержимом файла и его первичной обработке — это выходит за пределы данного обзора. Специалисты, причастные к сфере строительства и проектирования, поймут, а для остальных специалистов эти цифры можно воспринимать по аналогии с индексами инфляции Росстата и Минэкономразвития.
Прочитаем из этого файла интересующие нас данные — индексы изменения сметной стоимости проектных работ к уровню цен на 01.01.2001 г.:
Сохраним также вспомогательные (технические) переменные, необходимые при анализе временных рядов — дату (Date) и номер наблюдения (T):
Для удобства дальнейшей работы сформируем сформируем отдельный DataFrame:
Визуализация
Построение и анализ регрессионной модели
Построим линейную регрессионную модель и проведем ее экспресс-анализ:
Ошибки аппроксимации модели:
Проверка нормальности распределения остатков:
Как видим, результат совпадает со значением статистики критерия в таблице выдачи регрессионного анализа.
Выводы по результатам анализа модели:
Итак, мы провели статистический анализ регрессионной модели и установили:
Регрессионная модель хорошо аппроксимирует фактические данные.
Остатки модели имеют нормальное распределение (хотя результаты тестов противоречивы).
Коэффициент детерминации значим; модель объясняет 97% вариации независимой переменной.
Коэффициенты регрессии значимы.
Тест критерия Дарбина-Уотсона свидетельствует о наличии значимой положительной автокорреляции остатков.
Резюме — несмотря на вроде бы формально хорошие качественные показатели, нам следует признать эту модель некачественной и отвергнуть по следующим негативным причинам:
На графике модели хорошо заметна точка излома, которая говорит о смене тенденции (существуют специальные статистические тесты для проверки гипотез о смене тенденции, например, тест Чоу, но мы в данном обзоре рассматривать их не будем).
График остатков показывает нам крайне неприглядную картину: на начальном этапе тенденции явно прослеживаются колебания, а после точки излома тенденция вообще кардинально меняется.
Противоречивость тестов проверки нормальности распределения остатков.
Наличие автокорреляции. Явление автокорреляции может возникать в случае смены тенденции [5, с.118].
Тот факт, что распределение остатков признается нормальным по результатам таких тестов как Шапиро-Уилка, Эппса-Палли, Андерсона-Дарлинга может иметь разные причины, например, мы можем иметь дело со смесью двух распределений. Этот вопрос требует отдельного тщательного исследования.
Применение построенной модели приведет к ошибке, так как модель хорошо аппроксимирует существующие данные, но из-за смены тенденции неспособна дать качественный прогноз. Проиллюстрировать это можно, построив доверительный интервалы прогноза (формально мы можем это сделать, так как распределение остатков признано нормальным):
Нет, такой прогноз нам не нужен.
Пример 2: проверка автокорреляция регрессионной модели
Формирование исходных данных
Рассмотрим пример множественной линейной регрессионной модели, приведенный в источнике [6, с.192].
В качестве исходных данных рассматриваются ряд макроэкономических показателей США за 1960-1985 гг. (в сопоставимых ценах 1982 г., млрд.долл):
DPI — годовой совокупный располагаемый личный доход;
CONS — годовые совокупные потребительские расходы;
ASSETS — финансовые активы населения на начало календарного года.
Предполагается, что между переменной CONS и регрессорами DPI, ASSETS имеется линейная регрессионная связь.
Исходные данные содержаться в файле Macroeconomic_indicators_USA_1960_1985.csv, который помещен в папку data.
Визуализация
Построение и анализ регрессионной модели
Построим линейную регрессионную модель и проведем ее экспресс-анализ:
Ошибки аппроксимации модели:
Проверка нормальности распределения остатков:
Выводы по результатам анализа модели:
Как видим, в целом результаты расчетов совпадают с результатами из первоисточника [6], в части выявления автокорреляции аналогично.
Информация к размышлению.
Анализ показывает, что модель хорошо аппроксимирует фактические данные, но имеет место отклонение от нормального закона распределения остатков, противоречивые выводы о гетероскедастичности и наличие автокорреляции, то есть модель некачественная.
Также мы видим, что динамика макроэкономических показателей свидетельствует о наличии трендов, однако, если в модель добавить еще один фактор — год или номер наблюдения — то, этот фактор окажется незначимым.
В дальнейшем автор при анализе остатков модели [6, с.198] выявляет структурный сдвиг (обусловленный мировым топливно-энергетическим кризисом в 1973 г.) и вводит в модель фиктивные переменные, учитывающие этот структурный сдвиг
Итоги
Итак, подведем итоги:
мы рассмотрели способы реализации в полной мере критерия Дарбина-Уотсона средствами python, создали пользовательскую функцию, уменьшающую размер кода;
разобрали пример оцифровки таблицы критических значений статистического критерия для реализации пользовательской функции.
Надеюсь, данный обзор поможет специалистам DataScience в работе.
Литература
Кобзарь А.И. Прикладная математическая статистика. Для инженеров и научных работников. — М.: ФИЗМАТЛИТ, 2006. — 816 с.
Айвазян С.А. Прикладная статистика. Основы эконометрики: В 2 т. — Т.2: Основы эконометрики. — 2-е изд., испр. — М.: ЮНИТИ-ДАНА, 2001. — 432 с.
Фёрстер Э., Рёнц Б. Методы корреляционного и регрессионного анализа / пер с нем. — М.: Финансы и статистика, 1983. — 302 с.
Магнус Я.Р. и др. Эконометрика. Начальный курс — М.: Дело, 2004. — 576 с.
Тихомиров Н.П., дорохина Е.Ю. Эконометрика. — М.: Экзамен, 2003. — 512 с.
Носко В.П. Эконометрика. Кн.1. Ч.1, 2. — М.: Издательский дом «Дело» РАНХиГС, 2011. — 672 с.
Вандер Плас Дж. Python для сложных задач: наука о данных и машинное обучение. — СПб: Питер, 2018. — 576 с.
Источник: habr.com
Применение ресурсно-индексного метода в строительстве.
Применение ресурсно-индексного метода в строительстве.
Переход на ресурсно-индексный метод ценообразования в строительной отрасли Российской Федерации запланирован с 2023 года.
На основании обращений субъектов РФ и отраслевых госкомпаний значительно расширена номенклатура индексов изменения сметной стоимости строительства.
Ведется работа над новым механизмом, который позволит перейти от ручного режима к системному подходу в пересчете цены контракта.
Важным направлением является создание единого правового пространства государств – участников СНГ в области строительства путем формирования и совершенствования нормативно-правовой базы.
Источник: www.ekcpertiza.ru
Лишь половина регионов РФ предоставила материалы для расчета индексов для стройки
Москва. 11 апреля. ИНТЕРФАКС-НЕДВИЖИМОСТЬ- Только половина регионов РФ предоставила необходимые материалы для расчета индексов ценообразования в строительстве, сообщил замруководителя Главгосэкспертизы Сергей Лахаев.
«Индексы изменения сметной стоимости будут пересчитывать ежеквартально расчетным методом. Поручение было дано министром, чтобы к 8 числу уже представить все необходимые материалы для расчета индексов расчетным методом, но, к сожалению, могу сказать, что только половина субъектов с этой задачей справились.
Жаловаться все горазды, а как дело дошло до предоставления документов, половина не готова, это при том, что все отчитались о создании центров. Сейчас мы получаем письма, что нужно время, деньги. Тут, наверное, мы видим выход в помощи со стороны НОСТРОЯ, чтобы помочь коллегам. Эта работа нужна всем подрядчикам, заказчикам и не позволит «просадить» строительную отрасль», — отметил Лахаев в ходе расширенного заседания комиссии по вопросам ценообразования в строительстве и технологическому и ценовому аудиту Общественного совета при Минстрое России «Роль СРО в развитии системы ценообразования в строительстве».
Как добавил глава НОСТРОЯ Антон Глушков, организация готова поддержать эту инициативу.
«Вы нам отстающие регионы выгрузите, мы тогда в рамках СРО с этими отстающими регионами решим, чтобы они оперативно отработали, потому что это нужно в первую очередь субъектам», — согласился Глушков.
Он добавил, что речь идет не о принуждении, а о разъяснении и поддержке.
«Динамика по контрактам не меняется, это говорит о том, что госконтракты, которые сейчас торгуются, являются не очень привлекательными для бизнеса и любой руководитель субъекта заинтересован в том, чтобы они стали привлекательными», — заключил глава НОСТРОЙ.
Источник: www.tatre.ru