我正在使用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。如果有更好的地方发布,请告诉我,我会重新发布。
答案 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进行简化假设,具体取决于您尝试建模的现象。