gimli-org / gimli

Geophysical Inversion and Modeling Library :earth_africa:

Home Page:https://www.pygimli.org

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

How to improve inversion accuracy?

lwang19-ai opened this issue · comments

Problem description

  • I did a 2D inversion for ERT data. The result shows a relatively large misfit.
  • The response seems smaller than Data. I changed the lambda value from 10 to 5 for regularization, but there is no obvious improvement.
    image

image

  • Finally I changed the lambda to 0. Then I get this result:
    image

So the question is:

  • How should I improve the inversion accuracy? It seems the result without regularization is more accurate. How should I evaluate which inversion is better?

Something is wrong with your error estimation. You achieve a chi-square < 1 with a relatively large RRMS (and then the inversion stops), so your error estimate is definitely too pessimistic. How did you do that? Moreover, I noticed that your model depth is probably too small.

Based on this issue, I would like to know how to improve the appearance of the plotted results. In the above figure, the horizontal axis has a length of around 140, while the vertical axis has a length of around 20. The aspect ratio makes the plot results look unappealing. thanks! @halbmy

mgr.showResult()

As I've told you before, the 20m depth might be too low and you should change this.

But what do you mean with unappealing? Visualization is something you should invest time. pyGIMLi provides useful tools but it is up to the user. The result of the showResult function is a matplotlib axes object with which you can improve your figure like aspect ratio, labels etc.

Something is wrong with your error estimation. You achieve a chi-square < 1 with a relatively large RRMS (and then the inversion stops), so your error estimate is definitely too pessimistic. How did you do that? Moreover, I noticed that your model depth is probably too small. @halbmy

  • First question about the measurement error
    Thank you for the response. I checked the error data in the raw file. If I did reciprocal measurement, I used the mean of two error data. If there is only one measurement file, I directly used the err column in syscal pro machine measurement file.
    Here is one plot of the err. I removed data with errors larger than 20.
    image
    And this is the apparent rhoa data and relative error:
    image
    image

  • Second question about the depth.
    I chose the above depth because this is a measurement for a landfill which is around 150m * 20m. The area below 20m has different components and is not our interested part. Why do I need to use a larger depth? Is it better for inversion?

The stacking errors of instruments are often helpful for data processing and also for having an idea of your error model, but usually not good for weighting individual data. Try data.estimateError() instead.

Even if you're not interested in structures below 20m depth, it will affect your data and you should account for that, otherwise you might get artifacts or bad data fit.

Good to know!
And may I know what is the recommended depth for the mesh?
Since there should be a different layer under 20m. Should I consider it in the mesh generation process?

I used data.estimateError() and increased the inversion depth to be around 1/3 of length. Here is the new result. The rrms is lower than 10 and chi-square < 1.
image

looks good. There are a few low apparent resistivity points that cannot be fitted but otherwise good. I guess there won't be much resolution below 25-30m depth. Maybe you can improve things be some zWeight < 1.

Thanks a lot Thomas. I have a following question: if I use the inverted result as prior and generate a synthetic measurement data file, may I get the data back if I run inversion again by the synthetic measurement? I have this werid question because I want to validate some assumption by a synthetic experiment. Instead of manually generating the prior, I want to use the inverted result as a prior. And then I change part of the resistivity map to see if it can be reflected by the new synthetic inversion.
I find the new inversion is hard to reach a low rrms. It's around 40%. Do you think I can improve the result by changing inversion parameters? Or it's just difficult to run an inversion with such a diverse resistivity map?

I don't quite understand. It sounds like it is a rather simple workflow and if you're inverting synthetic data you should be able to find a model fitting the data even though the result may differ from the synthetic model. I guess you should write down some sort of a code. And maybe discuss this in a separate issue.

Yes, you are right. The workflow is correct. I find there was a mistake in my former script. Thank you!