Linear degradation model for estimating remaining useful life

## Description

Use `linearDegradationModel` to model a linear degradation process for estimating the remaining useful life (RUL) of a component. Degradation models estimate the RUL by predicting when a monitored signal will cross a predefined threshold. Linear degradation models are useful when the monitored signal is a log scale signal or when the component does not experience cumulative degradation. For more information on the degradation model, see Linear Degradation Model.

To configure a `linearDegradationModel` object for a specific type of component, you can:

• Estimate the model prior parameters using historical data regarding the health of an ensemble of similar components, such as multiple machines manufactured to the same specifications. To do so, use `fit`.

• Specify the model prior parameters when you create the model based on your knowledge of the component degradation process.

Once you configure the parameters of your degradation model, you can then predict the remaining useful life of similar components using `predictRUL`. For a basic example illustrating RUL prediction with a degradation model, see Update RUL Prediction as Data Arrives.

For general information on predicting remaining useful life, see Models for Predicting Remaining Useful Life.

## Creation

### Syntax

``mdl = linearDegradationModel``
``mdl = linearDegradationModel(Name,Value)``

### Description

example

````mdl = linearDegradationModel` creates a linear degradation model for estimating RUL and initializes the model with default settings.```

example

````mdl = linearDegradationModel(Name,Value)` specifies user-settable model properties using name-value pairs. For example, `linearDegradationModel('NoiseVariance',0.5)` creates a linear degradation model with a model noise variance of `0.5`. You can specify multiple name-value pairs. Enclose each property name in quotes.```

## Properties

expand all

You can specify `Theta` using a name-value pair argument when you:

• Create the model.

• Reset the model using the `restart` function.

Otherwise, the value of `Theta` changes when you use the `update` function.

You can specify `ThetaVariance` using a name-value pair argument when you:

• Create the model.

• Reset the model using the `restart` function.

Otherwise, the value of `ThetaVariance` changes when you use the `update` function.

You can specify `Phi` using a name-value pair argument when you create the model. Otherwise, the value of `Phi` changes when you estimate the model prior using the `fit` function.

Prior information about model parameters, specified as a structure with the following fields:

• `Theta` — Mean value of slope parameter

• `ThetaVariance` — Variance of slope parameter

You can specify the fields of `Prior`:

• When you create the model. When you specify `Theta` or `ThetaVariance` at model creation using name-value pairs, the corresponding field of `Prior` is also set.

• Using the `fit` function. In this case, the prior values are derived from the data used to fit the model.

• Using the `restart` function. In this case, the current values of `Theta` and `ThetaVariance` are copied to the corresponding fields of `Prior`.

• Using dot notation after model creation.

You can specify `NoiseVariance`:

• Using a name-value pair when you create the model

• Using a name-value pair with the `restart` function

• Using dot notation after model creation

Slope detection level for determining the start of the degradation process, specified as a scalar in the range [0,1]. This value corresponds to the alpha value in a t-test of slope significance.

To disable the slope detection test, set `SlopeDetectionLevel` to `[]`.

You can specify `SlopeDetectionLevel`:

• Using a name-value pair when you create the model

• Using a name-value pair with the `restart` function

• Using dot notation after model creation

Slope detection time, which is the instant when a significant slope is detected, specified as a scalar. The `update` function sets this value when `SlopeDetectionLevel` is not empty.

Latest degradation feature value supplied to the `update` function, specified as a scalar.

Initial lifetime variable value when the `update` function is first called on the model, specified as a scalar.

When the model detects a slope, the `InitialLifeTime` value is changed to match the `SlopeDetectionInstant` value.

Latest lifetime variable value supplied to the `update` function, specified as a scalar.

Lifetime variable, specified as a string that contains a valid MATLAB® variable name or `""`.

When you train the model using the `fit` function, if your training data is a:

• `table`, then `LifeTimeVariable` must match one of the variable names in the table

• `timetable`, then `LifeTimeVariable` one of the variable names in the table or the dimension name of the time variable, `data.Properties.DimensionNames{1}`

You can specify `LifeTimeVariable`:

• Using a name-value pair when you create the model

• As an argument when you call the `fit` function

• Using dot notation after model creation

Lifetime variable units, specified as a string.

The units of the lifetime variable do not need to be time-based. The life of the test component can be measured in terms of a usage variable, such as distance traveled (miles) or fuel consumed (gallons).

Degradation variable name, specified as a string that contains a valid MATLAB variable name. Degradation models have only one data variable.

You can specify `DataVariables`:

• Using a name-value pair when you create the model

• As an argument when you call the `fit` function

• Using dot notation after model creation

Flag for using parallel computing when fitting prior values from data, specified as either `true` or `false`.

You can specify `UseParallel`:

• Using a name-value pair when you create the model

• Using a name-value pair with the `restart` function

• Using dot notation after model creation

Additional model information for bookkeeping purposes, specified as any data type or format. The model does not use this information.

You can specify `UserData`:

• Using a name-value pair when you create the model

• Using dot notation after model creation

## Object Functions

 `fit` Estimate parameters of remaining useful life model using historical data `predictRUL` Estimate remaining useful life for a test component `update` Update posterior parameter distribution of degradation remaining useful life model `restart` Reset remaining useful life degradation model

## Examples

collapse all

`load('linTrainVectors.mat')`

The training data is a cell array of column vectors. Each column vector is a degradation feature profile for a component.

Create a linear degradation model with default settings.

`mdl = linearDegradationModel;`

Train the degradation model using the training data.

`fit(mdl,linTrainVectors)`

Create a linear degradation model and configure it with a known prior distribution.

`mdl = linearDegradationModel('Theta',0.25,'ThetaVariance',0.002);`

The specified prior distribution parameters are stored in the `Prior` property of the model.

`mdl.Prior`
```ans = struct with fields: Theta: 0.2500 ThetaVariance: 0.0020 ```

The current posterior distribution of the model is also set to match the specified prior distribution. For example, check the posterior value of the slope variance.

`mdl.ThetaVariance`
```ans = 0.0020 ```

`load('linTrainTables.mat')`

The training data is a cell array of tables. Each table is a degradation feature profile for a component. Each profile consists of life time measurements in the `"Time"` variable and corresponding degradation feature measurements in the `"Condition"` variable.

Create a linear degradation model with default settings.

`mdl = linearDegradationModel;`

Train the degradation model using the training data. Specify the names of the life time and data variables.

`fit(mdl,linTrainTables,"Time","Condition")`

`load('linTrainTables.mat')`

The training data is a cell array of tables. Each table is a degradation feature profile for a component. Each profile consists of life time measurements in the `"Time"` variable and corresponding degradation feature measurements in the `"Condition"` variable.

Create a linear degradation model, specifying the life time variable units.

`mdl = linearDegradationModel('LifeTimeUnit',"hours");`

Train the degradation model using the training data. Specify the names of the life time and data variables.

`fit(mdl,linTrainTables,"Time","Condition")`

Load testing data, which is a run-to-failure degradation profile for a test component. The test data is a table with the same life time and data variables as the training data.

`load('linTestData.mat','linTestData1')`

Based on knowledge of the degradation feature limits, define a threshold condition indicator value that indicates the end-of-life of a component.

`threshold = 60;`

Assume that you measure the component condition indicator after 48 hours. Predict the remaining useful life of the component at this time using the trained linear degradation model. The RUL is the forecasted time at which the degradation feature will pass the specified threshold.

`estRUL = predictRUL(mdl,linTestData1(48,:),threshold)`
```estRUL = duration 112.64 hr ```

The estimated RUL is around 113 hours, which indicates a total predicted life span of around 161 hours.

`load('linTestData.mat','linTestData1')`

For this example, assume that the training data is not historical data, but rather real-time observations of the component condition.

Based on knowledge of the degradation feature limits, define a threshold condition indicator value that indicates the end-of-life of a component.

`threshold = 60;`

Create a linear degradation model arbitrary prior distribution data and a specified noise variance. Also, specify the life time and data variable names for the observation data.

```mdl = linearDegradationModel('Theta',1,'ThetaVariance',1e6,'NoiseVariance',0.003,... 'LifeTimeVariable',"Time",'DataVariables',"Condition",... 'LifeTimeUnit',"hours");```

Observe the component condition for `50` hours, updating the degradation model after each observation.

```for i=1:50 update(mdl,linTestData1(i,:)); end```

After `50` hours, predict the RUL of the component using the current life time value stored in the model.

`estRUL = predictRUL(mdl,threshold)`
```estRUL = duration 50.301 hr ```

The estimated RUL is about 50 hours, which indicates a total predicted life span of about 100 hours.

expand all

## References

[1] Chakraborty, S., N. Gebraeel, M. Lawley, and H. Wan. "Residual-Life Estimation for Components with Non-Symmetric Priors." IIE Transactions. Vol. 41, Number 4, 2009, pp. 372–387.

## Extended Capabilities

### Topics

Introduced in R2018a