Matlab Kolmogorov-Smirnov测试

时间:2014-07-29 20:49:42

标签: matlab exponential cdf goodness-of-fit

我正在使用MATLAB来分析一些神经科学数据,并且我做了一个interpike间隔分布并且它符合指数。然后,我想用MATLAB的Kolmogorov-Smirnov测试检查这个拟合。

神经元尖峰的数据只存储在尖峰矢量中。 spikes向量是111乘1向量,其中每个条目是另一个向量。 spikes向量中的每个条目代表一个试验。每个试验中的峰值数量各不相同。例如,spikes{1}[1x116 double],意味着有116个峰值。接下来有115个尖峰,然后108个等等。

现在,我知道MATLAB中的kstest需要几个参数。您在第一个中输入数据,因此我获取了所有的interspike间隔并创建了一个行向量alldiffs,它存储了所有的interspike间隔。我想将我的CDF设置为指数函数拟合:

test_cdf = [transpose(alldiffs), transpose(1-exp(-alldiffs*firingrate))];

请注意,理论指数(我适合数据)是r*exp(-rt),其中r是点火率。我的射击率约为0.2。现在,当我把它们放在一起时,我会运行最新的:

[h,p] = kstest(alldiffs, 'CDF', test_cdf)

但是,结果是1.4455e-126的p值。我尝试使用Mathworks网站文档中的另一种方法重做test_cdf

test_cdf = [transpose(alldiffs), cdf('exp', transpose(alldiffs), 1/firingrate)];

这给出了完全相同的结果!合适的可怕吗?我不知道为什么我会得到如此低的p值。请帮忙!

我会发布一个合适的图片,但我没有足够的声誉。

P.S。如果有更好的地方发布,请告诉我,我会重新发布。

1 个答案:

答案 0 :(得分:2)

以下是假数据的示例,另一种创建CDF的方法:

>> data = exprnd(.2, 100);
>> test_cdf = makedist('exp', 'mu', .2);
>> [h, p] = kstest(data, 'CDF', test_cdf)

h =

     0


p =

    0.3418

但是,为什么要进行KS测试?

  

所有型号都有错,有些型号很有用。

没有神经元完全泊松过程,并且有足够的数据,您将始终具有显着的非指数ISI,如通过KS测试所测量的。这并不意味着您无法对指数ISI进行简化假设,具体取决于您尝试建模的现象。