• ベストアンサー

ある1点で傾きが急激に変化する波形に回帰直線を2本引きたい

ある1点で傾きが急激に変化する波形に対して、その点を境に回帰直線を2本引くことを考えています。 人間の目で波形を見ると、「この辺りで傾きが急激に変化しているな」と認識できるのですが、数学的(プログラム的)にはどのように「急激に変化している点」を見つければ良いのでしょうか? 今考えている方法は、以下の泥臭い方法です。なんだか泥臭くて、もっと良い方法を探しています。 (1)波形がa≦x≦ bの範囲の時、注目する点(x = n)をaからbまで動かす。 (2)各時点の回帰直線1(a≦x≦n)の傾きと回帰直線2(n≦x≦ b)の傾きの二つ求める。 (3)「回帰直線1の傾きと回帰直線2の傾きの比」が最も大きい(小さい)点を、傾きが急激に変化している点とする。 (4)(3)で求めた点を境に2本の回帰直線を引く。 どなたか、お知恵を貸してください。

質問者が選んだベストアンサー

  • ベストアンサー
noname#227064
noname#227064
回答No.3

こちらのサイトも参考になると思います。 2本の直線回帰による検定について <Q&A> http://aoki2.si.gunma-u.ac.jp/lecture/mb-arc/arc041/05111.html 二本の直線による折れ線回帰 <Excel VBAの場合> http://aoki2.si.gunma-u.ac.jp/lecture/stats-by-excel/vba/html/oresen-kaiki.html 折れ線回帰 <Rの場合> http://aoki2.si.gunma-u.ac.jp/R/oresen.html

kazuhirox
質問者

お礼

quaestioさん、ご回答ありがとうございます。 具体的な事例を挙げて頂きありがとうございました。 また、折れ線回帰という言葉があるとは知りませんでした。 「折れ線回帰」でも調査してみます。

その他の回答 (6)

  • kgu-2
  • ベストアンサー率49% (787/1592)
回答No.7

No2です。  回帰式は、縦軸と横軸の要素の関係を説明、あるいは予想するためのものです。ですから、データがあれば、それに適した回帰式を求めます。  2本の直線の合成曲線、と解釈する場合は、良いのです。しかし、2本の回帰直線で示した散布図を、1本の曲線で表せたという経験があります。1つの散布図で、2本の直線が引けるのは、相関分析では、特異性に問題がある、すなわち、原因は一つではない場合に生じます。すなわち、なぜ2本になるのか、が説明できなければなりません。その原因を解明したい、とおっしゃるのかもしれません。  しかし、2本の回帰式での説明より、1つの曲線での説明の方が、スッキリします。なにより、なぜ2本になるのか、の説明が不要だからです。しかも、曲線を直線で表せば、元の曲線から離れていく、実際には決定係数が小さくなります。  2本の回帰式は、対数回帰か指数回帰にすれば、1つの曲線で表現できる、だめなら、高次式で回帰曲線で私なら示します。  ご質問とズレマスが、2本の回帰式に分解する目的を再度お考えください。その場合、なぜ2本になるのか、なぜその点から曲がるのか、の説明が不可欠です。  一つの散布図上に2本の回帰直線を描いたものを数図見ています。しかし、なぜ2本の直線になるのか、の説明は読んだことがありません。説明できなければ、回帰式の価値は暴落します。  私の場合、世界各国の脂質摂取量と平均寿命との散布図を描くと、2本の回帰直線のように見えます。この場合、脂質摂取量が少ない国は植物脂質、多くなると動物脂質の摂取量に依存する、等のこじつけは可能です。しかし、証明は困難です。さらに、なぜ植物脂質より動物脂質に依存するようになるのか、という問いには、誰も答えられません。対数回帰をすれば、1本の直線になり、脂質の摂取量の増加にともなって、平均寿命は伸びる、と簡単に説明できます。  曲線を見ないと断言できませんし、繰り返しになりますが、指数回帰、対数回帰、高次回帰、くらいで、決定係数の高い回帰式を1つ得られる、と推察しています。

kazuhirox
質問者

お礼

kgu-2さん、ありがとうございます。 kgu-2さんが仰るとおり、通常のモノの特性であれば1つの曲線の方が全てすっきりすると思います。 ただし、今回の波形は電子デバイスでして、2本の直線が引ける可能性も捨て切れません。 例えばダイオードという電子素子に電圧をかけていくと、ある電圧で突然特性が変わってしまうことがあります。ある電圧で異なる電子素子になると言ってもいいかもしれません。 2直線と1曲線の両面から考えたいと思います。 貴重なご意見、ありがとうございました。

noname#221368
noname#221368
回答No.6

 #1さんが仰るように、問題の規模から考えても、質問者様の方法で妥当な気がします。  手数は余り変わらないですが、こんな方法もあります。自己相関係数を計算して、相関係数を、積分の際のずらし量の関数としてプロットします。相関係数が急激に小さくなる(大きくなる)ずらし量から、波形の傾向の境い目を判断します。  基本的にこの方法で、地震波のP波とS波の境い目を検出しているそうです。

kazuhirox
質問者

お礼

ddtddtddtさん、ありがとうございました。 地震波のP波とS波の境い目の検出に使用されている方法なんですね。 自己相関係数など、すっかり忘れているので勉強しなおしたいと思います。

  • stomachman
  • ベストアンサー率57% (1014/1775)
回答No.5

 非線形最小二乗法の問題なので、まじめにやれば「どこに切れ目があるか」を探していくしかないのですが、データの点数が多いと大変ですね。  もし「データが綺麗に(どっちかの)直線に乗っていて、ノイズが少ない」のであれば、線形最小二乗法で近似することで「キッチリではないがイッパツで」計算する方法もあります。(実際に使ってますが、かなり旨く行きます。)  そのやりかたで2本の直線を決めて交点が定まったら、改めてデータを交点の左右で分けて、それぞれについて線形最小二乗法を使って直線を当て嵌めなおすようにしても良い。  「キッチリではないがイッパツで」というのはどうやるかというと、2本の直線を y = at + b y = ct + d として、データ (t[j], y[j]) (j=1,2,...,N)について、評価関数 ε[j] = (at[j] + b - y[j])(ct[j] + d - y[j]) を考え E = Σ(ε[j])^2 (Σはj=1,2,...,Nの総和) を最小化するようにa,b,c,dを決めるんです。  εは残差ではないけれども、もしどのデータ(t[j], y[j])もどちらかの直線にぴたり乗るのであれば、Eが0になるa,b,c,dが存在する。データが綺麗に直線に乗ってノイズが少ないということが前提なら、その状態から大きくはずれないと考えられる。  ε[j]の右辺を展開して ε[j] = ac(t[j]^2) - (a+c)t[j]y[j] + (ad+bc)t[j] + bd - (b+d)y[j] + (y[j]^2) ここで x[1] = ac x[2] = -(a+c) x[3] = ad+bc x[4] = bd x[5] = -(b+d) とおいて、 ε[j] = x[1](t[j]^2) +x[2]t[j]y[j] + x[3]t[j] + x[4] +x[5]y[j] + (y[j]^2) ここで、x[1]~x[5]が独立な(互いに無関係な)パラメータであるとみなせば、線形最小二乗法が使える。そして、x[1]~x[5]の5個のパラメータが決定できます。  さて、元のモデルにはa,b,c,dの4個しかパラメータがないのに5個のパラメータが出た。これは、上記の処方によって、ひとつ余分な自由度が入っちゃった訳です。でもへいちゃらでして、x[1]~x[5]のうちのどれか4個を使ってa,b,c,dを計算します。で、残り1個(例えばx[5])については、算出したa,b,c,dと辻褄が合う値かどうかを見ます。合ってりゃ成功、かけ離れていたら「データが綺麗に直線に乗ってノイズが少ない」という仮定は成り立っていない、と考えられる訳です。

kazuhirox
質問者

お礼

stomachmanさん、回答ありがとうございます。 >データが綺麗に直線に乗ってノイズが少ないということが前提なら、その状態から大きくはずれないと考えられる。 今あるデータが上記の条件を満たすかどうか検討してみます。 詳細な説明をありがとうございました。 参考にさせて頂きます。

  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.4

残差の2乗和が最小になるような直線を引く、という最小2乗法の原点に立ち戻って考えるなら、 1. 全部でN点あるときに、それを2つのグループに分割する。 2. それぞれのグループについて最小2乗法で回帰直線を求める。 3. それぞれのグループについて回帰の残差の2乗和を求めて、さらに2つのグループについて合計したものが、今考えたグループ分けに対する全体の残差の2乗和 で、1.の分割のしかたは、全部で、2^(N-1)-1 通りあるわけですが、それぞれについて、3.の全体の残差の2乗和を計算して、それが最も小さくなるグループわけが、最も尤もらしいでしょう。 「傾きが急激に変化している点」は、こうして求めた2本の回帰直線の交点とすればよさそうです。

kazuhirox
質問者

お礼

rabbit_catさん、ご回答ありがとうございます。 残差の二乗和を使うことは思いつきませんでした。 参考にさせて頂きます。

  • kgu-2
  • ベストアンサー率49% (787/1592)
回答No.2

>1点で傾きが急激に変化する波形 この波形の関数は、分っていたら、微分すれば、変曲点が分るので、そこで分ける。  関数が分からなければ、xとyの値を読みとって、回帰曲線を求める。3次式以上の高次式し、相関係数が高いものを求める。 >その点を境に回帰直線を2本引くことを考えています。 元の波形は曲線だと想うので、それに回帰直線の当てはめは無謀。回帰曲線?  また、この場合、分けた点は、2つの回帰式の端に当たるので、誤差が大きいので、厳密に求めても意味があるとは想えないのですが。  波のように一定のリズムをもつ波形なら、回帰式を利用して、その曲線を計算したことがあります。ただし、変数が3つなったで、市販のソフトでは無理で、プログラムを組みましたが。  以上は、回帰式の方から考えてみました。何をなさりたいのか把握できていないので、的外れかも。

kazuhirox
質問者

お礼

kgu-2さん、回答ありがとうございます。 波形は、ある電子デバイスの測定データですので関数は分かりません。 >元の波形は曲線だと想うので、それに回帰直線の当てはめは無謀。回帰曲線? > また、この場合、分けた点は、2つの回帰式の端に当たるので、誤差が大きいので、厳密に求めても意味があるとは想えないのですが。 確かに回帰直線の当てはめや誤差のことを考えると無謀かもしれません。。。 ただ、この電子デバイスの特性をみると、ある一点で直線が折れ曲がって見えるのです。その傾向を見たいなぁと考えていました。

noname#101087
noname#101087
回答No.1

基本的には、それで良さそう。 区間を二分していくと、スピードアップできそうですね。 初めが[a, b]なら、[a, (a+b)/2] の傾斜と [(a+b)/2, b] の傾斜を比較。 以後、区間二分の繰り返し。  

kazuhirox
質問者

お礼

178tallさん、回答ありがとうございます。 区間の分割の仕方は改良の余地がありそうですね。 参考にさせて頂きます。

関連するQ&A