8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

INTECAdvent Calendar 2020

Day 4

非線形の相関の有無を検定できるHSIC testを試してみる

Last updated at Posted at 2020-06-16

はじめに

過去に書いたこの記事で、いろいろな相関の指標を使ってみた経緯があります。
いろいろデータ分析をしていると、非線形な相関もうまく抽出したいというのがあります。MICもその指針となるのですが、他のアプローチもないものかと調べてみると、カーネル法を応用したHSIC testというものがあるらしいとのことで、これの使い方を調べて試した結果をメモしたくらいの備忘録です。

HSIC testについて

再生核ヒルベルト空間を用いたノンパラメトリックな独立性検定のこと(Hilbert-Schmidt Independence Criterion test)。が、悲しいことに、私は、この辺の数理の理解はできてなく、時間を要しそうなので、参考になりそうなリンクだけ。

ひとまずRで試してみる

普通のHSICも使えるパッケージがありますが、純粋に拡張したdHSIC(d variable HSIC)パッケージ)を使うのが良さそうです。HSICは2変数しか対応していませんでしたが、こちらは多変数が使える模様。

2変数で使う時は、dhsic.test(x, y)$p.valueでP値を求めることができる。帰無仮説は「2変数には(非)線形関係は無い」なので、小さければそれが棄却されるので、非線形関係も含めて相関があると言える。なお、「Toru Imai, 21世紀の手法対決 (MIC vs HSIC)」によると、ノイズに強くても関係ありと判定しやすい模様。この点も試してみる。

線形

基本的には、ここに限らず、全て過去記事+dhsic.testをやってみただけです。
あと、前よりノイズを増大させてみたものもあります。

000011.png

library(dHSIC)
library(minerva)
set.seed(1)
x1 <- rnorm(n=100)
set.seed(2)
e <- rnorm(n=100)
y1 <- 4 * x1 + 5 + 2*e
plot(x1, y1)
cor(x1, y1, method="pearson")
cor(x1, y1, method="spearman")
mine(x1, y1)$MIC
dhsic.test(x1, y1)$p.value
出力結果
[1] 0.8159582 #pearson
[1] 0.8138854 #spearman
[1] 0.5862294 #MIC
[1] 0.000999001 #dHSIC p-value

3次曲線

00000b.png

y2 <- 3*x1^3 + x1^2 + 2*x1+ 5 + 2*e
plot(x1, y2)
cor(x1, y2, method="pearson")
cor(x1, y2, method="spearman")
mine(x1, y2)$MIC
dhsic.test(x1, y2)$p.value
出力結果
[1] 0.8397053 #pearson
[1] 0.8214701 #spearman
[1] 0.6140474 #MIC
[1] 0.000999001 #dHSIC p-value

##2次曲線

000007.png

y3 <- 4*x1^2 + 5 + 3*e
plot(x1, y3)
cor(x1, y3, method="pearson")
cor(x1, y3, method="spearman")
mine(x1, y3)$MIC
dhsic.test(x1, y3)$p.value
出力結果
[1] 0.003019591 #pearson
[1] 0.01570957 #spearman
[1] 0.5286332 #MIC
[1] 0.000999001 #dHSIC p-value

sinカーブ

dhsic.testのP値が高くなり帰無仮説を棄却できなくなりました。
周期性のあるデータの検出は苦手?この辺は要検討。

000007.png

y4 <- 2*sin(5*x1) + e
plot(x1, y4)
cor(x1, y4, method="pearson")
cor(x1, y4, method="spearman")
mine(x1, y4)$MIC
dhsic.test(x1, y4)$p.value
出力結果
[1] -0.0958496 #pearson
[1] -0.08838884 #spearman
[1] 0.638089 #MIC
[1] 0.4785215 #dHSIC p-value

##乱数関係

000005.png

set.seed(2)
y5 <- rnorm(n=100)
plot(x1, y5)
cor(x1, y5, method="pearson")
cor(x1, y5, method="spearman")
mine(x1, y5)$MIC
dhsic.test(x1, y5)$p.value
出力結果
[1] -0.1537208 #pearson
[1] -0.1537954 #spearman
[1] 0.2701778 #MIC
[1] 0.1488511 #dHSIC p-value

#最後に
sinカーブのdhsic.testで帰無仮説が棄却されなかった点は要考察。
数理面が分からないと、指標の限界も分からないので、要勉強ですね。。(当たり前)

あと、HSICは他の応用例も見かけるので、こんな感じで使ってみて終わりでなく、非線形の取り扱いの基礎のカーネル法やHSICはしっかりと理解して、適切な活用をしたいところです。

参考文献

実行環境

  • MacOS 10.15.5(19F101)
  • R version 4.0.0 (2020-04-24) -- "Arbor Day"
  • RStudio Version 1.3.959
  • dHSIC 2.1
  • minerva 1.5.8
8
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?