Matlab 柯尔莫哥洛夫-斯米尔诺夫检验
-
21-12-2019 - |
题
我正在使用 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 的简化假设,具体取决于您尝试建模的现象。