python - 多个指标的相关性

标签 python pandas dataframe correlation

我是 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 的 react 时间 1 和 react 时间 2 之间的相关系数。我的真实数据集比这大得多(每个参与者有数百个 react 时间,而且参与者也很多)。有没有一种通用的方法来计算这个并将 coeff 放在像这样的新 df 中?

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

谢谢:)

最佳答案

您可以尝试使用 groupby 并使用 np.corrcoef apply,然后使用 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:由于每个参与者和条件对的每个 react 只有 2 个条目,它们总是完全相关并且符号是通过它们的方向确定的,即如果一个坐标从一个坐标增加到另一个坐标,另一个坐标是增加还是减少。

关于python - 多个指标的相关性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66968923/

相关文章:

python - 总结存储在数据框中的多个列表

r - 基于每列中的观察数的子集数据框

python - 扩展列表中的元素

python - 过滤字符串列表,忽略其他项的子字符串

python - 使用 applymap 替换 Pandas Dataframe 中的空值

pandas - Python DF2Gspread 库无法将 DF 保存到 Google 工作表

python - 如何在pandas中使用country_converter将国家/地区代码转换为名称

python - 如何从 CSV 文件中删除一些带有注释的行以将数据加载到 DataFrame?

python - 如何将 numpy 数组分成 pandas 中的单独列

python - 如何生成包含 python unittest 覆盖率数据的 Clover 兼容(Bamboo)xml?