prospect
in inverse mode: generalitiesPROSPECT
can be inverted using iterative optimization, by calling the function Invert_PROSPECT
. This iterative optimization is based on the function fmincon
included in the package pracma
.
By default, the merit function used for the inversion minimizes the RMSE between the simulated and the measured leaf optical properties. However, users can define their own merit function with associated criterion to minimize by defining their own merit function and adding it as input variable, such as MeritFunction = MyOwnMeritFunction
.
The results of inversion will also depend on the prospect version, i.e. on the parameters included in the prospect model. The following table shows the correspondance between prospect versions and prospect parameters. Each parameter can be considered as parameter to estimate or a fix value in the model, depending on the apriori knowledge.
Version | 5 | 5B | D | DB | PRO | PROB |
---|---|---|---|---|---|---|
CHL | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
CAR | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
ANT | ✅ | ✅ | ✅ | ✅ | ||
BROWN | ✅ | ✅ | ✅ | |||
EWT | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
LMA | ✅ | ✅ | ✅ | ✅ | ||
PROT | ✅ | ✅ | ||||
CBC | ✅ | ✅ | ||||
N | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
The function Invert_PROSPECT
requires either reflectance, or transmittance, or both. User can define which input variables of PROSPECT
should be estimated during inversion, and which ones should be set to a given value (0 or user’s choice). The list of input variables for inversion is :
SpecPROSPECT
: data frame including the refractive index and specific absorption ceofficients, defined for a given spectral range (max range: 400 nm - 2500 nm). simulation and inversion on different spectral domains can be peformed by adapting the information in SpecPROSPECT
Refl
: numeric: individual leaf reflectance corresponding to the spectral domain defined in SpecPROSPECT
. Set to NULL
if inversion on transmittance onlyTran
: numeric: individual leaf transmittance corresponding to the spectral domain defined in SpecPROSPECT
. Set to NULL
if inversion on reflectance onlyParms2Estimate
list. Parameters to estimate. Set to ‘ALL’ by default.InitValues
data frame including initial values of PROSPECT input parameters. During optimization, they are used either as initialization values for parameters to estimate, or as fix values for other parameters. Parameters not compatible with PROSPECT_version are not taken into account.PROSPECT_version
character. corresponds to the PROSPECT version. should be one of the following versions: ‘5’, ‘5B’, ‘D’, ‘DB’, ‘PRO’, ‘PROB’. Use the vesion ending with ‘B’ if you want to estimate brown pigments. Versions ‘5’ and ‘5B’ are actually based on the specific absorption coefficients of chlorophylls and carotenoids, and the refractive index from PROSPECT-D. ANT
is then set to 0 during inversion…MeritFunction
character. name of the function to be used as merit function with given criterion to minimize (default = RMSE)xlub
data.frame. Boundaries of the parameters to estimate. The data.frame must have columns corresponding to first line being the lower boundaries and second line the upper boundaries.alphaEst
boolean. should alpha
be estimated or not? Keep in mind that most published results use alpha
with its default value.Invert_PROSPECT
returns a list containing estimated values of PROSPECT input parameters
All parameters are estimated, except alpha
and BROWN
which are set to their default value.
# simulate leaf optical properties
CHL <- 45; CAR <- 10; ANT <- 0.2
EWT <- 0.012; LMA <- 0.010; N <- 1.3
LRT_D <- PROSPECT(SpecPROSPECT,CHL=CHL,CAR=CAR,ANT=ANT,EWT=EWT,LMA=LMA,N=N)
# define set of parameters to be estimated
Parms2Estimate <- 'ALL'
# define initial values for the inversion (should not impact final results)
InitValues <- data.frame(CHL=40, CAR=10, ANT=0.1, BROWN=0, EWT=0.01, LMA=0.01, N=1.5)
# invert PROSPECT with simulated leaf optical properties
OutPROSPECT <- Invert_PROSPECT(SpecPROSPECT=SpecPROSPECT,Refl = LRT_D$Reflectance,Tran = LRT_D$Transmittance,
Parms2Estimate = 'ALL',PROSPECT_version = 'D')
All parameters are estimated, except alpha
and BROWN
which are set to their default value. The same optical properties as previous example are used.
# define set of parameters to be estimated
Parms2Estimate <- 'ALL'
# define initial values for the inversion (should not impact final results)
InitValues <- data.frame(CHL=40, CAR=10, ANT=0.1, BROWN=0, EWT=0.01, LMA=0.01, N=1.5)
# define spectral subdomain from 400 nm to 800 nm
SpectralSubDomain <- c(400,800)
# adjust spectral domain
SubData <- FitSpectralData(SpecPROSPECT=SpecPROSPECT,lambda=LRT_D$wvl,LRT_D$Reflectance, Tran = LRT_D$Transmittance,UserDomain = SpectralSubDomain)
SubSpecPROSPECT = SubData$SpecPROSPECT
Sublambda = SubData$lambda
SubRefl = SubData$Refl
SubTran = SubData$Tran
# invert PROSPECT with simulated leaf optical properties
OutPROSPECT <- Invert_PROSPECT(SpecPROSPECT=SubSpecPROSPECT,Refl = SubRefl,Tran = SubTran,
Parms2Estimate = Parms2Estimate,PROSPECT_version = 'D')
Only pigments and N
are estimated. The same optical properties as previous example are used.
# define set of parameters to be estimated
Parms2Estimate <- c("CHL", "CAR", "ANT", "N")
# define initial values for the inversion (should not impact final results)
InitValues <- data.frame(CHL=40, CAR=10, ANT=0.1, BROWN=0, EWT=0.01, LMA=0.01, N=1.5)
# define spectral subdomain from 400 nm to 800 nm
SpectralSubDomain <- c(400,800)
# adjust spectral domain
SubData <- FitSpectralData(SpecPROSPECT=SpecPROSPECT,lambda=LRT_D$wvl,LRT_D$Reflectance, Tran = LRT_D$Transmittance,UserDomain = SpectralSubDomain)
SubSpecPROSPECT = SubData$SpecPROSPECT
Sublambda = SubData$lambda
SubRefl = SubData$Refl
SubTran = SubData$Tran
# invert PROSPECT with simulated leaf optical properties
OutPROSPECT <- Invert_PROSPECT(SpecPROSPECT=SubSpecPROSPECT,Refl = SubRefl,Tran = SubTran,
Parms2Estimate = Parms2Estimate,PROSPECT_version = 'D')
EWT
, LMA
and N
are estimated. The same optical properties as previous example are used.
# define set of parameters to be estimated
Parms2Estimate <- c("EWT", "LMA", "N")
# define initial values for the inversion (should not impact final results)
InitValues <- data.frame(CHL=0, CAR=0, ANT=0, BROWN=0, EWT=0.01, LMA=0.01, N=1.5)
# define spectral subdomain
SpectralSubDomain <- c(1700,2400)
# adjust spectral domain
SubData <- FitSpectralData(SpecPROSPECT=SpecPROSPECT,lambda=LRT_D$wvl,LRT_D$Reflectance, Tran = LRT_D$Transmittance,UserDomain = SpectralSubDomain)
SubSpecPROSPECT = SubData$SpecPROSPECT
Sublambda = SubData$lambda
SubRefl = SubData$Refl
SubTran = SubData$Tran
# invert PROSPECT with simulated leaf optical properties
OutPROSPECT <- Invert_PROSPECT(SpecPROSPECT=SubSpecPROSPECT,Refl = SubRefl,Tran = SubTran,
Parms2Estimate = Parms2Estimate,PROSPECT_version = 'D')
The function Invert_PROSPECT_OPT
automatically sets the optimal spectral domains during inversion for all constituents to be estimated.
Optimal spectral domains and configuration are defined in Féret et al. (2019), Féret et al. (2020), and Spafford et al. (2020, submitted).
N
does not need to be part of Parms2Estimate
, as it is automatically estimated when needed.
# define set of parameters to be estimated
Parms2Estimate = c('CHL','CAR','ANT','EWT','LMA')
# define initial values for the inversion (should not impact final results)
InitValues <- data.frame(CHL=40, CAR=8, ANT=0.1, BROWN=0, EWT=0.01, LMA=0.01, N=1.5)
# call Invert_PROSPECT_OPT in order to automaticall get optimal estimation of leaf parameters following latest published results
ParmEst <- Invert_PROSPECT_OPT(SpecPROSPECT=SpecPROSPECT, lambda=LRT_D$wvl, Refl = LRT_D$Reflectance,Tran = LRT_D$Transmittance,
PROSPECT_version = 'D',Parms2Estimate = Parms2Estimate,
InitValues = InitValues)
Such definition of optimal spectral domains can also be set manually. For example, here is how to estimate proteins from leaf optical properties using the optimal spectral domain defined in Féret et al. (2019).
Please note that N
needs to be added to Parms2Estimate
, if user want it to be estimated during the inversion, otherwise it will be set to its default value.
# simulate leaf optical properties
CHL <- 45; CAR <- 10; ANT <- 0.2
EWT <- 0.012; LMA <- 0.000; N <- 1.3;
PROT <- 0.001; CBC <- 0.010;
LRT_PRO <- PROSPECT(SpecPROSPECT,CHL=CHL,CAR=CAR,ANT=ANT,EWT=EWT,LMA=LMA,N=N,PROT=PROT,CBC = CBC)
# define spectral subdomain
SpectralSubDomain <- c(2125,2175)
# adjust spectral domain
SubData <- FitSpectralData(SpecPROSPECT=SpecPROSPECT,lambda=LRT_D$wvl,LRT_D$Reflectance, Tran = LRT_D$Transmittance,UserDomain = SpectralSubDomain)
SubSpecPROSPECT = SubData$SpecPROSPECT
Sublambda = SubData$lambda
SubRefl = SubData$Refl
SubTran = SubData$Tran
Parms2Estimate <- c("EWT", "PROT", "CBC", "N")
# invert PROSPECT with simulated leaf optical properties
OutPROSPECT = Invert_PROSPECT(SpecPROSPECT=SubSpecPROSPECT,Refl = SubRefl, Tran = SubTran,
Parms2Estimate = Parms2Estimate, PROSPECT_version = 'PRO')