# What is the appropriate input scale factor for EVI?

I am trying to calculate the Enhanced Vegetation Index using Landsat surface reflectance data. The formula for EVI using standard constants is:

EVI = 2.5 * ((NIR – Red) / (NIR + 6 * Red – 7.5 * Blue + 1))

Landsat Collection 1, Level 2 surface reflectance data is scaled from 0-10,000 upon delivery, but it is often rescaled from 0-1 for analysis. A simple analysis reveals that EVI is sensitive to the scale factor of the input data, so it is important to scale the input data correctly when calculating EVI.

A simple comparison in R:

``````#Input data scaled from 0-10,000

library(raster)
landsat_20070621 <- brick("./landsat_20070621.tif")
evi_20070621 <- 2.5 * ((landsat_20070621[[4]] - landsat_20070621[[3]]) / (landsat_20070621[[4]] + 6 * landsat_20070621[[3]] - 7.5 * landsat_20070621[[1]] + 1))

summary(values(evi_20070621))
Min.   1st Qu.    Median      Mean   3rd Qu.      Max.      NA's
-327.5000    0.5154    0.8160    0.8641    1.1570 1240.0000       385

#Input data scaled from 0-1

landsat_rescale <- landsat_20070621/10000
evi_rescale <- 2.5 * ((landsat_rescale[[4]] - landsat_rescale[[3]]) / (landsat_rescale[[4]] + 6 * landsat_rescale[[3]] - 7.5 * landsat_rescale[[1]] + 1))

summary(values(evi_rescale))
Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's
-0.1074  0.1414  0.1926  0.2047  0.2526  0.9126     385

``````

Many sources suggest that EVI values are inherently constrained between 0-1, although this is not necessarily the case because it does not have the same normalization structure as a normalized difference index (e.g., NDVI). Nonetheless, Huete et al. (2002) report values in the 0-1 range.

Comparing the values reported in literature to the values above, it seems like maybe an input scale factor of 0-1 is correct, although I cannot find this in writing anywhere. Is there a definitive source indicating the appropriate input scale factor for calculating EVI?

For reflectance that is stored in a 16 bit range, you apply a scaling factor to return the correct floating point (0-1) values. For collection-1 (signed 16-bit) `sf=0.0001` and for collection-2 (unsigned 16-bit) `sf=0.0000275 + -0.2` With collection-1 it really is just a row standardization `x/10000` or `x*0.0001` based on the maximum expected range but, collection-2 actually has a pixel offset that needs to be correct for.