来自分类和非分类变量的相关矩阵 (Matlab)

Correlation matrix from categorical and non-categorical variables (Matlab)

在 Matlab 中,我有一个 table 形式的数据集:

SCHOOL  SEX  AGE  ADDRESS  STATUS  JOB  GUARDIAN  HEALTH  GRADE
UR      F    12   U        FT      TEA  MOTHER    1       11
GB      M    22   R        FT      SER  FATHER    5       15
GB      M    12   R        FT      OTH  FATHER    3       12
GB      M    11   R        PT      POL  FATHER    2       10

有些变量是二元的,有些是分类的,有些是数字的。是否可以从中提取一个相关矩阵,其中包含变量之间的相关系数?我尝试同时使用计量经济学工具箱中的 corrcoefcorrplot,但我遇到了诸如 'observed data must be convertible to type double'.

之类的错误

有人知道如何做到这一点吗?谢谢。

我认为您需要将所有数据设为数字,即 change/code 非数字列,例如:

SCHOOL  SEX  AGE  ADDRESS  STATUS  JOB  GUARDIAN  HEALTH  GRADE
1       1    12   1        1       1    1         1       11
2       2    22   2        1       2    2         5       15
2       2    12   2        1       3    2         3       12
2       2    11   2        2       4    2         2       10

然后做相关。

如上所述,您首先需要将分类变量和二元变量转换为数值。 因此,如果您的数据在 table (T) 中,请执行以下操作:

    T.SCHOOL = categorical(T.SCHOOL);

可以在 Matlab 帮助 here 中找到一个可行的示例,他们在其中使用患者数据集,这似乎与您的数据相似。

然后您可以将分类列转换为双列:

    T.SCHOOL = double(T.SCHOOL);

但要小心 double,因为它将分类变量转换为任意数字,请参阅 the matlab forum

另请注意,如果您只是将它们转换为数字,那么您就是在为分类变量引入顺序。因此,例如,如果您将 JOB 'TEA'、'SER'、'OTH' 转换为 1、2、3 等,那么您就是在创建变量序数。 'TEA' 则 < 'OTH'。

如果您想避免这种情况,您可以将分类列重新编码为 'binary' 个虚拟变量:

    dummy_schools = dummyvar(T.SCHOOL);

其中 returns 大小为 nrows x unique(T.SCHOOL) 的矩阵。

然后是整个讨论,计算分类变量的相关性是否有用。喜欢 here.

希望对您有所帮助:)