Каковы ключевые компоненты и функции для стандартных объектов модели в R?
Я внедрил новую статистическую модель в R, и она работает в моей песочнице, но я хотел бы сделать ее более стандартной. Хорошее сравнение lm()
, где я могу взять модельный объект и:
- применить функцию
summary()
- извлечь коэффициенты модели
- извлекать остатки из установленных (учебных) данных
- обновить модель
- применить функцию
predict()
- применить
plot()
к предварительно выбранным описательным графикам
- участвовать во многих других радостях.
Я просматривал руководства R, искал в Интернете и просматривал несколько книг, и, если я не упускаю что-то, я не могу найти хороший учебник о том, что должно входить в новый пакет модели.
Хотя меня больше всего интересуют подробные ссылки или руководства, я буду держать это сообщение сосредоточенным на вопросе с двумя компонентами:
- Каковы ключевые компоненты, которые обычно ожидаются в модельном объекте?
- Каковы типичные функции, которые обычно реализуются в пакете моделирования?
Ответы могут быть с точки зрения R Core (или разработчиков пакетов) или с точки зрения пользователей, например. пользователи ожидают, что смогут использовать такие функции, как сводка, предсказание, остатки, коэффициенты и часто ожидают передачи формулы при подгонке модели.
Ответы
Ответ 1
Поместите в объект то, что, по вашему мнению, полезно и необходимо. Я думаю, что более важным вопросом является то, как вы включаете эту информацию, а также как ее можно получить.
Как минимум, предоставьте метод print()
, чтобы весь объект не сбрасывался на экран при печати объекта. Если вы предоставляете метод summary()
, соглашение заключается в том, чтобы вернуть этому объекту объект класса summary.foo
(где foo
- ваш класс), а затем предоставить метод print.summary.foo()
--- вы не хотите, чтобы ваш summary()
, делая любую печать сам по себе.
Если у вас есть коэффициенты, установленные значения и остатки, и они просты, то вы можете сохранить их в возвращаемом объекте как $coefficients
, $fitted.values
и $residuals
соответственно. Тогда методы по умолчанию для coef()
, fitted()
и resid()
будут работать без необходимости добавлять собственные методы на заказ. Если они не просты, укажите свои методы для coef()
, fitted.values()
и residuals()
для вашего класса. Не просто, я имею в виду, например, если существует несколько типов остатков, и вам нужно обработать сохраненные остатки, чтобы получить запрошенный тип. Тогда вам нужен ваш собственный метод, который принимает аргумент type
или аналогичный для выбора от доступных типов остатков. См. ?residuals.glm
для примера.
Если предсказания - это то, что может быть полезно предоставлено, тогда может быть предоставлен метод predict()
. Посмотрите, например, на метод predict.lm()
, чтобы увидеть, какие аргументы должны быть приняты. Аналогично, может быть предоставлен update()
, если имеет смысл обновить модель, добавив/удалив термины или изменив параметры модели.
plot.lm()
приведен пример метода, который предоставляет несколько графиков диагностики установленной модели. Вы можете смоделировать свой метод для этой функции, чтобы выбрать из набора предопределенных графиков диагностики.
Если ваша модель имеет вероятность, то предоставление метода logLik()
для вычисления или извлечения из установленного объекта модели будет стандартным, deviance()
является другой аналогичной функцией, если такая вещь уместна. Для доверительных интервалов по параметрам confint()
является стандартным методом.
Если у вас есть интерфейс формулы, методы formula()
могут извлечь его. Если вы храните его в месте, которое ищет метод по умолчанию, тогда ваша жизнь станет проще. Простым способом хранения является сохранение согласованного вызова (match.call()
) в компоненте $call
. Методы извлечения модельного кадра (model.frame()
) и модельной матрицы (model.matrix()
), которые являются данными и расширенными (коэффициенты, преобразованные в переменные с использованием контрастов, плюс любые преобразования или функции модели данных модели), являются стандартными экстракторами функции. Посмотрите примеры из стандартных функций моделирования R для идей о том, как хранить/извлекать эту информацию.
Если вы используете интерфейс формулы, попробуйте следовать стандартным нестандартным методам оценки, используемым в большинстве объектов модели R, которые имеют интерфейс/метод формулы. Подробную информацию об этом можно найти на странице R Developer, в частности, Томаса Ламли. Это дает много советов о том, как работать с вашей функцией, как ожидается, что функция моделирования R будет работать.
Если вы следуете этой парадигме, тогда экстракторы типа na.action()
должны работать, только если вы будете следовать стандартным (нестандартным) правилам.
Ответ 2
После ответа Gavin я нашел эту страницу, также на сайте разработчика, с длинным списком полезных предложений.
Кроме того, "An R Companion to Applied Regression", Фокс и Вайсберг, имеет прохождение некоторых из ключевых методов в главе 8. Я обнаружил, что, глядя на упоминания модельных кадров в разных R-книгах. Эта книга также содержит ссылку на ту же страницу на сайте разработчика R.
Ответ 3
Это может быть еще один хороший источник.
Ответ 4
Следующий код:
library(hints)
hints(class="lm")
предоставит все функции для lm как:
Functions for lm in package ‘base’:
kappa Compute or Estimate the Condition Number of a
Matrix
base-defunct Defunct Functions in Package 'base'
rcond Compute or Estimate the Condition Number of a
Matrix
Functions for lm in package ‘gam’:
deviance.lm Service functions and as yet undocumented
functions for the gam library
Functions for lm in package ‘gdata’:
nobs Compute the Number of Non-missing Observations
Functions for lm in package ‘methods’:
setOldClass Register Old-Style (S3) Classes and Inheritance
Functions for lm in package ‘stats’:
add1 Add or Drop All Possible Single Terms to a
Model
alias Find Aliases (Dependencies) in a Model
anova.lm ANOVA for Linear Model Fits
case.names.lm Case and Variable Names of Fitted Models
cooks.distance.lm Regression Deletion Diagnostics
dfbeta.lm Regression Deletion Diagnostics
dfbetas.lm Regression Deletion Diagnostics
drop1.lm Add or Drop All Possible Single Terms to a
Model
dummy.coef.lm Extract Coefficients in Original Coding
effects Effects from Fitted Model
family.lm Accessing Linear Model Fits
formula.lm Accessing Linear Model Fits
hatvalues.lm Regression Deletion Diagnostics
influence.lm Regression Diagnostics
labels.lm Accessing Linear Model Fits
logLik Extract Log-Likelihood
model.frame.lm Extracting the Model Frame from a Formula or
Fit
model.matrix.lm Construct Design Matrices
plot.lm Plot Diagnostics for an lm Object
print.lm Fitting Linear Models
proj Projections of Models
residuals.lm Accessing Linear Model Fits
rstandard.lm Regression Deletion Diagnostics
rstudent.lm Regression Deletion Diagnostics
summary.lm Summarizing Linear Model Fits
variable.names.lm Case and Variable Names of Fitted Models
vcov Calculate Variance-Covariance Matrix for a
Fitted Model Object
case.names Case and Variable Names of Fitted Models
dummy.coef Extract Coefficients in Original Coding
influence.measures Regression Deletion Diagnostics
lm.influence Regression Diagnostics
lm Fitting Linear Models
lm.fit Fitter Functions for Linear Models
model.frame Extracting the Model Frame from a Formula or
Fit
model.matrix Construct Design Matrices
stats-defunct Defunct Functions in Package 'stats'
lm.glm Some linear and generalized linear modelling
examples from `An Introduction to Statistical
Modelling' by Annette Dobson
Functions for lm in package ‘unknown’:
confint.lm NA
extractAIC.lm NA
qr.lm NA
simulate.lm NA
Functions for lm in package ‘VGAM’:
predict.lm Undocumented and Internally Used Functions and
Classes
Functions for lm in package ‘xtable’:
xtable Create Export Tables