FabriceSamonte / ee_fractional_cover

Fractional cover aggregation for Google EE
2 stars 1 forks source link

Is this a Dirichlet regression problem? #2

Open wcornwell opened 3 years ago

wcornwell commented 3 years ago

https://besjournals.onlinelibrary.wiley.com/doi/10.1111/2041-210X.13234

mitchest commented 3 years ago

Probably worth throwing in the mix (with K=3?) if trying to simultaneously predict the green/dead/bare proportions? Implementation options are quite limited though i think. Would also have to consider an implementation that supports 0 and 1 values (doesn't exist in R i don't think), although I'm not sure how often (or if at all!) it occurs in the star transect data.

Key will be to keep in mind we have a prediction problem - we want to avoid silly values at the edge/outside the training range. Beta/Dirichlet might actually be OK in that regard (but that paper by Jacob is mostly focused on inference from the param estimates, so hard to tell).

wcornwell commented 3 years ago

I had a play with Dirichlet k=3.

There are a few <0 and >1 values in the star transect data, which might be errors? image

right now there are lots of missing values from landsat, but I assume that relates to issues in #1. but leaving them out and also the <0 and >1 values DirichReg seems to fit well and quickly.

I guess we have a general problem to solve, which is how to do model evaluation. DirichReg is likelihood based, but maybe some of the other methods aren't?

wcornwell commented 3 years ago

they must have left them out of the original paper also, see figure 2:

image

FabriceSamonte commented 3 years ago

Hi @wcornwell, yes there is an error for npv, completely forgot about it and went straight into Google EE. Could be a minor detail I missed from the original email containing the formulas for overstory, midstory, ground and effective cover.

Midstory plants are in:
mid_g (green)
mid_d (dead)
mid_b (bare)

Overstory (tree canopy) plants are in:
over_g (green)
over_d (dead)
over_b (bare)

You need to calculate the proportion of each fraction in each vegetation level, and then work out the overall proportion that the satellite would see.

# Overstory fractions
overfpc = over_g / (100 - over_b)
overdpc = over_d / (100 - over_b)
overppc = (over_g + over_d + over_b) / 100

# Midstory fractions
midppc = (mid_g + mid_d + mid_b) / 100
satmidfpc = (mid_g / 100) * (1 - overppc)
satmiddpc = (mid_d / 100) * (1 - overppc)
satmidbpc = (mid_b / 100) * (1 - overppc)

# Ground cover fractions
groundpv = green / 100
groundnpv = (dead + litter) / 100
groundbare = (crust + dist + rock) / 100
groundcrypt = crypto / 100
groundtotcov = (green + dead + litter + crust + dist + rock) / 100
satgroundpv = groundpv * (1 - midppc) * (1 - overppc)
satgroundnpv = groundnpv * (1 - midppc) * (1 - overppc)
satgroundbare = groundbare * (1 - midppc) * (1 - overppc)
satgroundcrypt = groundcrypt * (1 - midppc) * (1 - overppc)

# Fractional cover
# pv is photosynthetic cover
# npv is non-pv cover
# bs is bare soil and rock
pv = 100 * (overfpc + satmidfpc + satgroundpv)
npv = 100 * (overdpc + overbpc + satmiddpc + satmidbpc + satgroundnpv + satgroundcrypt)
bs = 100 * satgroundbare

I think there is a missing calculation for overbpc (used for npv) @adrian-g-fisher?

adrian-g-fisher commented 3 years ago

Yes, you're right @FabriceSamonte I left out the calculation for overbpc. I edited the code, but then github said I couldn't commit to the repo and I needed to create a branch... can you see the new fork? Not sure if I need to do anything more (this is a new thing for me)

mitchest commented 3 years ago

Yes, you're right @FabriceSamonte I left out the calculation for overbpc. I edited the code, but then github said I couldn't commit to the repo and I needed to create a branch... can you see the new fork? Not sure if I need to do anything more (this is a new thing for me)

You could try a pull request (will request @FabriceSamonte to merge the changes in your fork)!

FabriceSamonte commented 3 years ago

Hi Adrian,

Not at the moment, create a pull request and I’ll merge everything! Otherwise, I’ve invited everyone to have collaborator access rights.

Cheers, Fabrice

On 11 Jan 2021, at 12:57 pm, Mitchell Lyons notifications@github.com<mailto:notifications@github.com> wrote:

Yes, you're right @FabriceSamontehttps://github.com/FabriceSamonte I left out the calculation for overbpc. I edited the code, but then github said I couldn't commit to the repo and I needed to create a branch... can you see the new fork? Not sure if I need to do anything more (this is a new thing for me)

You could try a pull request (will request @FabriceSamontehttps://github.com/FabriceSamonte to merge the changes in your fork)!

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHubhttps://github.com/FabriceSamonte/ee_fractional_cover/issues/2#issuecomment-757587697, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AETME43HZ6HRZKRBZXVR6NDSZJLHHANCNFSM4VSPI3QQ.

wcornwell commented 3 years ago

my dirchlet model is worse than @FabriceSamonte tensor flow thing (RMSE = 11,18,14) but it would be trivial to implement i guess

image

adrian-g-fisher commented 3 years ago

Just for reference, the published model developed with 1171 field sites in 2015 achieved RMSE of: 11 % for PV 16 % for NPV 13 % for BS