ばらした記事のまま放置しているのもアレなので、またまたジャンクっぽいプログラムです。
で、何をするプログラムかというと、(x, y)が同じ数だけ揃っているデータでれば、散布図が描けるわけですが、この散布図をジーっと眺めてても全然おもしろくもない。というわけで、いくつかの回帰式を準備して、これに一番合いそうな式を「Graph」で使える「Y1」に送り込んでやろうというプログラムです。
プログラムでできるのはそこまでで、そのあとは「MENU」の「5」にある「Graph」にて操作すれば、いろいろと解析が可能になります。
今回は「List 7」と「List 8」からデータを読み込む仕様にしています。途中計算で「List 9」と「List 10」を使用します。
回帰式には、a, b, c,など、式によっては最大「d」まで定数が付きますが、これはそれぞれ、「A」~「D」に格納されますので、「MENU」間を跨いで共同利用が可能です。
なので、今回も「MENU」の「B:Program」から入るいわゆる「CASIO Basic」限定です。「C.Basic」や「Python」だと「List」のデータが読みこめません。
まずは今回使ったデータですが、CASIOの解説動画でも出てくる、時速とブレーキをかけてからの制動距離のデータを使います。式の都合上、(0, 0)は省きます。
とりあえず、データです。単位などはCASIO動画の方をご参照ください。というのもアレなので、Xは時速(km/h)、Yは制動距離(m)です。
| 16.1 |
1.5 |
| 32.2 |
6.1 |
| 48.3 |
13.7 |
| 64.4 |
24.4 |
| 96.5 |
54.9 |
| 112.6 |
74.7 |
| 128.7 |
97.5 |
SampleBreak.csv - Google ドライブ
この7個のデータをいろんな回帰式で近似してみたいと思います。
プログラムをそのまま使うのであれば、これの1列目を「List 7」、2列目を「List 8」に入れておきます。
もちろん、7行なので、手で打ち込んでも大したことありません。
打ち込んでる途中で、グラフの記号に個別の色をつけることができます。途中でなくても後からでもOKです。
とりあえず、X列指定にしてあるので、X側のデータだけ指定すればOKです。
色をつけたい数字の位置で、「SHIFT」を押しますと、

「Statistics」でデータの入力中「SHIFT」キーを押したところ
Functionキーに「V-WIN」が現れますが、これを無視して、そのまま数字の「5」を押します。すると、

データ打ち込み中の「色指定」設定画面
色選択画面がでるので、いまカーソルのあるセルの数値に色を付けることができます。この色がグラフを描いた時に、同じものだけ、同じ色で表示してくれます。

Xデータに色指定
上の図では、Xの4番目に青、5番目が赤、6番目を緑にしています。
もちろん、色が必要なければ何もしなくて構いません。
で、データの入力が終わったら、一旦「MENU」に戻って、「Program」です。
で、今回は回帰の「Regression」にしようと思ったのですが、文字数が多すぎで、「REGRESSI」になってしまいました。
・転送用散布図ー回帰分析プログラム
REGRESSI.g3m - Google ドライブ
・テキストファイル
REGRESSI.txt - Google ドライブ
これを通常の「Program」用のプログラムフォルダに転送しておきます。
で、「MENU」の「Program」から「REGRESSI」を実行します。
で、実行すると、

起動画面
いつものように、読み込むList 番号とデータの行数の確認画面を表示するので、
ここで、「EXE」を押します。ここは入力方式にしても構いません。
すると、

グラフ表示画面
4番目が青、5番目が赤、6番目が緑です。
散布図グラフの表示画面です。CASIOでは「Scatter」という種類の「線で結ばないグラフ」です。
ここでは、他の拙作グラフプログラムと同じように、十字キーで上下左右移動、「2-5-8」で全体縮小拡大、「1-4-7」でX軸の縮小拡大、「3-6-9」でY軸の縮小拡大が可能です。
「4,5,6」ではいずれも初期値に戻します。
で、ここまでが今までどおりの散布図ですが、しばらくこの状態を保っていたのですが、飽きてきたので、近似曲線を描けないかな~と思い立ち、「F1」ファンクションキーに「回帰分析」の計算ルーチンを入れてみました。
グラフの表示中に「F1」を押すと、

回帰式の選択メニュー画面

回帰式の選択メニュー続き
全部で8個の回帰式が入っていますが、何度でも繰り返し、選択しなおしが可能です。
・1:Y=aX+b
・2:Y=aX^2+bX+c
・3:Y=aX^3+bX^2+cX+d
・4:Y=a+b/x
・5:Y=a+b・ln (X)
・6:Y=a・e^(b・X)
・7:Y=a・b^X
・8:Y=a・X^b
4番目のやつは本機には入っていませんが、「FX-JP700」には入っているので入れました。8番目のやつで代用できそうですが。それ以外は全部関数があるので、引っ張ってくるだけです。4番目は関数が準備されていないので、ここだけプログラムが異常に長くなっています。
ちなみに、LogisticやSinが必要な場合には、どれかをつぶして書き換えると簡単かと思います。使える変数名の制限から、Lblの数の都合上、これ以上増やすのは難しいと思われます。「Lbl」の引数は一桁数字以外は何を入れても「文法エラー」です。何それ、少なすぎ。解決方法があれば増やしてもらって構いません。
で、式の選択ですが、無鉄砲よりも、理論的にそれっぽいものを選びます。
ここで使ったデータは確か、出してる速度と制動距離の関係だったと思うので、恐らく2次式が一番近そうな感じです。動画では最初は1次式を入れていましたが、どう見たって直線に見えんでしょ、これ。で、2次式近似の「2」を選択してみました。

2次近似の結果
文字列は、上から
「Y=aX^2+bX+c」という式への近似ですよ、という宣言、
2行目が相関係数→変数「R」に代入、
3行目が平方誤差→変数「E」に代入、
4行目が上の式の「a」の値→変数「A」に代入、
5行目が「b」の値→変数「B」に代入、
6行目が「c」の値→変数「C」に代入、
となっていて、以下「d」がある3次式のような場合にはこれに「d」も加わります。
アルファベット変数にそれぞれの値が入っており、グラフ変数「Y1」に一番上の式の右辺「"aX^2+bX+c"」が代入されます。
納得いくまで何度でも「F1」を押せば選択しなおせます。
で、これでよければプログラムはここまでで一応終了で、「EXE」キーで終了します。
で、ここからは「Graph」での操作となりますので、説明は不要かとは思いますが、軽~く解説すると、
一旦「MENU」に戻って、「5」の「Graph」を選択しますと、「Y1」に先ほどの最後に選択した式が代入されていて、ちなみに「6」の「動的グラフ」にも同時に入りますが、そちらは無視。そちらで削除するとこちらも消えてしまいます。

「Graph」の起動画面に最後に選択した式が入っています。
変数「A」~「C」にはすでに値が入っているので、「EXE」キーか「F6」でいきなりグラフを描いてくれます。

「Graph」での回帰式のグラフ表示画面
これまたつまらん画面ですが、ここで「F1」の下の「SHIFT」キーを押すと、

グラフ画面で「SHIFT」キーを押したところ
ファンクションメニューが登場します。最初気づかず、かなりうざい。最初から出ているといいのですが、出てれば出てるでまた邪魔くさいかも。
ここから先は、マニュアルの「Graph」の項に描いてあるとおりのことができます。
「TRACE」→「F4」から特定の点の接線(Tangent)や法線(Norm)の絵は描けますが、それらの式はでません。なんちゅう中途半端な。使い道あるんですかね。どうやって使うん。
この画面で「SHIFT」の「SETUP」を押すと出てくる設定画面の「Derivative」の項目を「On」にしておくと、接線や法線を描いてるときの接線の傾き(dY/dX)を表示してくれます。これまた法線を描いてる時もとにかく「接線の傾き」という不親切設計です。なんちゅう不都合な仕様や。なんに使うねん。傾きよりもせめて直線の式だけでも欲しいですな。なんかすれば出るんかな??

接線の表示画面
あとは「G-SOLVE」では、式=0のときの解とか、特定の「x」の「y」の値、またはその逆などが出せます。あんまり使い勝手はよくない感じです。

解を求めたところ(Y=0となるXの値のことです)
上の図では、「ROOT」(解)を求めているところで、X=3.569844284のところに選択ポイントがあり、このときのYの値は「0」、接線の傾き(dY/dX)は「-0.04」と表示されています。いらん。十字キーで右に移動させると次の解までポインタが飛びます。
「Graph」での使い方はCASIOのYoutube動画のとおりですが、ちょっと説明がもの足りない感じです。いろいろいじってみるしかありません。
ここで再度入力したデータを重ねてみたい場合には、「MENU」の「2:Statistics」のリスト画面で、「Graph」の「SELECT」で「StatGraph2」と「StatGraph3」を「DrawOn」にして「F6:DRAW」を押せばまた重ね合わせのグラフが描画できます。
ここでも、「CALC」で再度、回帰分析も可能です。回帰分析結果を「COPY」すれば、「Graph」のY1~Y20に登録可能です。要はこの作業をするプログラムです。
ちなみに、この「Y1」式は「MENU」で一つ隣の「6:Dyna Graph」の「Y1」にも共通して同じものが入っています。ここでは「a」~「d」の数字を変化させてグラフの形の変化をみるもので、ここで動かしてしまうと「a」~「d」定数の値が変わってしまい、もう二度と元には戻せないので、最初から「6:動的解析」には入らないのが賢明です。興味があればこの限りではありません。
あまり使う頻度もなく、個人的にはジャンクと呼びたいプログラムでした。回帰式を打ち直しするよりは自動で放り込める方が楽かな、と思って作りました。
なお、回帰計算の結果はCASIOのアルゴリズムからそのまま引っ張て来ているだけなので、良くも悪くもCASIOの計算結果どおりです。一通り、EXCELでの確認の検算はしていますが、どれか一つだけ、「R」と「MSE」がかなり怪しいものが混じっていたように記憶しています。5番目だったかなー。
時間があったら是非ともお試しあれ。
<Y=a+b/xの計算例>
今回、唯一の自作である上記式(No.4)「Y=a+b/X」の計算結果ですが、FX-JP700と全く同じで結果であることを確認済です。

「Y=a+b/X」の計算結果
JP700めっちゃ見づらい。
ちょっと見づらいですが、a, b, rともに全く同じ結果となっています。
これのグラフはこんな形で、相方が左上の方に見えています。

「Y=a+B/X」のグラフ
左上の方が近似が合いそうに見えますが、こっちなんですかね。
あるいはやり方があるんですかね。