Search code examples
matlabgeospatialnoisetemporalstochastic-process

How can we produce kappa and delta in the following model using Matlab?


I have a following stochastic model describing evolution of a process (Y) in space and time. Ds and Dt are domain in space (2D with x and y axes) and time (1D with t axis). This model is usually known as mixed-effects model or components-of-variation models

enter image description here

I am currently developing Y as follow:

%# Time parameters
T=1:1:20; % input
nT=numel(T);

%# Grid and model parameters
nRow=100;
nCol=100;


[Grid.Nx,Grid.Ny,Grid.Nt] = meshgrid(1:1:nCol,1:1:nRow,T);

xPower=0.1;
tPower=1;
noisePower=1;
detConstant=1;

deterministic_mu = detConstant.*(((Grid.Nt).^tPower)./((Grid.Nx).^xPower));

beta_s = randn(nRow,nCol); % mean-zero random effect representing location specific variability common to all times

gammaTemp = randn(nT,1);

for t = 1:nT
    gamma_t(:,:,t) = repmat(gammaTemp(t),nRow,nCol); % mean-zero random effect representing time specific variability common to all locations
end

var=0.1;% noise has variance = 0.1
for t=1:nT
    kappa_st(:,:,t) = sqrt(var)*randn(nRow,nCol);
end

for t=1:nT
    Y(:,:,t) = deterministic_mu(:,:,t) + beta_s + gamma_t(:,:,t) + kappa_st(:,:,t);
end

My questions are:

  1. How to produce delta in the expression for Y and the difference in kappa and delta?
  2. Help explain, through some illustration using Matlab, if I am correctly producing Y?

Please let me know if you need some more information/explanation. Thanks.


Solution

  • Your implementation samples beta, gamma and kappa as if they are white (e.g. their values at each (x,y,t) are independent). The descriptions of the terms suggest that this is not meant to be the case. It looks like delta is supposed to capture the white noise, while the other terms capture the correlations over their respective domains. e.g. there is a non-zero correlation between gamma(t_1) and gamma(t_1+1).

    If you wish to model gamma as a stationary Gaussian Markov process with variance var_g and correlation cor_g between gamma(t) and gamma(t+1), you can use something like

    gamma_t = nan( nT, 1 );
    gamma_t(1) = sqrt(var_g)*randn();
    K_g = cor_g/var_g;
    K_w = sqrt( (1-K_g^2)*var_g );
    for t = 2:nT,
       gamma_t(t) = K_g*gamma_t(t-1) + K_w*randn();
    end
    gamma_t = reshape( gamma_t, [ 1 1 nT ] );
    

    The formulas I've used for gains K_g and K_w in the above code (and the initialization of gamma_t(1)) produce the desired stationary variance \sigma^2_0 and one-step covariance \sigma^2_1:

    Formulas for gains, and demonstration that variance and covariance are as desired

    Note that the implementation above assumes that later you will sum the terms using bsxfun to do the "repmat" for you:

    Y = bsxfun( @plus, deterministic_mu + kappa_st + delta_st, beta_s );
    Y = bsxfun( @plus, Y, gamma_t );
    

    Note that I haven't tested the above code, so you should confirm with sampling that it does actually produce a zero noise process of the specified variance and covariance between adjacent samples. To sample beta the same procedure can be extended into two dimensions, but the principles are essentially the same. I suspect kappa should be similarly modeled as a Markov Gaussian Process, but in all three dimensions and with a lower variance to represent higher-order effects not captured in mu, beta and gamma.

    Delta is supposed to be zero mean stationary white noise. Assuming it to be Gaussian with variance noisePower one would sample it using

    delta_st = sqrt(noisePower)*randn( [ nRows nCols nT ] );