Come calcolare l'errore relativo quando il valore vero è zero?


32

Come posso calcolare l'errore relativo quando il valore vero è zero?

Supponiamo che io abbia e . Se definisco l'errore relativo come:xtrue=0xtest

relative error=xtruextestxtrue

Quindi l'errore relativo è sempre indefinito. Se invece uso la definizione:

relative error=xtruextestxtest

Quindi l'errore relativo è sempre del 100%. Entrambi i metodi sembrano inutili. C'è un'altra alternativa?


Ho avuto la stessa identica domanda riguardo la distorsione dei parametri nelle simulazioni Monte Carlo, usando la tua prima definizione. Uno dei miei valori dei parametri era 0, quindi non ho calcolato la distorsione dei parametri per questo particolare parametro ...
Patrick Coulombe,

2
La soluzione è di non utilizzare l'errore relativo in questo caso.
Marc Claesen,

2
Un'opzione, che risponde all'intento se non alla lettera della tua domanda, è quella di utilizzare una misura leggermente diversa che concorda strettamente con l'errore relativo quando l'errore relativo è piccolo, come 2(xtruextest)/(|xtrue|+|xtest|) . (Usa 0 quando xtrue=xtest=0 ) Questa particolare soluzione è universale in quanto è invariante a causa di un cambiamento nell'unità di misura (perché non comporta costanti arbitrarie).
whuber

@whuber Penso che dovresti considerare di pubblicare quel commento come una risposta, dal momento che sembra superiore a quelli esistenti.
Pesce d'argento

@ Argento Hai ragione - mi scuso per aver pubblicato una risposta come commento. Ho quindi leggermente ampliato quel commento in una risposta.
whuber

Risposte:


39

Esistono molte alternative, a seconda dello scopo.


Una comune è la "Differenza percentuale relativa" o RPD, utilizzata nelle procedure di controllo di qualità in laboratorio. Anche se puoi trovare molte formule apparentemente diverse, tutte si riducono al confronto della differenza di due valori con la loro grandezza media:

d1(x,y)=xy(|x|+|y|)/2=2xy|x|+|y|.

Questo è un firmata espressione, positivo quando è superiore y e negativo quando y supera x . Il suo valore è sempre compreso tra - 2 e 2 . Utilizzando valori assoluti nel denominatore, gestisce i numeri negativi in ​​modo ragionevole. La maggior parte dei riferimenti che riesco a trovare, come la Guida tecnica alla valutazione della qualità dei dati del programma DEP del New Jersey e alla guida tecnica sulla valutazione dell'usabilità dei dati , usano il valore assoluto di d 1 perché sono interessati solo all'entità dell'errore relativo.xyyx22d1


Un articolo di Wikipedia su Cambiamento relativo e Differenza lo osserva

d(x,y)=|xy|max(|x|,|y|)

viene spesso utilizzato come test di tolleranza relativa negli algoritmi numerici in virgola mobile. Lo stesso articolo sottolinea anche che formule come e d possono essere generalizzated1d

df(x,y)=xyf(x,y)

dove la funzione dipende direttamente sulle grandezze di x ed y (solitamente assumendo x ed y sono positivi). Come esempi offre loro massimo, minimo e media aritmetica (con e senza prendere i valori assoluti di x ed y stessi), ma si potrebbe contemplare altri tipi di media come la media geometrica fxyxyxy, la media armonica2/(1/|x|+1/|y|)eLpsignifica((|x|p+|y|p)/2)1 / p. (d1corrisponde ap=1edcorrisponde al limite comep|xy|2/(1/|x|+1/|y|)Lp((|x|p+|y|p)/2)1/pd1p=1d .) Si potrebbe scegliere una f basato sul comportamento statistico atteso di x ed y . Ad esempio, con distribuzioni approssimativamente lognormali la media geometrica sarebbe una scelta attraente per f perché è una media significativa in quella circostanza.pfxyf


Molte di queste formule incontrano difficoltà quando il denominatore è uguale a zero. In molte applicazioni ciò non è possibile o è innocuo impostare la differenza su zero quando .x=y=0

Si noti che tutte queste definizioni condividono una proprietà di invarianza fondamentale: qualunque sia la funzione di differenza relativa , non cambia quando gli argomenti vengono riscalati in modo uniforme da λ > 0 :dλ>0

d(x,y)=d(λx,λy).

È questa proprietà che ci consente di considerare una differenza relativa . Quindi, in particolare, una funzione non invariante comed

d(x,y)=? |xy|1+|y|

semplicemente non si qualifica. Qualunque virtù possa avere, non esprime una differenza relativa .


La storia non finisce qui. Potremmo persino trovare fruttuoso spingere ulteriormente le implicazioni dell'invarianza.

The set of all ordered pairs of real numbers (x,y)(0,0) where (x,y) is considered to be the same as (λx,λy) is the Real Projective Line RP1. In both a topological sense and an algebraic sense, RP1 is a circle. Any (x,y)(0,0) determines a unique line through the origin (0,0). When x0 its slope is y/x; otherwise we may consider its slope to be "infinite" (and either negative or positive). A neighborhood of this vertical line consists of lines with extremely large positive or extremely large negative slopes. We may parameterize all such lines in terms of their angle θ=arctan(y/x), with π/2<θπ/2. Associated with every such θ is a point on the circle,

(ξ,η)=(cos(2θ),sin(2θ))=(x2y2x2+y2,2xyx2+y2).

Any distance defined on the circle can therefore be used to define a relative difference.

As an example of where this can lead, consider the usual (Euclidean) distance on the circle, whereby the distance between two points is the size of the angle between them. The relative difference is least when x=y, corresponding to 2θ=π/2 (or 2θ=3π/2 when x and y have opposite signs). From this point of view a natural relative difference for positive numbers x and y would be the distance to this angle:

dS(x,y)=|2arctan(yx)π/2|.

To first order, this is the relative distance |xy|/|y|--but it works even when y=0. Moreover, it doesn't blow up, but instead (as a signed distance) is limited between π/2 and π/2, as this graph indicates:

Figure

This hints at how flexible the choices are when selecting a way to measure relative differences.


Thanks for the comprehensive answer, what do you think is the best reference for this line : "is frequently used as a relative tolerance test in floating point numerical algorithms. The same article also points out that formulas like d1d1 and d∞d∞ may be generalized to"
Hammad Haleem

1
btw, nevermind I found an academic reference for this :) tandfonline.com/doi/abs/10.1080/00031305.1985.10479385
Hammad Haleem

4
Why has this not been selected as the answer? (sorry if this is not an appropriate comment, but this is the better answer by far)
Brash Equilibrium

2
@Brash I appreciate the sentiment. Acceptance is uniquely the province of the original proposer: nobody can override that (except by deleting the accepted post). On some occasions when I feel as you do, I post comments that point out explicitly how and why I think some answers are better or more noteworthy than others. Even if that fails to change anything, such comments may make the material a little more useful or understandable to future readers: and that, ultimately, is the point of our work on this site.
whuber

1
@KutalmisB Thank you for noticing that: the "min" doesn't belong there at all. It looks like it may have been a vestige of a more complex formula that handled all possible signs of x and y that I later simplified. I have removed it.
whuber

11

First, note that you typically take the absolute value in computing the relative error.

A common solution to the problem is to compute

relative error=|xtruextest|1+|xtrue|.

3
This is problematic in that it varies depending on the units of measure chosen for the values.
whuber

1
That's absolutely true. This isn't a perfect solution to the problem, but it is a common approach that works reasonably well when x is well scaled.
Brian Borchers

Could you elaborate in your answer on what you mean by "well scaled"? For instance, suppose the data arise from calibration of an aqueous chemical measurement system designed for concentrations between 0 and 0.000001 moles/liter which can achieve a precision of, say, three significant digits. Your "relative error" would therefore be constantly zero except for obviously erroneous measurements. In light of this, how exactly would you rescale such data?
whuber

1
Your example is one where the variable isn't well scaled. By "well scaled", I mean that that variable is scaled so that it takes on values in a small range (of e.g. a couple of orders of magnitude) near 1. If your variable takes on values over many orders of magnitude than you've got more serious scaling issues and this simple approach isn't going to be adequate.
Brian Borchers

2
Any reference for this approach? The name of this method? Thank you.
CroCo

0

I was a bit confused on this for a while. In the end, its because if you are trying to measure relative error with respect to zero then you are trying to force something that simply does not exist.

If you think about it, you're comparing apples to oranges when you compare relative error to the error measured from zero, because the error measured from zero is equivalent to the measured value (that's why you get 100% error when you divide by the test number).

For example, consider measuring error of gauge pressure (the relative pressure from atmospheric) vs absolute pressure. Say that you use an instrument to measure the gauge pressure at perfect atmospheric conditions, and your device measured atmospheric pressure spot on so that it should record 0% error. Using the equation you provided, and first assuming we used the measured gauge pressure, to calculate relative error:

relative error=Pgauge,truePgauge,testPgauge,true
Then Pgauge,true=0 and Pgauge,test=0 and you do not get 0% error, instead it is undefined. That is because the actual percent error should be using the absolute pressure values like this:
relative error=Pabsolute,truePabsolute,testPabsolute,true
Now Pabsolute,true=1atm and Pabsolute,test=1atm and you get 0% error. This is the proper application of relative error. The original application that used gauge pressure was more like "relative error of the relative value" which is a different thing than "relative error". You need to convert the gauge pressure to absolute before measuring the relative error.

The solution to your question is to make sure you are dealing with absolute values when measuring relative error, so that zero is not a possibility. Then you are actually getting relative error, and can use that as an uncertainty or a metric of your real percent error. If you must stick with relative values, than you should be using absolute error, because the relative (percent) error will change depending on your reference point.

It's hard to put a concrete definition on 0... "Zero is the integer denoted 0 that, when used as a counting number, means that no objects are present." - Wolfram MathWorld http://mathworld.wolfram.com/Zero.html

Feel free to nit pick, but zero essentially means nothing, it is not there. This is why it does not make sense to use gauge pressure when calculating relative error. Gauge pressure, though useful, assumes there is nothing at atmospheric pressure. We know this is not the case though, because it has an absolute pressure of 1 atm. Thus, the relative error with respect to nothing, just does not exist, it's undefined.

Feel free to argue against this, simply put: any quick fixes, such as adding one to the bottom value, are faulty and not accurate. They can be still be usefully if you are simply trying to minimize error. If you are trying to make accurate measurements of uncertainty though, not so much...


0

MAPE Formula

Finding MAPE,

It is very debatable topic and many opensource contributors have discussed on the above topic. The most efficient approach till now is followed by the developers. Please refer to this PR to know more.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.