アプリ版:「スタンプのみでお礼する」機能のリリースについて

y軸度数とx軸移動量の表からチャートの類似性について統計的に解析したいです。
調べたところ、クラスター分析にコリレーションによる類似性というものがありこれが使えないか
と考えています。
しかし、あまりコリレーションが私のデータ(度数、移動量)について使えるか分かりません。
グラフの形状の類似性をクラスター分析で解析することが有用かを教えていただきたいです。

質問者からの補足コメント

  • 詳細な回答ありがとうございます。
    グラフの形状だけで分類できる方法を考えていました。
    https://spotfiremaniacs.net/2015/03/04/%E3%83%87 …
    このサイトにグラフの形状でのクラスター分析があったので可能なのかと思っていましたがやはり、一般的なクラスター分析ではないのでしょうか。
    コリレーションについてですが、取得したデータはX軸(横軸)のそれぞれに対してyの値が決まっていない、取得したグラフのxの取る値が一定でないデータなので2の方法も難しそうです。
    主観的になりそうですが、1方法ついても検討してみようと思います。

    No.2の回答に寄せられた補足コメントです。 補足日時:2021/10/24 17:09
  • ご回答ありがとうございます。
    (x,y)が
    { (1,4), (3,8), (6,9), (7,8), (9,7) }で一つのチャート、(chart1)
    { (2,8), (6,16), (12,18), (14,16), (18,14) }で一つのチャート、(chart2)
    {(5,0), (7,4), (10,5), (11,4), (13,3) }で一つのチャート、(chart3)
    というようなことでしょうか。
    →そのようなデータです。一部画像にのせました。
    (1) グラフはxが小さい順につないだ折れ線グラフを描いてその形についてみています。
      yは度数になります。
    (2)ある基準のチャートを用いて、大きさや位置は無視してただ形が類似しているかを判断したいで   
      す。

    No.3の回答に寄せられた補足コメントです。 補足日時:2021/10/25 20:57
  • (2)両方なら「折れ線fと折れ線gが似ているかどうかを判断するに際して、うまい定数A,Bを使って
     h(x) = f(x-A)+Bという変換をした時に hとgが良く重なれば、似ていると判断する」ということです。→xとyの両方について考えています。拡大や縮小は今のところ考慮してなく、xとyの平行移動のみを想定しています。

    使用するデータは、基準データがいくつかあるなかで取得データがどの基準のデータに類似しているかをヒストグラムの形状で分類したいと考えています。

    No.4の回答に寄せられた補足コメントです。 補足日時:2021/10/26 20:50
  • 先ほどの補足に追記です。
    分かりにくいですが、がぞうのようなヒストグラムを用います。
    このヒストグラムのx、yの平行移動での形状の類似度による分類を考えています。

    「グラフのチャートのクラスター分析について」の補足画像4
      補足日時:2021/10/26 22:01
  • 統計的なところは素人で申し訳ないのですが、y方向の拡大縮小とx方向の平行移動の方が評価として一般的ならそちらを使用したいです。前回と言っていることが変わって大変申し訳ないですが、y軸の拡大縮小で扱いたいです。
    (1)データの始まり部分を画像にのせました。NがX軸でmagnitudeがy軸です。今回のデータのグラフは「そこまでで終わり」ということになっています。
    何度もお手数おかけしますがよろしくお願いします。

    「グラフのチャートのクラスター分析について」の補足画像5
    No.5の回答に寄せられた補足コメントです。 補足日時:2021/10/29 20:21
  • ご回答ありがとうございます。追加でお尋ねさせてください。
    F(n) = (nΔx, Y[n])
    ↑式のnとは具体的に何を指しているのでしょうか。自然数で良いのでしょうか。
    x[1]とありますが、これは何を指しているのでしょうか。
    Δxは、データの全値の刻み幅より小さな値を自分で決定すればよいのでしょうか。
    初歩的なことで大変申し訳ないのですが、確認させてください。

    No.6の回答に寄せられた補足コメントです。 補足日時:2021/11/03 23:32

A 回答 (8件)

Mk.20ロックアイはクラスター爆弾だよ?

    • good
    • 0

> グラフの形状の類似性をクラスター分析で解析することが有用か



ダメでしょ。クラスター分析が何をやるものなのか、ご存知ないのだろうと思います。

[1]「類似性」とおっしゃるのは、(a)自分の目で見て似てるなーと思う度合い、のことでしょうか、それとも、(b)「類似性」を測定した結果を何かに利用するということでしょうか。いずれにしても、「類似性」を測る尺度を自分で構成することが課題です。一般に、何らかの特徴に着目して「似ている」と言いたいのであって、これはすなわち、着目しない特徴に関しては無視する、ということでもあります。前者(a)ならば、いろんなチャートを目で比較して「相互に似てる度合い」を感覚的に調べた表を作った上で、この表を再現する(目で見た感じと計算結果が良く合っている)ような尺度を工夫する必要があります。また、後者(b)ならば、応用目的に応じて尺度を設計することになります。

[2] 尺度としてコリレーション(相関係数, correlation coefficient)を使うのも一つの選択肢ですね。xの値(例えばx=1,2,....,N)のそれぞれに対してyの値が決まっているデータが二組あるとして、それらをy=f(x), y=g(x)と書くことにすると、まずそれぞれの平均値F, Gを計算します。(以下、Σはx=1,2,...,Nに渡る総和のこと)
  F = (1/N)Σ f(x), G = (1/N)Σ g(x)
そして、
  C(f,g) = Σ((f(x)-F)(g(x)-G))
  C(f,f) = Σ((f(x)-F)^2)
  C(g,g) = Σ((g(x)-G)^2)
とすると相関係数
  ρ(f,g) = C(f,g)/√(C(f,f) C(g,g))
が計算できる。これは「チャートf,gを、y軸方向にズラしたり引き伸ばしたりすることを許して重ね合わせた時に、うまく重なる度合い」を表しています。
 もちろん、上記の(a)の場合、この値が大きいほど「似ている」と思うかどうかは自分で考えるしかありませんし、(b)の場合にはこの尺度が応用の目的に適しているかどうかを検討しなくちゃいけません。

[3] 空間(なり平面なり)を用意して、点(各点がチャートに対応)を配置し、よく似ているもの同士を互いに近くになるように(ということは、あまり似ていないもの同士を互いに遠くになるように)空間の中に配置する、ということもできます。概要だけ言えば、「近づくほど大きくなる反発力を互いに及ぼしあう」ということと「似ている度合いに応じた引力を互いに及ぼしあう」ということの両方のせめぎあいによって落ち着く配置を計算で探索するんです。

[4] クラスター分析では、「あらかじめ空間中に点(各点がチャートに対応)がプロットされているものとして、さて、それらをいくつかの塊(クラスター)に分割する」ということが課題です。
 なので、[3]をやった結果に対して、たくさんのチャートをいくつかの(互いに似ているもの同士を集めた)クラスターに分割する、ということがやりたいのでしたら、クラスター分析が使えます。が、そんなこと、ご質問には書いてないな。
この回答への補足あり
    • good
    • 1
この回答へのお礼

回答ありがとうございました。
教えていただいたことを参考に取り組んでみます。
本当にありがとうございました。

お礼日時:2021/11/11 16:25

No.2へのコメントについて。



> グラフの形状だけで分類できる方法

No.2の[2]はまさにその話をしていますし、お示しのURLでやっているのは全く同じことです。URLでは、さらにその特徴を主観的にグループ分けして遊んでいるようです。

> 取得したデータはX軸(横軸)のそれぞれに対してyの値が決まっていない、取得したグラフのxの取る値が一定でないデータ

 そんな説明じゃ伝わらんなー。「チャート」なるものの具体例を貼って頂きたいもんです。
 もしかして、xのキザミが一定値ずつには決まっていない、ということ?例えば (x,y)が
{ (1,4), (3,8), (6,9), (7,8), (9,7) }で一つのチャート、(chart1)
{ (2,8), (6,16), (12,18), (14,16), (18,14) }で一つのチャート、(chart2)
{(5,0), (7,4), (10,5), (11,4), (13,3) }で一つのチャート、(chart3)
というようなことでしょうか。仮にそうだとしても、
(1) 一体何を「グラフの形状」と呼んでいるのかをはっきりさせなくちゃいけません。chart1を散布図にして、点がバラバラと散っている、その散り方の話なのか、あるいはこの散布図をxが小さい順につないだ折れ線グラフを描いて、その形の話をすることもできるし、また、yが小さい順につないだ折れ線グラフの形の話かもしれない。
(2) 「似ている」程度をどう評価するんですか。例えば上記のchart1とchart2は散布図にすると相似形をしていますが、大きさが倍違う。これを「似ている」というのかどうか。chart1とchart3は全く同じ形ですが、場所が平行移動でずれている。これを「似ている」というのかどうか。

そのあたりを決めないと、どんな尺度が適切なのかも決まらんのですよ。
この回答への補足あり
    • good
    • 0

No.3へのコメントについてです。



> (1) グラフはxが小さい順につないだ折れ線グラフを描いてその形について

 ならば、f(x), g(x)を「折れ線の部分にも(無限個の)点が稠密に並んでいるxの関数」だと思っている、ということでしょう。でしたら、折れ線(正式には「区分的一次式」あるいは「一次スプライン曲線」)で表される関数として扱う必要があります。

> (2) 大きさや位置は無視してただ形が類似しているか

 「位置を無視」するというだけでははっきりしない。x軸方向(ヨコ方向)に平行移動することだけを無視するのか、y軸方向(縦方向)に平行移動することだけを無視するのか、それとも両方を無視するのか。
 x軸方向に平行移動することだけを無視するのなら、「折れ線fと折れ線gが似ているかどうかを判断するに際して、うまい定数Aを使って
  h(x) = f(x-A)
という変換をした時に hとgが良く重なれば、似ていると判断する」ということですし、y軸方向に平行移動することだけを無視するのなら、「折れ線fと折れ線gが似ているかどうかを判断するに際して、うまい定数Bを使って
  h(x) = f(x)+B
という変換をした時に hとgが良く重なれば、似ていると判断する」ということですし、両方なら「折れ線fと折れ線gが似ているかどうかを判断するに際して、うまい定数A,Bを使って
  h(x) = f(x-A)+B
という変換をした時に hとgが良く重なれば、似ていると判断する」ということです。どれでしょうか?

 また、「 大きさ」を無視するというだけでははっきりしない。具体的には、y軸方向(縦方向)だけに引き伸ばすと形が変わって見えるわけですが、その変化は無視するのかしないのか。無視するのなら、「うまい定数C,Dを使って
  k(x) = D(h(Cx))
という変換をした時に kとgが良く重なれば、似ていると判断する」ということだし、無視しないのなら、「グラフの図形を相似形に拡大・縮小する」という制約がついているわけですから、「うまい定数Cを使って
  k(x) = (1/C) (h(Cx))
という変換をした時に kとgが良く重なれば、似ていると判断する」ということ。どっちですか?

 これらの点をはっきりしなくちゃどうにもならない。さらに、それはそれとして、何を以って「良く重なる」と判断するか、つまり「重なり」の度合いをどう測るのが、最終的な目的に合っているのか。そういう尺度を決めなくちゃなりません。その尺度によって、どんな方法で計算するのが便利か、ということも大きく違ってきて、組み合わせによってはかなり複雑なこと(反復計算で近似値をちょっとずつ改良して行くプログラムが必要)になります。
 ですから、「類似性の測定結果を利用する上で、「似ている」とか「重なり」という概念にどういう意味を込めるのが適切か(どんなズレは無視して、どんなズレは気にするのか)」を、真剣に検討しとかなくちゃいけないんです。逆に言えば、「大体似てる感じがする」とかナンとかくだらん感想を言うためだけにやるようなことじゃない。もし、どういう素性のデータであって、類似性の測定結果をどう利用する積りかを書いて頂けるなら、もうちょっとマトを絞った具体的な助言が可能かもしれません。
この回答への補足あり
    • good
    • 0

No.4へのコメントについて。



> x、yの平行移動での形状の類似度

 「x、yの平行移動での形状の類似度」というのは、ちょっと珍しい話です。というのは、お示しのようなデータは、(もちろん、どういう意味を持ち、どう使うかによりますけれど)大抵、y方向の拡大縮小とx方向の平行移動で重なるかどうかだけが問題になり、y方向の平行移動(=定数の加算)やx方向の拡大縮小は行わない、ということが多いから。

 なので確認です。
(1) チャートの左右、データがない部分は、「グラフはそこまでで終わり」という意味なのか、「左右の部分はy=0という値で埋まっていると考えるべき」ということなのか。(もし後者なら、x方向、y方向の平行移動をやると、それらの値(y=0)も平行移動するということです。)

(2) 「グラフはそこまでで終わり」ということであれば、下の図で黒のチャートに似ているのは赤と青のチャートであって、緑は似ていない、ということでよろしいでしょうかね。

 赤と青のチャートでお尋ねしているポイントは、「平行移動で重ねた時に左右にはみ出す部分を完全に無視して、重なり合っている部分だけについて比較すればいいのかどうか」です。(青のチャートは複数の山を持っているので、x方向にどれだけ平行移動すれば一番よく重なるかは簡単には決まりません。)
 また、赤のチャートでお尋ねしているもう一つのポイントは、y方向の移動をやるんですよね、という確認です。
 緑のチャートはy方向の拡大縮小でピッタリ重なってもダメ、ということの確認です。
「グラフのチャートのクラスター分析について」の回答画像5
この回答への補足あり
    • good
    • 0

No.5へのコメントまで考慮して:



[1] サンプルから得たヒストグラムであれば、もしサンプル数を2倍に増やしたら、グラフはy方向におおむね2倍になるだろう、ということから、y方向に定数倍の自由度を持たせるのは合理的であろうかと思います。(一方、「y方向に平行移動する(yに定数を足す)」ということをやるのは、一体どんな場合にどういう意味があるのか、ちょっと想像がつかない。)

[2] x方向については、たとえばx軸の基準点がバラバラである、というような事情があれば、平行移動の自由度だけを持たせるのは妥当でしょう。ただしこのとき、カーブの端っこが問題になります。単にグラフを見ただけでは「プロットしてある分だけで情報は終わりだ(その範囲外ではyについては全く未知)」とも、あるいは「プロットしてある範囲外では全てy=0である」とも解釈でき、それによって扱いは全く異なります。ですが、これがヒストグラムということなら「プロットしてある範囲外では全てy=0である」と考えるのが妥当そうに思いますが、どうでしょう。(そうでなければ、ヒストグラムになっていないわけですから。)
 さらに、お示し頂いた例ではxの値がかなり稠密に並んでいる。そして、隣り合うxについて比べるとy方向の変化はそれぞれ小さい。ですから、ほとんど連続関数に近いと言えそうです。なので、隣接するプロット点同士の中間点でのyの値を、補間によって推定しても良さそうです。これは「形同士を比べる」と仰る意図にも整合するだろうと思います。なお、各チャートについて、データはxが小さい順にsortしてあるものとします。

[3] 以上の2点を前提としますと:
[i] 所詮は「曲線の形」という、線分で補間して描いた図形の比較の話ですから、x方向の移動をむやみに細かく調節してもしょうがない。そこで最もシンプルにx軸のきざみ幅Δxを決めてしまうのがいいでしょう。(ただし、Δxは実際のデータの隣り合うxの差よりは小さくしておきます。)そして、
  F(n) = (nΔx, Y[n])
を以下のようにして計算します。
(1)
  n0 < x[1]/Δx
となる最大の整数n0を見つけ、
  x[N]/Δx < n1
となる最小の整数n1を見つけて
  F(n0) = 0, F(n1)=0
とします。
(2) n0+1〜n1-1の範囲の各nについて
  (2-1) x[k]≦ nΔx <x[k+1] となるkを見つける。
    (xが小さい順にsortしてあるので、x[k]<x[k+1]です。)
  (2-2) w[n] = (x[k+1]-(nΔx)) / (x[k+1]-x[k])
  (2-3) Y[n] = (y[k+1] w[n] + y[k] (1-w[n])) (一次補間)
この変換によって、F(n)はチャートを一定刻みΔxで切り分け直したもの(の近似)になっています。
 全てのチャートについて以上の変換をやっておきます。(n≦n0かn1≦nであるnについては全てF(n)=0ということです。)

[ii] 二つの(変換済みの)チャートFとGの「類似度」をどう測るかは目的によって色々ですが、たとえば相互相関
  C = (ΣF(n)G(n))/ √(Σ(F(n)^2))/√(Σ(F(n)^2))
で測ることにしたとします。すると、まず
  A(F) =√ Σ(F(n)^2) (ΣはF(n)≠0であるnについての総和) 
をそれぞれのチャートについて計算しておく。

[iii] そして、F(n)とG(n)が一番よく合うようにx方向にずらすために、F(n)とG(n-m)について
  X(F,G,m) = ΣF(n)G(n-m) (ΣはF(n)≠0かつG(n-m)≠0であるnについての総和)
が最大になるようなmを探す。(mの範囲をどうすればいいかは、説明はめんどくさいが、簡単にわかるでしょう。)
 で、X(F,G,m)の最大値をM(F,G)としますと
  M(F,G)/(A(F)A(G))
が、fとgの類似度、というわけです。

 たとえば
  G(n-m) = aF(n) (a,mは定数)
の場合には
  M(F,G)= X(F,G,m) = a A(F) ^2
  A(G) = a A(F)
なので、
  M(F,G)/(A(F)A(G)) = 1
となる。これが類似度最大、ということです。
この回答への補足あり
    • good
    • 0

No.6へのコメントについて。



> nとは具体的に何を指しているのでしょうか。自然数で良いのでしょうか。

nは整数で x[n] = nΔx ですね。だから
F(n) = (nΔx, Y[n]) = (x[n], Y[n])

> Δxは

お好みで。カーブの細部にどのぐらいこだわるかです。Δxを大きくすれば、カーブを大まかに近似することになり、計算量は小さい。Δxを小さくすれば、細かい凸凹まで気にするということであり、計算量は大きい。

> 初歩的な

「初歩的」とか気にしすぎです。No.6の通りにやれなんて言ってません。要点は
(1) どのカーブも、xがΔxの整数倍の刻みになっているカーブで近似しておく。
(2) x方向にΔxずつずらしながら、一番よく合うところを探せばよろしい。
(3) 「よく合う」の基準は(勝手にすればいいけど)例えば相互相関はいかが?
(というのが、ご質問の目的にかなうかどうか、明確な返答がないからよくわからん。)
というだけのこと。詳細は自分でやりやすいように工夫なさればいいんです。
    • good
    • 0

No.7への補足として、計算の例をお目にかけます。


 図のそれぞれのグラフにある二つのカーブは、すでにサンプリングが等間隔(Δx)になるように補間してあります。
 もちろん、こんな風にグラフにしてみる必要は全くありません。単に説明のためにグラフにしただけです。赤のカーブはどのグラフも全く同じです。一方、黒のカーブも形は全部同じですが、ただしx方向にちょっとずつ「ずれ」ていっていることを観察してください。
 ぞれぞれの「ずれ」における相互相関の計算結果が各グラフの右上に書いてあり、真ん中のグラフで0.994になっていて、これが最大値です。そして実際に興味があるのは、この最大値0.994だけです。もし両者が完璧に一致したら相互相関の値が1になるんですが、0.994は1に近いので、つまり「両者がとても良く似ている」ということを示している。なお、二つのカーブをそれぞれy方向(縦)に何倍しても(例えば黒い方を1.2倍、赤い方を03倍とか)、相互相関の値は同じです。
「グラフのチャートのクラスター分析について」の回答画像8
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!