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 Cloud Raster Format (CRF), multidimensional mosaic datasets, or multidimensional raster layers generated by netCDF, GRIB, or HDF files.

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 value 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 value. It's best to avoid unnecessary accuracy requirements, as they will increase the processing time and storage size.

This tool can be used to fit data along a linear, harmonic, or polynomial trend line, or it can be used to perform trend detection using the Mann-Kendall or Seasonal-Kendall test.

The Mann-Kendall and Seasonal-Kendall tests are used to determine whether there is a monotonic trend in the data. They are nonparametric, meaning they do not assume a specific distribution of data The Mann-Kendall test does not consider serial correlation or seasonal effects. If the data is seasonal, the Seasonal-Kendall test is more appropriate.

If the tool is used to perform either the Mann-Kendall or Seasonal-Kendall test, the output is a five-band raster as follows:

- Band 1 = Sen's slope
- Band 2 = p-value
- Band 3 = Mann-Kendall score (S)
- Band 4 = S Variance
- Band 5 = Z-score

The outputs from the Mann-Kendall or Seasonal-Kendall test can be used to determine which pixels in your multidimensional time series have a statistically significant trend. You can use this information in conjunction with the linear, harmonic, or polynomial trend analysis to extract significant trends in your time series. You can generate a mask including pixels with significant p-values, apply the mask to the multidimensional raster, and use this masked multidimensional raster as the input to the tool to perform linear, harmonic, or polynomial trend analysis.

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:
If the tool is used to perform linear, harmonic, or polynomial trend analysis, the output trend raster can be used as the input to the Predict Using Trend Raster tool. The trend raster 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 as follows:

- 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 as follows

- 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 as follows:

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

Third order polynomial fitting produces a five-band raster as follows:

- 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 for linear, harmonic, and polynomial trend rasters. 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}, {seasonal_period})

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 trend analysis to perform to 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.
- MANN-KENDALL —Variable pixel values will be evaluated using the Mann-Kendall trend test.
- SEASONAL-KENDALL —Variable pixel values will be evaluated using the Seasonal-Kendall trend test.
| 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 |

seasonal_period (Optional) | Specifies the time unit to be used for the length of a seasonal period when performing the Seasonal-Kendall test. - DAYS —The unit for the length of the seasonal period is days. This is the default.
- MONTHS —The unit for the length of the seasonal period is months.
| String |

#### 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 depth.

```
# 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_model = "LINEAR"
ignore_Nodata = "DATA"
# Execute - fit a linear model for salinity and temperature
trendCoeffMultidim = GenerateTrendRaster(inFile, dimensionName,
variables, trend_model, None, ignore_nodata)
# Save output
trendCoeffMultidim.save("C:/data/linear_trend_coefficients.crf")
```

This example tests for monotonic trend, then 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_test = "SEASONAL_KENDALL"
trend_model = "HARMONIC"
harmonic_frequency = 1
ignore_Nodata = "DATA"
length_of_cycle = 365.25
rmse = RMSE
r_square = NO_r2
p_value = NO_SLOPEPVALUE
# Test for monotonic trend
trendtest = GenerateTrendRaster(inFile, dimensionName, variables,
trend_test, '', ignore_Nodata, '', '', '', '', '', 'MONTHS')
# Execute
trendCoeffMultidim = GenerateTrendRaster(inFile, dimensionName,
variables, trend_model, harmonic_frequency, ignore_nodata,
length_of_cycle,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