Available with Image Analyst license.

## Summary

Estimates the trend for each pixel along a dimension for one or more variables in a multidimensional raster.

## Usage

A use example for this tool is you have 40 years worth of monthly ocean temperature data, and you want to fit a trend line for each pixel to see where and how temperature changed over time.

Supported multidimensional raster datasets include netCDF, GRIB, HDF, and Esri's CRF. Multidimensional mosaic datasets are also supported.

This tool produces a multidimensional raster dataset in Cloud Raster Format (CRF). Currently, no other output formats are supported.

By default, the multidimensional raster output will be compressed using the LZ77 compression type. It is recommended, however, that you change the compression type to LERC and adjust the Maximum Error based on your data. For example, if you expect the results of the analysis to be accurate to three decimal places, use 0.001 for the Maximum Error. It's best to avoid unnecessary accuracy requirements, as they will increase the processing time and storage size.

There are three trend line options for fitting a trend to the variable values along a dimension: linear, harmonic, and polynomial. The three trend fitting options are described below.

- Linear—The linear trend line is a best-fit straight line that is used to estimate simple linear relationships. A linear trend highlights a rate of change that is increasing or decreasing at a steady rate. The formula for the linear trend line is as follows:
- y = the pixel's variable value
- x = the dimension value
- ß0 = the y-intercept
- ß1 = the linear slope or rate of change
ß1 > 0 indicates an increasing trend

ß1 < 0 indicates a decreasing trend

- Harmonic—The harmonic trend line is a periodically repeating curved line that is best used to describe data that follows a cyclical pattern, such as seasonal temperature changes. The formula for the harmonic trend line is as follows:
- y = the pixel's variable value
- t = the Julian date
- ß0 = the y-intercept
- ß1 = the rate of change
- α, γ = coefficients of inter-annual or intra-annual changes
- ω = i
- f = the harmonic frequency

- Polynomial—The polynomial trend line is a curved line that is useful for data that fluctuates. In this case, a polynomial order value is used to indicate the maximum number of fluctuations that occur. The formula for the polynomial trend line is as follows:
- y = the pixel's variable value
- x = the dimension value
- ß0, ß1, ß2, ß3, ..., ßn = constant coefficients

- Linear—The linear trend line is a best-fit straight line that is used to estimate simple linear relationships. A linear trend highlights a rate of change that is increasing or decreasing at a steady rate. The formula for the linear trend line is as follows:
The output trend raster generated with this tool is used as the input to the Predict Using Trend Raster tool. The output is a multidimensional raster in which each slice is a multiband raster containing information about the trend line. If you are analyzing the trend for a single variable for a dataset containing a single dimension (for example, time), there will be a single slice in the output dataset. If you are analyzing a single variable for a dataset containing multiple dimensions (for example, time and depth), each slice will contain trend information for each dimension value along the dimension that was not included in the analysis.

For Linear trend analysis, the output contains three-band rasters, where:

- Band 1 = Slope
- Band 2 = Intercept
- Band 3 = Root Mean Square Error (RMSE) or the error around the line of best fit

For Harmonic trend analysis, the number of bands in the output depends on the harmonic frequency. When the frequency is set to 1, the output is a five-band raster, where:

- Band 1 = Slope
- Band 2 = Intercept
- Band 3 = Harmonic_sin1
- Band 4 = Harmonic_cos1
- Band 5 = RMSE

When the frequency is set to 2, the output is a seven-band raster, where:

- Band 1 = Slope
- Band 2 = Intercept
- Band 3 = Harmonic_sin1
- Band 4 = Harmonic_cos1
- Band 5 = Harmonic_sin2
- Band 6 = Harmonic_cos2
- Band 7 = RMSE

For Polynomial trend analysis, the number of bands in the output depends on the polynomial order. Second order polynomial fitting produces a four-band raster, where:

- Band 1 = Polynomial_2
- Band 2 = Polynomial_1
- Band 3 = Polynomial_0
- Band 4 = RMSE

Third order polynomial fitting produces a five-band raster, where:

- Band 1 = Polynomial_3
- Band 2 = Polynomial_2
- Band 3 = Polynomial_1
- Band 4 = Polynomial_0
- Band 5 = RMSE

The Length of Cycle parameter for harmonic trend analysis is used to indicate the number and length of cycles you expect to see in your data throughout a day or year. For example, if you expect your data to go through two cycles of variation in one year, the length of cycle will be 182.5 days or 0.5 years. If you have temperature data collected every three hours, and there is one cycle of variation per day, the length of cycle is one day.

The Frequency parameter for harmonic trend analysis is used to describe the harmonic model to fit to the data. If the frequency is set to 1, a combination of linear and the first order harmonic curve will be used to fit the model. If the frequency is 2, a combination of linear, first order harmonic curve, and second order harmonic curve will be used to fit the data. If the frequency is 3, an additional third order harmonic curve will be used to model the data, and so on.

Model goodness-of-fit statistics can be generated as optional outputs. The root mean square error (RMSE), R-squared, and the trend slope p-value can be calculated and displayed in the output raster's Properties window in the Statistics section. You can also display the statistics by symbolizing the output trend raster using RGB symbology and specifying the statistics as the red, green, and blue bands.

## Syntax

GenerateTrendRaster(in_multidimensional_raster, dimension, {variables}, {line_type}, {frequency}, {ignore_nodata}, {cycle_length}, {cycle_unit}, {rmse}, {r2}, {slope_p_value})

Parameter | Explanation | Data Type |

in_multidimensional_raster | The input multidimensional raster dataset. | Raster Dataset; Raster Layer; Mosaic Dataset; Mosaic Layer; Image Service; File |

dimension | The dimension along which a trend will be extracted for the variable or variables selected in the analysis. | String |

variables [variables,...] (Optional) | The variable or variables for which trends will be calculated. If no variable is specified, the first variable in the multidimensional raster will be analyzed. | String |

line_type (Optional) | Specifies the type of line to be used to fit to the pixel values along a dimension. - LINEAR —Variable pixel values will be fitted along a linear trend line. This is the default.
- POLYNOMIAL —Variable pixel values will be fitted along a second order polynomial trend line.
- HARMONIC —Variable pixel values will be fitted along a harmonic trend line.
| String |

frequency (Optional) | The frequency or the polynomial order number to use in the trend fitting. If the trend type is polynomial, this parameter specifies the polynomial order. If the trend type is harmonic, this parameter specifies the number of models to use to fit the trend. This parameter is only included in the trend analysis when the dimension being analyzed is time. If the line_type parameter is HARMONIC, the default value is 1, meaning a first order harmonic curve is used to fit the model. If the line_type parameter is POLYNOMIAL, the default value is 2, or second order polynomial. | Long |

ignore_nodata (Optional) | Specifies whether NoData values are ignored in the analysis. - DATA — The analysis will include all valid pixels along a given dimension and ignore any NoData pixels. This is the default.
- NODATA —The analysis will result in NoData if there are any NoData values for the pixels along the given dimension.
| Boolean |

cycle_length (Optional) | The length of periodic variation to model. This parameter is required when line_type is set to HARMONIC. For example, leaf greenness often has one strong cycle of variation in a single year, so the cycle length is 1 year. Hourly temperature data has one strong cycle of variation throughout a single day, so the cycle length is 1 day. The default length is 1 year for data that varies on an annual cycle. | Double |

cycle_unit (Optional) | Specifies the time unit to be used for the length of a harmonic cycle. - DAYS —The unit for the length of the harmonic cycle is days.
- YEARS —The unit for the length of the harmonic cycle is years. This is the default.
| String |

rmse (Optional) | Specifies whether the root mean square error (RMSE) of the trend fit line will be calculated. - RMSE —The RMSE will be calculated. This is the default.
- NO_RMSE —The RMSE will not be calculated.
| Boolean |

r2 (Optional) | Specifies whether the R-squared goodness-of-fit statistic for the trend fit line will be calculated. - R2 —The R-squared value will be calculated.
- NO_R2 —The R-squared value will not be calculated. This is the default.
| Boolean |

slope_p_value (Optional) | Specifies whether the p-value statistic for the slope coefficient of the trend line will be calculated. - SLOPEPVALUE —The p-value will be calculated.
- NO_SLOPEPVALUE —The p-value will not be calculated. This is the default.
| Boolean |

#### Return Value

Name | Explanation | Data Type |

out_multidimensional_raster | The output Cloud Raster Format (CRF) multidimensional raster dataset. | Raster |

## Code sample

This example calculates the polynomial trend fit for precipitation data over time.

```
# Import system modules
import arcpy
from arcpy.ia import *
# Check out the ArcGIS Image Analyst extension license
arcpy.CheckOutExtension("ImageAnalyst")
# Execute
trendCoeffMultidim = arcpy.ia.GenerateTrendRaster("model_time_series.crf",
"StdTime", "precip", "POLYNOMIAL", 2, "DATA", None, '', "RMSE","R2", None)
# Save output
trendCoeffMultidim.save("C:/data/polynomial_trend_coefficients.crf")
```

This example calculates the linear trend fit for temperature and salinity data over time.

```
# Import system modules
import arcpy
from arcpy.ia import *
# Check out the ArcGIS Image Analyst extension license
arcpy.CheckOutExtension("ImageAnalyst")
# Define input parameters
inFile = "C:/Data/ClimateVariables.crf"
dimensionName = "Depth"
variables = "salinity;temp"
trend_type = "LINEAR"
frequency = None
ignore_Nodata = "DATA"
cycle_length = None
cycle_unit = ''
rmse = "RMSE"
r2 = "R2"
slopeP = "NO_SLOPEPVALUE")
# Execute - fit a linear model for salinity and temperature
trendCoeffMultidim = GenerateTrendRaster(inFile, dimensionName,
variables, trend_type, frequency, ignore_nodata, cycle_length,
cycle_unit, rmse, r2, slopeP)
# Save output
trendCoeffMultidim.save("C:/data/linear_trend_coefficients.crf")
```

This example calculates the harmonic trend fit along an NDVI time series.

```
# Import system modules
import arcpy
from arcpy.ia import *
# Check out the ArcGIS Image Analyst extension license
arcpy.CheckOutExtension("ImageAnalyst")
# Define input parameters
inFile = "C:/data/ndvi_time_series.crf"
dimensionName = "StdTime"
variables = "ndvi"
trend_model = "HARMONIC"
harmonic_frequency = 1
ignore_Nodata = "DATA"
length_of_cycle = 1
cycle_unit = "YEARS"
rmse = "RMSE"
r_square = "NO_R2"
p_value = "NO_SLOPEPVALUE"
# Execute
trendCoeffMultidim = GenerateTrendRaster(inFile, dimensionName,
variables, trend_model, harmonic_frequency, ignore_nodata,
length_of_cycle, cycle_unit, rmse,r_square,p_value)
# Save output
trendCoeffMultidim.save("C:/data/harmonic_trend_coefficients.crf")
```

## Environments

## Licensing information

- Basic: Requires Image Analyst
- Standard: Requires Image Analyst
- Advanced: Requires Image Analyst