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

时间:2018-11-06 23:13:33

标签: matlab variables matrix correlation

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

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,但是遇到诸如“观察到的数据必须可以转换为double类型”之类的错误。

任何人都会对如何做到这一点有所了解?谢谢。

2 个答案:

答案 0 :(得分:0)

我认为您需要使所有数据成为数字,例如,将非数字列更改/编码为:

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

,然后进行相关。

答案 1 :(得分:0)

如上所述,您首先需要将分类变量和二进制变量转换为数值。 因此,如果您的数据在表(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'。

如果要避免这种情况,可以将分类列重新编码为“二进制”伪变量:

    dummy_schools = dummyvar(T.SCHOOL);

哪个返回大小为nrows x unique(T.SCHOOL)的矩阵。

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

我希望这会有所帮助:)