Давайте представим, что нам пришла задача построения уравнения регрессии, но с одним уточнением - нам точно известно, что зависимая переменная находится в интервале [0;1]. Что изменится? Давайте посмотрим, что про это говорили ученые из университета португальского города Эворы (doi: 10.1111/j.1467-6419.2009.00602.x; doi: 10.1111/manc.12032).
Минутка теории
Как правило, для решения поставленной выше задачи используются три основных метода:
Мы просто не обращаем ни на что внимание, и строим обычную модель регрессии, находя вектор параметров θ
Основной недостаток - прогнозируемые значения y могут выходить за пределы интервала [0;1] Мы применяем нехитрое преобразование типа
Но в этом случае интерпретация параметров регрессии θ может превратиться в достаточно увлекательный квест, это раз, и, во-вторых, модель будет ошибаться в граничных точках Применять модель тобит-регрессии при большом количестве граничных наблюдений, но стоит помнить, что ее оценки могут быть смещены при нарушении условий Гаусса-Маркова
Для задачи регрессии, в которой зависимая переменная находится в диапазоне (0;1), данные проблемы решаются применением одного из двух методов:
При неизвестном распределении зависимой переменной строится модель
где G() - нелинейная функция (чаще всего это логит-, пробит-функция, функция Коши, лог-логистическая функция, функция Гомпертца) При этом, оценка параметров θ производится по методу квазимаксимального правдоподобия и полученные оценки являются эффективными
При известном распределении зависимой переменной можно построить модель с учетом этого (например, модель бета-регрессии)
В рассматриваемых работах предложена двухкомпонентная модель регрессии, в которой используется и тот, и тот подход, а также разработаны некоторые особенные тесты спецификации модели для зависимой переменной, находящейся в любом из данных интервалов: [0;1), (0;1], [0;1].
То есть, например, для интервала [0;1) вводится новая переменная
![И на первом шаге мы строим логистическую регрессию для переменной y*, на втором шаге - уже обычную бета-регрессию для переменной y из интервала (0;1) И на первом шаге мы строим логистическую регрессию для переменной y*, на втором шаге - уже обычную бета-регрессию для переменной y из интервала (0;1)](https://habrastorage.org/getpro/habr/upload_files/253/559/5f5/2535595f552dc6477b4cbc15914b03a4.png)
Предложено также семейство статистических тестов (GOFF1, GOFF2, GGOFF) для проверки правильности спецификации данных моделей. Отличия тестов - в рисунке ниже
![Цитируется по: Ramalho, E. A., Ramalho, J. J. S., Murteira. J. M. R. A GENERALIZED GOODNESS-OF FUNCTIONAL FORM TEST FOR BINARY AND FRACTIONAL REGRESSION MODELS / The Manchester School Vol 82 No. 4 488–507 July 2014, doi: 10.1111/manc.12032 Цитируется по: Ramalho, E. A., Ramalho, J. J. S., Murteira. J. M. R. A GENERALIZED GOODNESS-OF FUNCTIONAL FORM TEST FOR BINARY AND FRACTIONAL REGRESSION MODELS / The Manchester School Vol 82 No. 4 488–507 July 2014, doi: 10.1111/manc.12032](https://habrastorage.org/getpro/habr/upload_files/019/422/957/019422957e7d50f16b0609747c0f0acf.png)
Теперь давайте попробуем применить все это на практике
Методология
Возьмем данные по индексу человеческой свободы за 2020 год по странам мира (https://www.kaggle.com/gsutters/the-human-freedom-index) и попытаемся построить модель для одного из индексов (pf_expression_media)
library(tidyverse)
library(ModelMetrics)
library(readr)
library(frm)
Base <- na.omit(read_csv("D:/.../hfi_cc_2020.csv"))
Base <- as.data.frame(Base[, c(6:113)])
y <- as.matrix(Base[,38]/10)
sum(y==0) # 5 наблюдений с значением показателя, равным 0
sum(y==1) # 40 наблюдений с значением показателя, равным 1
X1 <- Base[,c(49,106)] # Первая группа независимых переменных
X2 <- Base[,c(51,55)] # Вторая группа независимых переменных
Построим простую однокомпонентую модель (и эта модель - модель цензурированной регрессии)
m_1_1 <- frm(y,X1,linkfrac="logit") # Строим логистическую модель регрессии
Автоматически выводится следующее окно по результатам расчетов
![Видим основные параметры модели + запись "robust standard errors" говорит о том, что стандартные ошибки считались робастными методами Видим основные параметры модели + запись "robust standard errors" говорит о том, что стандартные ошибки считались робастными методами](https://habrastorage.org/getpro/habr/upload_files/5eb/488/7d5/5eb4887d5c6efe67d8338620274434bb.png)
Всего можно попробовать 5 разных функций G(), которые дадут разные результаты
m_1_2 <- frm(y,X2,linkfrac="probit")
m_1_3 <- frm(y,X1,linkfrac="cauchit")
m_1_4 <- frm(y,X2,linkfrac="loglog")
m_1_5 <- frm(y,cbind(X1,X2),linkfrac="cloglog")
![Получается, первая модель была лучше Получается, первая модель была лучше](https://habrastorage.org/getpro/habr/upload_files/7bd/1ce/72d/7bd1ce72d8019e28a0a271f424748be4.png)
Теперь построим двухкомпонентную модель
m_2 <- frm(y,X2,X1,linkbin = "cauchit",linkfrac="logit", type = "2P")
# Параметр linkbin отвечает за функцию преобразования первой части модели - модели бинарного выбора
![Видим, что есть проблема со спецификацией первой модели Видим, что есть проблема со спецификацией первой модели](https://habrastorage.org/getpro/habr/upload_files/314/4e8/c23/3144e8c23914ea3b71a994d107e605bc.png)
m_2_0 <- frm(y,X1,X1,linkbin = "logit",linkfrac="logit", type = "2P",inflation = 1)
# Параметр inflation = 1, указывает, что на первом шаге строится логистическая регрессия?
# определяющая, равна ли зависимая переменная 1
![Одна часть стала лучше, вторая - хуже. Бывает Одна часть стала лучше, вторая - хуже. Бывает](https://habrastorage.org/getpro/habr/upload_files/090/e0d/367/090e0d3675d269042824a0a6180b0bc9.png)
Теперь поговорим о тестах. RESET-тест спецификации однокомпонентной модели
frm.reset(m_1_1,2:3,c("Wald","LM"))
![](https://habrastorage.org/getpro/habr/upload_files/7ff/475/54b/7ff47554b9d86e3caf925f5da27edca4.png)
Нулевая гипотеза: спецификация верна, и согласно расчетам, она верна для каждой переменной (нет полиномиальной зависимости)
frm.reset(m_1_5,2:5,c("LM"))
![](https://habrastorage.org/getpro/habr/upload_files/f6b/769/2a3/f6b7692a3e49bc72f79134252101e57b.png)
Для этой модели - нулевая гипотеза выполняется для 3 и 4 переменной (по LM-методике расчета), и желательно добавить в БД переменные, являющиеся степенью 1 и 2 переменных
frm.ggoff(m_1_5,c("Wald","LM"))
![](https://habrastorage.org/getpro/habr/upload_files/b08/92d/c32/b0892dc32a024dc840473411ca8b302c.png)
При этом GGOFF-тест показывает неправильную спецификацию для всей модели в целом
Также пакет frm позволяет сравнивать все модели между собой
frm.ptest(m_1_1,m_1_3)
frm.ptest(m_2,m_2_0)
![Получаем, что модель m_1_3 лучше, чем модель m_1_1, а модель m_2_0 лучше, чем модель m_2 Получаем, что модель m_1_3 лучше, чем модель m_1_1, а модель m_2_0 лучше, чем модель m_2](https://habrastorage.org/getpro/habr/upload_files/c43/a4d/de1/c43a4dde124a38c1fe0cd7fde6efbe0d.png)