¿Cuáles son los componentes y funciones clave para los objetos modelo estándar en R?


He implementado un nuevo modelo estadístico en R y funciona en mi sandbox, pero me gustaría hacerlo más estándar. Una buena comparación es lm(), donde puedo tomar un objeto modelo y:

  • aplica la función summary()
  • extraer los coeficientes del modelo
  • extraer los residuos de los datos ajustados (de entrenamiento)
  • actualizar el modelo
  • aplica la función predict()
  • aplicar plot() a las parcelas descriptivas preseleccionadas
  • participar en muchos otros tipos de alegría

He mirado a través de los manuales de R, buscado en línea, y hojeado a través de varios libros, y, a menos que estoy pasando por alto algo, no puedo encontrar un buen tutorial sobre lo que debe ir en un nuevo paquete modelo.

Aunque estoy más interesado en referencias exhaustivas o guías, mantendré este post enfocado en una pregunta con dos componentes:

  1. ¿Cuáles son los componentes clave que normalmente se espera que estén en un objeto modelo?
  2. ¿Cuáles son las funciones típicas que generalmente se implementan en un paquete de modelado?

Las respuestas podrían ser desde la perspectiva del Núcleo R (o desarrolladores de paquetes) o desde la perspectiva de los usuarios, por ejemplo, los usuarios esperan poder usar funciones como resumen, predicción, residuos, coeficientes, y a menudo esperan pasar una fórmula cuando se ajusta un modelo.

Author: Gavin Simpson, 2011-07-27

4 answers

Pon en el objeto lo que creas útil y necesario. Creo que una pregunta más importante es cómo incluir esta información, así como cómo se accede a ella.

Como mínimo, proporcione un método print() para que el objeto completo no se vierta en la pantalla cuando imprima el objeto. Si proporciona un método summary(), la convención es que ese objeto devuelva un objeto de clase summary.foo (donde foo es su clase) y luego proporcione un método print.summary.foo() - - - no desea que su summary() método de hacer cualquier impresión en sí mismo.

Si tiene coeficientes, valores ajustados y residuos y estos son simples, entonces puede almacenarlos en su objeto devuelto como $coefficients, $fitted.values y $residuals respectivamente. A continuación, los métodos predeterminados para coef(), fitted() y resid() funcionará sin necesidad de agregar sus propios métodos a medida. Si estos no son simples, a continuación, proporcionar sus propios métodos para coef(), fitted.values() y residuals() para su clase. Por no simple, me refiero, por ejemplo, si hay varios tipos de residuales y necesita procesar los residuos almacenados para obtener el tipo solicitado --- entonces necesita su propio método que tome un argumento type o similar para seleccionar entre los tipos de residuales disponibles. Véase ?residuals.glm para un ejemplo.

Si las predicciones son algo que se puede proporcionar útilmente, entonces se podría proporcionar un método predict(). Mire el método predict.lm() por ejemplo para ver qué argumentos se deben tomar. Del mismo modo, se puede proporcionar un update() si tiene sentido actualizar el modele agregando / eliminando términos o alterando parámetros del modelo.

plot.lm() da un ejemplo de un método que proporciona varias gráficas de diagnóstico del modelo ajustado. Puede modelar su método en esa función para seleccionar de un conjunto de gráficos de diagnóstico predefinidos.

Si su modelo tiene una probabilidad, entonces proporcionar un método logLik() para computarlo o extraerlo del objeto modelo ajustado sería estándar, deviance() es otra función similar si tal cosa es pertinente. Para la confianza intervalos en parámetros, confint() es el método estándar.

Si tiene una interfaz de fórmula, entonces los métodos formula() pueden extraerla. Si lo guardas en un lugar que busca el método predeterminado, entonces tu vida será más fácil. Una forma sencilla de almacenar esto es almacenar la llamada coincidente (match.call()) en el componente $call. Métodos para extraer el marco del modelo (model.frame()) y la matriz del modelo (model.matrix()) que son los datos y los expandidos (factores convertidos en variables utilizando contrastes, más cualquier transformaciones o funciones de los datos del marco del modelo) la matriz del modelo son funciones estándar del extractor. Vea ejemplos de funciones de modelado R estándar para obtener ideas sobre cómo almacenar/extraer esta información.

Si utiliza una interfaz de fórmula, intente seguir el método de evaluación estándar no estándar utilizado en la mayoría de los objetos del modelo R que tienen una interfaz/método de fórmula. Puede encontrar detalles de eso en la página R Developer , en particular el documento de Thomas Lumley. Esto da un montón de consejos sobre cómo hacer que su función funcione como uno espera una función de modelado R para trabajar.

Si sigues este paradigma, entonces los extractores como na.action() deberían funcionar si sigues las reglas estándar (no estándar).

 28
Author: Gavin Simpson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-27 19:46:29

Siguiendo la respuesta de Gavin, encontré esta página, también en el sitio del desarrollador, con una larga lista de sugerencias útiles.

También, "An R Companion to Applied Regression", por Fox y Weisberg, tiene un recorrido por algunos de los métodos clave, en el Capítulo 8. Lo encontré buscando menciones de marcos de modelos en varios libros de R. Este libro también tiene una referencia a la misma página en el sitio de desarrolladores de R.

 5
Author: Iterator,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-04 06:52:32

Esta podría ser otra buena fuente.

 2
Author: MYaseen208,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-28 03:31:56

El siguiente código:

library(hints)
hints(class="lm")

Proporcionará todas las funciones para lm como:

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
 1
Author: MYaseen208,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-24 16:32:23