4 votos

Entero de los coeficientes de regresión de R

Me gustaría ajuste de coeficientes enteros, por ejemplo, sumar 10, a una ecuación de regresión. Los valores absolutos de los coeficientes (es decir, predice y) no son importantes, sólo quiero conservar el apropiado valores relativos. El caso de uso es una fácilmente interpretables sistema de puntuación.

Por ejemplo, esta regresión de los rendimientos de los siguientes coeficientes (haciendo caso omiso de la intersección):

set.seed(0)
y <- rnorm(100)
x <- matrix(rnorm(300), ncol=3)
m <- lm(y ~ x)
(coef <- m$coefficients[-1])
#          x1          x2          x3 
#  0.12100965  0.05506511  0.14708549 

Redondeo con el código de abajo, se obtiene un error de redondeo (sumas a 11):

round(10 * coef / sum(coef))
# x1 x2 x3 
#  4  2  5 

Un método como este también no garantiza la máxima pesos similares a la ecuación de regresión.

Este fue preguntado aquí sin respuestas satisfactorias, y que podrían ser abordados en este paywalled trabajo de investigación.

Edit: parece Cómo redondear los flotadores para los enteros, mientras que la preservación de su suma? puede ser capaz de ayudar a minimizar el error de redondeo. Si mi pregunta se especifica como minimizar el error de una predicción (en escala) y, estoy seguro de si este es un equivalente de optimización.

1voto

Maurice Puntos 22343

Podemos aplicar la respuesta a Ronda vector de números enteros, mientras que la preservación de su suma:

smart.round <- function(x) {
  y <- floor(x)
  indices <- tail(order(x-y), round(sum(x)) - sum(y))
  y[indices] <- y[indices] + 1
  y
}

En ese momento una lógica similar se presenta una razonable respuesta:

# Setup from question
set.seed(0)
y <- rnorm(100)
x <- matrix(rnorm(300), ncol=3)
m <- lm(y ~ x)
coef <- m$coefficients[-1]
# Answer
smart.round(10 * coef / sum(coef))
# x1 x2 x3 
#  4  2  4

No sé si esto también minimiza el error de una pronosticado, pero el rendimiento es algo factible.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X