# How to find a changing relation between continuous variables?

I have a dataset with 8 continuous variables describing the behavior of a machine:
- input a,b,c for both left and right: a_left, b_left, c_left, a_right, b_right, c_right
- output o, non-linearly related to the inputs (and almost certainly also influenced by other factors)
- timestamp t
I have some environmental data (e.g. temperature) as well but these are fairly constant and I suspect not of significant influence.

Theory:
My theory is that due to performance degradation of the machine due to fouling, the value of o will be lower for the same input values.

Occasionally, the machine is cleaned to restore performance again. I do not know when and how well (i.e. to a "perfect" state vs. to some intermediate state between "perfect" and the previous state). The rate of degradation is also not known and most likely not constant.

Furthermore, a change is one of the input variables has a delayed effect on the output due to inertia.

Actions I have tried:
- plotting the data for some different relations between the input and output
- k-means clustering for some different relations between input and output (without timestamps)

Questions:
- Is it at all possible to verify my theory with this data?
- If so, what techniques are most suited to be applied? I'd prefer anything in Matlab.

## 2 Answers

Besides doing initial EDA and plotting dependent vs independent variables, it would seem prudent to try to first identify the "maintenance" points. According to your description of the problem, we can expect to see a decline in output o punctuated by single spike-step indicating improved performance. In other words you should in general see a negative slope interspersed with very high positive slope. We see a similar type of spike behavior in EEG signal, where the "blips" or "spikes" correspond to unwanted artifacts (e.g., eye blinks). These can be identified relatively easily by running a sliding window over the data and looking for big changes in slope. The time segments marked in green below are identified as artifacts by monitoring for changes in slope. You can look into EEGlab and ERPlab -- which are Matlab based -- to find out more about this approach.

For feature engineering, because of the input-to-response lag, you will want to initially include variable lags. For example, for variable a_left and a corresponding change in output o, you would want to add as features a_left_1, a_left_2, ... a_left_n, where each feature refers to the input value at some lagged time prior to the observed change in behavior.

There are tests for the presence of heteroscedasticity in stochastic processes available through Matlab, such as Engle's ARCH test. This is the only test I've used, there may be others available through Matlab as well.