Hi Hiroshi,
That's a very good question. As you say, the "vanilla" KSG algorithm is deterministic, since both neighbour counting and the digamma function are deterministic. However, the plain KSG algorithm is fairly unstable. Under certain conditions you can get in serious
numerical trouble --- particularly if you have repeated data points.
For this reason, since version 1.3 JIDT by default adds some random jitter to the data points to avoid these numerical issues. By default JIDT normalises the data to have zero mean and unit variance and then adds white Gaussian noise with standard deviation
10^-8, which is the value recommended by KSG in their original paper. At the expense of a small variability in the results, this makes the algorithm much more numerically robust.
You can explicitly turn off or adjust the noise via setProperty() using the property "NOISE_LEVEL_TO_ADD", which represents the standard deviation of the white noise added to the normalised data. If you set that to 0 you should always get the same result on
the same dataset.
And as you say, all of this is ok for your MI calculation, but there's an issue with your TE values. Since you're calculating TE from your synthetic data, can you calculate the true TE? It might be the case that the true TE is too small to be accurately estimated
from a time series of that size. Typically, a noise of 10^-8 really shouldn't affect much the estimation (unless you have repeated values).
I've put up a small ipython notebook with the example of the MI calculation between two weakly correlated Gaussians, please find it attached. I haven't got clear-cut results, but removing the noise from KSG doesn't seem to bring it significantly closer to the
true values, probably because at that level of interaction between the variables the noise involved in generating the data is larger than the noise introduced by the KSG.
Cheers,
Pedro