从单神经元的相关性到更复杂的群体编码
相关
相关不意味着因果,但是可以缩小范围后续做光遗传实验
Identify cell type
一、GLM
- 计算神经元对多个regressor的响应强度beta
- 对单条鱼、单个regressor,提取beta大于阈值的神经元
- 用collocalization验证分类结果是否有跨被试的一致性,找出空间上特定的神经环路
二、shuffle
GLM
General Linear Model
- 定义“钙指示剂的脉冲响应” (IRF)
• f, p0, irf, h: 这几行代码定义了一个数学函数,用于模拟 GCaMP6s 指示剂的典型响应曲线。 • h = irf(xx): h 现在是一个短向量,代表当神经元瞬时激活一次后,荧光信号在接下来几秒内的“先上升再缓慢下降”的标准形状。这在功能磁共振(fMRI)中被称为血氧响应函数 (HRF),在这里它就是钙响应函数 (CRF/IRF)。
- 卷积:从“事件”到“预测的信号”
• X = np.array([np.convolve(x, h, ‘full’)[:len(x)] for x in X.values()]).T • 这是最关键的一步。np.convolve(x, h)(卷积)操作,就是将你的“事件”时间序列(x,比如一个0和1组成的序列,1代表事件发生)与上面计算出的“标准响应”(h)进行计算。 • 结果:X(注意,变量名被覆盖了)不再是原始的0/1事件,而是变成了“预测的荧光信号”。它模拟了如果只有X中的事件发生,Y中的荧光信号随时间变化的完整曲线。
- 构建“基线” (Baseline)
- poly = 0
- B = np.array([…]): 这部分代码用于去除数据中的缓慢漂移。 • 在实验中,荧光信号可能会因为光漂白(photobleaching)或设备不稳定而缓慢下降或上升。 • B(Baseline)就是用来捕捉这种与实验事件无关的缓慢变化。 • 因为 poly = 0,这里 B 实际上只包含一个常数项(截距,intercept),用于模拟信号的平均基线。如果 poly 设为1或2,它还会加入线性和二次项来拟合更复杂的漂移。
- 组合:完整的“设计矩阵”
• G = np.c_[X, B]: 这一步将“预测的信号”(X)和“基线漂移”(B)并排放在一个矩阵G中。 • G 现在是你的完整模型(“Design Matrix”)。
- 求解GLM
• beta = np.linalg.pinv(G) @ Y • 这是GLM的核心求解步骤。它在寻找一组最佳权重(beta),使得 G 乘以 beta 的结果,能与“真实观测数据”(Y)尽可能地接近。 • np.linalg.pinv(G) 计算 G 的伪逆,这是在数学上求解线性方程组 $Y = G\beta$ 的标准方法(最小二乘法)。