我正在使用 MATLAB 分析一些神经科学数据,并制作了峰间间隔分布并对其进行指数拟合。然后,我想使用 MATLAB 进行 Kolmogorov-Smirnov 检验来检查这种拟合情况。

神经元尖峰的数据仅存储在尖峰向量中。这 spikes 向量是一个 111 x 1 向量,其中每个条目都是另一个向量。中的每个条目 spikes 向量代表一次试验。每次试验中的尖峰数量各不相同。例如, spikes{1} 是一个 [1x116 double], ,意味着有 116 个尖峰。下一个有 115 个尖峰,然后是 108 个,依此类推。

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

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

请注意,理论指数(我用它来拟合数据)是 r*exp(-rt) 在哪里 r 是发射率。我得到的射速约为 0.2。现在,当我将所有这些放在一起时,我运行 kstest:

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

然而,结果的 p 值约为 1.4455e-126. 。我尝试过重做 test_cdf 使用 Mathworks 网站文档中的另一种方法:

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

这给出了完全相同的结果!身材真的很糟糕吗?我不知道为什么我得到这么低的 p 值。请帮忙!

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

附:如果有更好的地方可以发布此内容,请告诉我,我会重新发布。

有帮助吗?

解决方案

下面是一个包含虚假数据的示例以及创建 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 的简化假设,具体取决于您尝试建模的现象。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top