Let us define two one-dimensional gaussians with mean 0 and standard deviation 1. Let us assume they are the North and East components of a GNSS error. The horizontal error is a 2D gaussian, whose magnitudes follow a Raileigh distribution (a Chi distribution with 2 degrees of freedom).
x<-rnorm(50000,0,1)
y<-rnorm(50000,0,1)
h<-sqrt(x^2+y^2)
hist(x,breaks=100)
hist(h,breaks=100)
smoothScatter(x,y)
The vertical error behaves similarly to these components. If we assume they are the same mean and variance, then the sigma and 95% will be the following:
mean_theor<-0
meanx<-mean(x)
meany<-mean(y)
sigma_theor<-1
sigmax<-sqrt(var(x))
sigmay<-sqrt(var(y))
sigmaxquantile<-quantile(abs(x),0.68,names=FALSE)
v95_theor<-qnorm(0.975)
v95x<-quantile(abs(x),0.95,names=FALSE)
v95y<-quantile(abs(y),0.95,names=FALSE)
RMS_theor<-sqrt(mean_theor^2+sigma_theor^2)
RMSx<-sqrt(1/50000*sum(x^2))
RMSy<-sqrt(1/50000*sum(y^2))
RMS<-RMSx
c(sigma_theor,RMS_theor,sigmaxquantile)
## [1] 1.0000000 1.0000000 0.9908228
c(mean_theor,meanx,meany)
## [1] 0.0000000000 -0.0005657265 -0.0019547451
c(sigma_theor,sigmax,sigmay)
## [1] 1.0000000 0.9941194 1.0001620
c(RMS_theor,RMSx,RMSy)
## [1] 1.0000000 0.9941097 1.0001539
c(v95_theor,v95x,v95y)
## [1] 1.959964 1.945848 1.960892
Note that, as the relationship between the sigma and the v95 values is 1.96 ~ 2, then it is possible to apply the famous v95 = 2 sigma approximation.
However, in two dimensions, the 95% is not computed as 2-sigma. There are other relationships, based upon the Rayleigh distribution and on the different quantiles:
meanH_theor<-0
meanH<-sqrt(meanx^2+meany^2)
sigmaH_theor<-sigma_theor*sqrt((4-pi)/2)
sigmaHquantile<-quantile(h,0.68,names=FALSE)
sigmaH<-sqrt(var(h))
h95_theor<-sigma_theor*sqrt(-2*log(0.05))
h95<-quantile(h,0.95,names=FALSE)
CEP_theor<-sigma_theor*sqrt(-2*log(0.5))
CEP<-quantile(h,0.5,names=FALSE)
RMSh_theor<-sqrt((sigma_theor*sqrt(pi/2))^2+sigmaH_theor^2)
RMSh<-sqrt(1/50000*sum(h^2))
DRMS_theor <- RMS_theor*sqrt(2)
DRMS<-RMS*sqrt(2)
twoDRMS_theor <-2*DRMS_theor
twoDRMS<-2*DRMS
c(meanH_theor,meanH)
## [1] 0.000000000 0.002034963
c(sigmaH_theor,sigmaH,sigmaHquantile)
## [1] 0.6551364 0.6526764 1.5062356
c(h95_theor,h95)
## [1] 2.447747 2.439348
c(CEP_theor,CEP)
## [1] 1.177410 1.173795
c(RMSh_theor,RMSh)
## [1] 1.414214 1.410164
c(DRMS_theor,DRMS)
## [1] 1.414214 1.405883
c(twoDRMS_theor,twoDRMS)
## [1] 2.828427 2.811767
The “distance RMS”, or DRMS, is the 2D vector whose components are the RMS of the distributions in both horizontal dimensions. In this case, where the mean is zero, it is equivalent to sqrt(2)*sigma. As it can be seen, it equals the RMS of the Rayleigh distribution. 2DRMS is just twice this number.
Let us assess the conversion values between these parameters.
Colheading<-c("sigma","CEP","DRMS","R95","2DRMS","sigmaH")
conv<-matrix(nrow=6,ncol=6,dimnames=list(Colheading,Colheading))
conv[1,2]=CEP_theor/sigma_theor
conv[1,3]=DRMS_theor/sigma_theor
conv[1,4]=h95_theor/sigma_theor
conv[1,5]=twoDRMS_theor/sigma_theor
conv[1,6]=sigmaH_theor/sigma_theor
conv[2,1]=1/conv[1,2]
conv[2,3]=DRMS_theor/CEP_theor
conv[2,4]=h95_theor/CEP_theor
conv[2,5]=twoDRMS_theor/CEP_theor
conv[2,6]=sigmaH_theor/CEP_theor
conv[3,1]=1/conv[1,3]
conv[3,2]=1/conv[2,3]
conv[3,4]=h95_theor/DRMS_theor
conv[3,5]=twoDRMS_theor/DRMS_theor
conv[3,6]=sigmaH_theor/DRMS_theor
conv[4,1]=1/conv[1,4]
conv[4,2]=1/conv[2,4]
conv[4,3]=1/conv[3,4]
conv[4,5]=twoDRMS_theor/h95_theor
conv[4,6]=sigmaH_theor/h95_theor
conv[5,1]=1/conv[1,5]
conv[5,2]=1/conv[2,5]
conv[5,3]=1/conv[3,5]
conv[5,4]=1/conv[4,5]
conv[5,6]=sigmaH_theor/twoDRMS_theor
conv[6,1]=1/conv[1,6]
conv[6,2]=1/conv[2,6]
conv[6,3]=1/conv[3,6]
conv[6,4]=1/conv[4,6]
conv[6,5]=1/conv[5,6]
for (i in 1:6) conv[i,i]=1
conv
## sigma CEP DRMS R95 2DRMS sigmaH
## sigma 1.0000000 1.1774100 1.4142136 2.4477468 2.828427 0.6551364
## CEP 0.8493218 1.0000000 1.2011224 2.0789247 2.402245 0.5564216
## DRMS 0.7071068 0.8325546 1.0000000 1.7308184 2.000000 0.4632514
## R95 0.4085390 0.4810179 0.5777614 1.0000000 1.155523 0.2676487
## 2DRMS 0.3535534 0.4162773 0.5000000 0.8654092 1.000000 0.2316257
## sigmaH 1.5263997 1.7971984 2.1586552 3.7362401 4.317310 1.0000000
(How to read: number [x,y] = column title item y / row title item x).
Datasheets refer normally to RMS values, therefore, if the error in each axis (E,N,U) were the same, the value in horizontal should be around sqrt(2) times higher than the value in vertical (e.g. 3 cm vertical, 5 cm horizontal). However, in real conditions, the vertical performance is always somewhat worse than in the horizontal axes for satellite geometry reasons, even worse than the joint horizontal RMS. Sometimes the manufacturers cheat removing the units to claim good performance. If a datasheet states that the accuracy is “X cm” in both dimensions, without specifying units, they are probably referring in horizontal to the DRMS (=Rayleigh RMS), so be cautious, especially when figures for this magnitude are used but other units are added. E.g. EGNOS horizontal RMS performance is around 0.3m in Central Europe, 0.5m in vertical; if a receiver manufacturer claims they get, say, 0.3m horizontal or vertical 95% with SBAS they are probably cheating.
The ratios between the most common 1D and 2D parameters are given below (first, ratios with respect to the 1D 95% percentile; then, ratios respect to the 1D sigma):
comp_v95<-c(CEP_theor/v95_theor,DRMS_theor/v95_theor,h95_theor/v95_theor,twoDRMS_theor/v95_theor,sigmaH_theor/v95_theor)
names(comp_v95)<-Colheading[-1]
comp_sigma<-c(CEP_theor/sigma_theor,DRMS_theor/sigma_theor,h95_theor/sigma_theor,twoDRMS_theor/sigma_theor,sigmaH_theor/sigma_theor)
names(comp_sigma)<-Colheading[-1]
comp_v95
## CEP DRMS R95 2DRMS sigmaH
## 0.6007304 0.7215508 1.2488734 1.4431016 0.3342594
comp_sigma
## CEP DRMS R95 2DRMS sigmaH
## 1.1774100 1.4142136 2.4477468 2.8284271 0.6551364
Note that 2-sigma does not mean 95% in 2D, not even 2DRMS. the ‘2’ in 2-sigma comes from the property that the 0.975 quantile of the gaussian distribution (which on a two-sided problem leaves 95% of the mass in the middle) is 1.96 ~ 2, but this does not hold in a 2D gaussian. Thus, talking about 2-sigma in horizontal errors should be avoided. Only R95 and CEP keep a rough x2 relationship.
c(h95_theor/sigmaH_theor,h95_theor/sigma_theor,h95_theor/CEP_theor)
## [1] 3.736240 2.447747 2.078925