Абстракция для статистических моделей
В 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
.