【问题标题】:Correlations for multiple indexes多个索引的相关性
【发布时间】:2021-04-06 12:45:16
【问题描述】:

我是 Python 新手,在计算多个参与者的相关系数时遇到了问题。 我有一个像这样的数据框:

|Index|Participant|Condition|ReactionTime1|ReactionTime2|
|:---:|:---------:|:-------:|:-----------:|:-------------:|
|1|1|A|320|542|
|2|1|A|250|623|
|3|1|B|256|547|
|4|1|B|301|645|
|5|2|A|420|521|
|6|2|A|123|456|
|7|2|B|265|362|
|8|2|B|402|631|

我想知道如何计算每个条件下参与者 1 和参与者 2 的反应时间 1 和反应时间 2 之间的相关系数。我的真实数据集比这大得多(每个参与者有数百个反应时间,而且参与者也很多)。有没有一种通用的方法来计算这个并将 coeff 放入这样的新 df 中?

|Index|Participant|Condition|Correlation coeff|
|:---:|:---------:|:-------:|:-----------:|
|1|1|A|?|
|2|1|B|?|
|3|2|A|?|
|4|2|B|?|

谢谢:)

【问题讨论】:

  • 通过许多反应列,您将获得相关系数的对称 NxN 矩阵,而不仅仅是单个值,那么您的输出会是什么样子?

标签: python pandas dataframe correlation


【解决方案1】:

您可以尝试groupby 和apply 与np.corrcoef,然后reset_index:

result = (df.groupby(["Participant", "Condition"])
            .apply(lambda gr: np.corrcoef(gr["ReactionTime1"], gr["ReactionTime2"])[0, 1])
            .reset_index(name="Correlation coeff"))

给了

   Participant Condition  Correlation coeff
0            1         A               -1.0
1            1         B                1.0
2            2         A                1.0
3            2         B                1.0

我们在np.corrcoef 的返回值上使用[0, 1],因为它返回一个对称矩阵,其中对角线元素被归一化为 1,非对角线元素相同并且每个都给出所需的系数(所以不妨用[1, 0])。也就是说,

array([[1.        , 0.25691558],
       [0.25691558, 1.        ]])

是一个示例返回值,我们对非对角项感兴趣。

为什么它在您的情况下返回所有+/- 1:由于每个参与者和条件对每个反应只有 2 个条目,因此它们总是完全相关,并且符号是通过它们的方向确定的,即如果一个从一个坐标到另一个坐标增加,另一个增加或减少。

【讨论】:

  • 它与我的真实数据集完美配合。非常感谢!!
猜你喜欢
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 2012-02-19
  • 2017-11-25
  • 2011-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多