Processing math: 100%

32 votos

Intervalo de confianza del RMSE

He tomado una muestra de n puntos de datos de una población. Cada uno de estos puntos tiene un valor verdadero (conocido a partir de la verdad básica) y un valor estimado. A continuación, calculo el error de cada punto muestreado y luego calculo el RMSE de la muestra.

¿Cómo puedo inferir algún tipo de intervalo de confianza alrededor de este RMSE, basado en el tamaño de la muestra? n ?

Si utilizara la media, en lugar del RMSE, no tendría problemas para hacerlo, ya que puedo utilizar la ecuación estándar

m=Zσn

pero no sé si esto es válido para el RMSE y no para la media. ¿Hay alguna manera de adaptar esto?

(He visto esta pregunta (pero no tengo problemas con que mi población esté normalmente distribuida, que es de lo que trata la respuesta)

20voto

davidsheldon Puntos 211

Es posible que pueda responder a su pregunta bajo ciertas condiciones.

Dejemos que xi sea su verdadero valor para el ith punto de datos y ˆxi el valor estimado. Si suponemos que las diferencias entre los valores estimados y los verdaderos tienen

  1. media cero (es decir, la ˆxi se distribuyen alrededor de xi )

  2. siguen una distribución normal

  3. y todos tienen la misma desviación estándar σ

en pocas palabras:

ˆxixiN(0,σ2),

entonces realmente se quiere un intervalo de confianza para σ .

Si se cumplen los supuestos anteriores nRMSE2σ2=n1ni(^xixi)2σ2 sigue un χ2n distribución con n (no n1 ) grados de libertad. Esto significa que

P(χ2α2,nnRMSE2σ2χ21α2,n)=1αP(nRMSE2χ21α2,nσ2nRMSE2χ2α2,n)=1αP(nχ21α2,nRMSEσnχ2α2,nRMSE)=1α.

Por lo tanto, [nχ21α2,nRMSE,nχ2α2,nRMSE] es su intervalo de confianza.

Aquí tienes un programa en python que simula tu situación

from scipy import stats
from numpy import *
s = 3
n=10
c1,c2 = stats.chi2.ppf([0.025,1-0.025],n)
y = zeros(50000)
for i in range(len(y)):
    y[i] =sqrt( mean((random.randn(n)*s)**2))

print "1-alpha=%.2f" % (mean( (sqrt(n/c2)*y < s) & (sqrt(n/c1)*y > s)),)

Espero que eso ayude.

Si no estás seguro de si los supuestos se aplican o si quieres comparar lo que he escrito con un método diferente, siempre puedes probar bootstrapping .

10voto

Harters Puntos 26

El razonamiento en el respuesta de fabee parece correcto si se aplica al STDE (desviación estándar del error), no al RMSE. Utilizando una nomenclatura similar, i=1,,n es un índice que representa cada registro de datos, xi es el valor verdadero y ˆxi es una medida o predicción.

El error ϵi , BIAS, MSE (error medio cuadrático) y RMSE vienen dados por: ϵi=ˆxixi,BIAS=¯ϵ=1nni=1ϵi,MSE=¯ϵ2=1nni=1ϵ2i,RMSE=MSE.

De acuerdo con estas definiciones, el BIAS corresponde a la media muestral de ϵ pero el MSE no es la varianza de la muestra sesgada. En cambio: STDE2=¯(ϵ¯ϵ)2=1nni=1(ϵi¯ϵ)2, o, si se calculan tanto el BIAS como el RMSE, STDE2=¯(ϵ¯ϵ)2=¯ϵ2¯ϵ2=RMSE2BIAS2. Tenga en cuenta que el varianza de la muestra sesgada se utiliza en lugar del imparcialidad para mantener la coherencia con las definiciones anteriores dadas para el MSE y el RMSE.

Así, en mi opinión, los intervalos de confianza establecidos por fabee se refieren a la desviación estándar de la muestra de ϵ , STDE. Del mismo modo, pueden establecerse intervalos de confianza para el BIAS basados en la puntuación z (o en la puntuación t si n<30 ) y STDE/n .

1voto

user49740 Puntos 1891

Después de Faaber 1999 la incertidumbre del RMSE viene dada por σ(^RMSE)/RMSE=12n donde n es el número de puntos de datos.

1voto

Dylan_Gomes Puntos 127

Tomando prestado el código del enlace de @Bryan Shalloway ( https://gist.github.com/brshallo/7eed49c743ac165ced2294a70e73e65e que se encuentra en el comentario del respuesta aceptada ), puede calcularlo en R con el valor del RMSE y los grados de libertad, que @fabee sugiere que sean n (no n-1) en este caso.

La función R:

rmse_interval <- function(rmse, deg_free, p_lower = 0.025, p_upper = 0.975){
  tibble(.pred_lower = sqrt(deg_free / qchisq(p_upper, df = deg_free)) * rmse,
         .pred_upper = sqrt(deg_free / qchisq(p_lower, df = deg_free)) * rmse)
}

Un ejemplo práctico: Si tengo un valor de RMSE de 0,3 y se han utilizado 1000 muestras para calcular ese valor, puedo hacer

rmse_interval(0.3, 1000)

que volvería:

    # A tibble: 1 x 2
  .pred_lower .pred_upper
        <dbl>       <dbl>
1       0.287       0.314

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