This should be easily solved using bayesian inference. You know the measurement properties of the individual points with respect to their true value and want to infer the population mean and SD that generated the true values. This is a hierarchical model.
Rephrasing the problem (Bayes basics)
Note that whereas orthodox statistics give you a single mean, in the bayesian framework you get a distribution of credible values of the mean. E.g. the observations (1, 2, 3) with SDs (2, 2, 3) could have been generated by the Maximum Likelihood Estimate of 2 but also by a mean of 2.1 or 1.8, though slightly less likely (given the data) than the MLE. So in addition to the SD, we also infer the mean.
Another conceptual difference is that you have to define your knowledge state before making the observations. We call this priors. You might know in advance that a certain area was scanned and in a certain height range. The complete absence of knowledge would be to have uniform(-90, 90) degrees as the prior in X and Y and maybe uniform(0, 10000) meters on height (above the ocean, below the highest point on earth). You have to define priors distributions for all parameters that you want to estimate, i.e. get posterior distributions for. This is true for the standard deviation as well.
Donc, reformulant votre problème, je suppose que vous voulez déduire des valeurs crédibles pour trois moyennes (X.mean, Y.mean, X.mean) et trois écarts types (X.sd, Y.sd, X.sd) qui pourraient avoir généré vos données.
Le modèle
En utilisant la syntaxe BUGS standard (utilisez WinBUGS, OpenBUGS, JAGS, stan ou d'autres packages pour exécuter cela), votre modèle ressemblerait à ceci:
model {
# Set priors on population parameters
X.mean ~ dunif(-90, 90)
Y.mean ~ dunif(-90, 90)
Z.mean ~ dunif(0, 10000)
X.sd ~ dunif(0, 10) # use something with better properties, i.e. Jeffreys prior.
Y.sd ~ dunif(0, 10)
Z.sd ~ dunif(0, 100)
# Loop through data (or: set up plates)
# assuming observed(x, sd(x), y, sd(y) z, sd(z)) = d[i, 1:6]
for(i in 1:n.obs) {
# The true value was generated from population parameters
X[i] ~ dnorm(X.mean, X.sd^-2) #^-2 converts from SD to precision
Y[i] ~ dnorm(Y.mean, Y.sd^-2)
Z[i] ~ dnorm(Z.mean, Z.sd^-2)
# The observation was generated from the true value and a known measurement error
d[i, 1] ~ dnorm(X[i], d[i, 2]^-2) #^-2 converts from SD to precision
d[i, 3] ~ dnorm(Y[i], d[i, 4]^-2)
d[i, 5] ~ dnorm(Z[i], d[i, 6]^-2)
}
}
Naturellement, vous surveillez les paramètres .mean et .sd et utilisez leurs éléments postérieurs pour l'inférence.
Simulation
J'ai simulé des données comme celle-ci:
# Simulate 500 data points
x = rnorm(500, -10, 5) # mean -10, sd 5
y = rnorm(500, 20, 5) # mean 20, sd 4
z = rnorm(500, 2000, 10) # mean 2000, sd 10
d = cbind(x, 0.1, y, 0.1, z, 3) # added constant measurement errors of 0.1 deg, 0.1 deg and 3 meters
n.obs = dim(d)[1]
Puis a exécuté le modèle en utilisant JAGS pour 2000 itérations après un burnin de 500 itérations. Voici le résultat pour X.sd.
La plage bleue indique l'intervalle de densité postérieure ou crédible le plus élevé à 95% (où vous pensez que le paramètre est après avoir observé les données. Notez qu'un intervalle de confiance orthodoxe ne vous donne pas cela).
The red vertical line is the MLE estimate of the raw data. It is usually the case that the most likely parameter in Bayesian estimation is also the most likely (maximum likelihood) parameter in orthodox stats. But you should not care too much about the top of the posterior. The mean or median is better if you want to boil it down to a single number.
Notice that MLE/top is not at 5 because the data were randomly generated, not because of wrong stats.
Limitiations
This is a simple model which has several flaws currently.
- It doesn't handle the identity of -90 and 90 degrees. This can be done, however, by making some intermediate variable which shifts extreme values of estimated parameters into the (-90, 90) range.
- X, Y et Z sont actuellement modélisés comme indépendants bien qu'ils soient probablement corrélés et cela devrait être pris en compte pour tirer le meilleur parti des données. Cela dépend si l'appareil de mesure était en mouvement (la corrélation en série et la distribution conjointe de X, Y et Z vous donneront beaucoup d'informations) ou immobile (l'indépendance est ok). Je peux développer la réponse pour approcher cela, si demandé.
Je dois mentionner qu'il y a beaucoup de littérature sur les modèles spatiaux bayésiens que je ne connais pas.