Абстракция для статистических моделей
В StatsAPI.jl определен абстрактный тип StatisticalModel и абстрактный подтип RegressionModel. Оба они расширяются пакетом StatsBase и описываются в этой документации.
В частности, экземпляры StatisticalModel реализуют перечисленные ниже методы.
#
StatsAPI.adjr2 — Function
adjr2(model::StatisticalModel)
adjr²(model::StatisticalModel)
Скорректированный коэффициент детерминации.
Для линейных моделей скорректированный коэффициент детерминации определяется как , где — коэффициент детерминации, — число наблюдений, а — число коэффициентов (включая свободный коэффициент). Это определение общеизвестно как формула Верри I.
adjr2(model::StatisticalModel, variant::Symbol) adjr²(model::StatisticalModel, variant::Symbol)
Скорректированный псевдокоэффициент детерминации. Для нелинейных моделей необходимо выбрать одно из нескольких определений псевдокоэффициента детерминации посредством variant. В настоящее время поддерживаются только варианты :MacFadden с определением и :devianceratio с определением . В этих формулах — это правдоподобие модели, — правдоподобие нулевой модели (модели, включающей только свободный коэффициент), — отклонение модели, — отклонение нулевой модели, — число наблюдений (заданное посредством nobs), а — число используемых степеней свободы модели (возвращаемое функцией dof).
#
StatsAPI.aicc — Function
aicc(model::StatisticalModel)
#
StatsAPI.coeftable — Function
coeftable(model::StatisticalModel; level::Real=0.95)
Возвращает таблицу с коэффициентами и связанными статистическими характеристиками модели. level определяет уровень доверительных интервалов (по умолчанию 95 %).
Возвращаемый объект CoefTable реализует интерфейс Tables.jl и может быть преобразован, например в DataFrame, посредством using DataFrames; DataFrame(coeftable(model)).
#
StatsAPI.confint — Function
confint(model::StatisticalModel; level::Real=0.95)
Вычисляет доверительные интервалы для коэффициентов с доверительным уровнем level (по умолчанию 95 %).
#
StatsAPI.deviance — Function
deviance(model::StatisticalModel)
Возвращает отклонение модели относительно эталона, которым обычно (если применимо) является насыщенная модель. Оно равно с точностью до константы , где — правдоподобие модели.
#
StatsAPI.dof — Function
dof(model::StatisticalModel)
Возвращает количество степеней свободы, используемых в модели, включая (если применимо) свободный коэффициент и коэффициент дисперсии распределения.
#
StatsAPI.fit — Function
Выполняет подгонку статистической модели.
#
StatsAPI.fit! — Function
Выполняет подгонку статистической модели на месте.
#
StatsAPI.informationmatrix — Function
informationmatrix(model::StatisticalModel; expected::Bool = true)
Возвращает информационную матрицу модели. По умолчанию возвращается информационная матрица Фишера, а наблюдаемую информационную матрицу можно запросить с помощью expected = false.
#
StatsAPI.isfitted — Function
isfitted(model::StatisticalModel)
Указывает, была ли выполнена подгонка модели.
#
StatsAPI.islinear — Function
islinear(model::StatisticalModel)
Указывает, является ли модель линейной.
#
StatsAPI.loglikelihood — Function
loglikelihood(model::StatisticalModel)
loglikelihood(model::StatisticalModel, observation)
Возвращает логарифмическое правдоподобие модели.
Если задан аргумент observation, возвращает вклад наблюдения observation в логарифмическое правдоподобие модели model.
Если observation — это объект Colon, возвращает вектор с вкладами каждого наблюдения в логарифмическое правдоподобие модели. Иными словами, это вектор поточечных вкладов в логарифмическое правдоподобие.
В общем случае sum(loglikehood(model, :)) == loglikelihood(model).
#
StatsAPI.nobs — Function
nobs(model::StatisticalModel)
Возвращает количество независимых наблюдений, по которым была подогнана модель. Используйте эту информацию с осторожностью, так как независимое наблюдение может определяться по-разному в зависимости от модели, формата передачи данных, плана выборки (если он задан) и т. д.
#
StatsAPI.nulldeviance — Function
nulldeviance(model::StatisticalModel)
Возвращает отклонение нулевой модели, получаемой путем удаления всех независимых переменных, имеющихся в model.
Если в model есть свободный коэффициент, нулевая модель будет содержать только его; в противном случае это будет модель вообще без предиктора (даже без свободного коэффициента).
#
StatsAPI.nullloglikelihood — Function
nullloglikelihood(model::StatisticalModel)
Возвращает логарифмическое правдоподобие нулевой модели, получаемой путем удаления всех независимых переменных, имеющихся в model.
Если в model есть свободный коэффициент, нулевая модель будет содержать только его; в противном случае это будет модель вообще без предиктора (даже без свободного коэффициента).
#
StatsAPI.r2 — Function
r2(model::StatisticalModel)
r²(model::StatisticalModel)
Коэффициент детерминации.
Для линейной модели коэффициент детерминации определяется как , где — это объясненная сумма квадратов, а — общая сумма квадратов.
r2(model::StatisticalModel, variant::Symbol) r²(model::StatisticalModel, variant::Symbol)
Псевдокоэффициент детерминации.
Для нелинейных моделей необходимо выбрать одно из нескольких определений псевдокоэффициента детерминации посредством variant. Поддерживаются следующие варианты:
-
:MacFadden(коэффициент правдоподобия) с определением ; -
:CoxSnellс определением ; -
:Nagelkerkeс определением ; -
:devianceratioс определением .
В приведенных выше формулах — это правдоподобие модели, — правдоподобие нулевой модели (модели только со свободным коэффициентом), — отклонение модели (от насыщенной модели), — отклонение нулевой модели, — число наблюдений (заданное посредством nobs).
Оба варианта (Кокс-Снелла и коэффициент правдоподобия) соответствуют классическому определению коэффициента детерминации для линейных моделей.
#
StatsAPI.rss — Function
rss(model::StatisticalModel)
Возвращает остаточную сумму квадратов модели.
#
StatsAPI.score — Function
score(model::StatisticalModel)
Возвращает оценку модели, то есть градиент логарифмического правдоподобия относительно коэффициентов.
#
StatsAPI.stderror — Function
stderror(model::StatisticalModel)
Возвращает среднеквадратичные погрешности для коэффициентов модели.
#
StatsAPI.vcov — Function
vcov(model::StatisticalModel)
Возвращает матрицу дисперсий и ковариаций для коэффициентов модели.
#
StatsAPI.weights — Function
weights(model::StatisticalModel)
Возвращает веса, используемые в модели.
RegressionModel расширяет тип StatisticalModel, реализуя перечисленные ниже дополнительные методы.
#
StatsAPI.crossmodelmatrix — Function
crossmodelmatrix(model::RegressionModel)
Возвращает X’X, где X является модельной матрицей для model. При возможности эта функция возвращает предварительно вычисленную матрицу, хранящуюся в model.
#
StatsAPI.dof_residual — Function
dof_residual(model::RegressionModel)
Возвращает остаточные степени свободы модели.
#
StatsAPI.leverage — Function
leverage(model::RegressionModel)
Возвращает диагональ проекционной матрицы модели.
#
StatsAPI.cooksdistance — Function
cooksdistance(model::RegressionModel)
Вычисляет расстояние Кука для каждого наблюдения в линейной модели model с учетом оценки влияния каждой точки данных.
#
StatsAPI.meanresponse — Function
meanresponse(model::RegressionModel)
Возвращает среднее значение реакции.
#
StatsAPI.modelmatrix — Function
modelmatrix(model::RegressionModel)
Возвращает модельную матрицу (матрицу эксперимента).
#
StatsAPI.response — Function
response(model::RegressionModel)
Возвращает реакцию модели (зависимую переменную).
#
StatsAPI.responsename — Function
responsename(model::RegressionModel)
Возвращает имя реакции модели (зависимой переменной).
#
StatsAPI.predict — Function
predict(model::RegressionModel, [newX])
Формирует расчетную реакцию model. Можно предоставить объект с новыми ковариантными значениями newX, но он должен иметь тот же тип и структуру, что и у использовавшегося для подгонки модели model. Например, для GLM это обычно объект DataFrame с теми же именами переменных, что и у исходных предикторов.
Имеется тип исключения для оповещения об ошибках сходимости во время оценки модели:
#
StatsBase.ConvergenceException — Type
ConvergenceException(iters::Int, lastchange::Real=NaN, tol::Real=NaN)
В процессе подгонки не удалось достичь сходимости за iters итераций, то есть lastchange между стоимостью последней и предпоследней итераций оказалась больше заданного допуска tol.