PostgreSQL自帶了計算numeric和numeric字段的線性相關性的聚合函數corr(numeric, numeric)。
例如:
如果要計算多元的線性相關性,可以使用madlib提供的linregr_train函數來統計。
<a href="http://doc.madlib.net/latest/group__grp__linreg.html">http://doc.madlib.net/latest/group__grp__linreg.html</a>
注意不管是一進制回歸還是多元回歸,都需要提供數字類型,如果是文本是不支援的,如下:
那麼怎麼處理呢?
PostgreSQL提供了強大的視窗功能,因為任意字段都可以排序,是以隻要使用視窗輸出字段排序後的rank()就可以代表它的位置進而計算相關性。
例如
這個例子要計算c1,c3的相關性,c1是數字字段,但是c3是text。 corr函數不支援這麼操作。
是以我使用上面這條帶視窗的SQL,把text字段根據rank抽象為數值,正好和其他字段可以比對相關性。
來看計算結果:
建議采用corr(rc1,rc3)的結果,這個比較有代表性。 代表被評測列的線性相關性。
應用場景大家猜一猜。