- 締切済み
VBによる回帰直線のプログラム
VB6を本を見ながら勉強していますが、どの本にもフォーム上にグラフを表示するものばかりでピクチャボックスに回帰直線y=ax+bの直線を描けるようにはどうしたらいいのかプログラムに困っています。どなたか分かる方いましたらよろしくお願いします。ちなみにプログラムはこのようになっています; Private Sub Command1_Click() Dim c(10) As Double Dim d(10) As Double Dim cx As Integer, cy As Integer, lx As Integer, ly As Integer '----------------------------------------------------------------- 'ピクチャボックスの初期化 Picture1.Cls 'グラフの位置 cx = 60 cy = 320 lx = 300 ly = 300 'グラフ枠を描画 Picture1.FillColor = QBColor(15) Picture1.Line (cx, cy)-(cx + lx, cy - ly), , B '縦軸の目盛り Picture1.DrawStyle = 2 '線の種類 点線 For i = 0 To 5 Picture1.Line (cx, cy - 60 * i)-(cx + lx, cy - 60 * i) Picture1.CurrentX = cx - 25 'ラベルを表示する場所の指定 Picture1.CurrentY = cy - 60 * i '横軸を描画 Picture1.Print Format(i) 'ラベル出力位置を設定 '(i*縦軸の目盛りの倍数 現在は10倍 Next i '横軸の目盛り For i = 0 To 5 Picture1.Line (cx + 60 * i, cy)-(cx + 60 * i, cy - ly) Picture1.CurrentX = cx + 60 * i Picture1.CurrentY = cy + 5 Picture1.Print Format(i) Next i '------------------------------------------------------------------------ Dim n As Integer 'n:データ数 n = Val(Text3.Text) For i = 0 To n - 1 c(i) = Val(Text1(i).Text) d(i) = Val(Text2(i).Text) Next i 'データを○印でプロット For i = 0 To n - 1 Picture1.Circle (cx + 60 * c(i), cy - 60 * d(i)), 3, QBColor(0) Next i 'ここまで成功---------------------------------------------------------------------- 'xに関する平均値と標準偏差の計算プログラム Dim sx As Double, sxx As Double, avx As Double, sdx As Double Dim x(10) As Integer For i = 0 To n - 1 x(i + 1) = c(i) Next i sx = 0 sxx = 0 For i = 1 To n sx = sx + x(i) sxx = sxx + x(i) * x(i) Next i avx = sx / n sdx = Sqr((sxx - n * avx * avx) / n) 'yに関する平均値と標準偏差の計算プログラム Dim sy As Double, syy As Double, svy As Double, sdy As Double Dim y(10) As Double 'インデックスが範囲を超えているのエラーの解決 10を代入 For i = 0 To n - 1 y(i + 1) = d(i) Next i sy = 0 syy = 0 For i = 1 To n sy = sy + y(i) syy = syy + y(i) * y(i) Next i avy = sy / n sdy = Sqr((syy - n * avy * avy) / n) '-------------------------------------------------------------------------------------- '回帰直線y=ax+bを描く End Sub
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- irija_bari
- ベストアンサー率73% (70/95)
ANo.1 です。 >一応掲載したプログラムは平均値、標準偏差、相関係数を求めるようになっており、参考書などみたらこの3つがわかれば回帰直線をもとめることができるとあったのですが; 平均値、標準偏差、相関係数を求めれば回帰直線が決まるというのはその通りです。 しかし、ご質問のコードを拝見したところ、平均値と標準偏差は求めているようですが、 相関係数は求めていないのでは? あと、y = ax + b の a と b が求められたのなら、(x1, y1) と (x2,y2) を決めて (ただし、y1 = ax1 + b, y2 = ax2 + b、x1, x2 はグラフに納まるように決定する) Line(x1, y1)-(x2, y2) を実行すればよいのではないでしょうか。
- irija_bari
- ベストアンサー率73% (70/95)
回答される方がいらっしゃらないようなので。。。 VB はほとんど使ったことがないので、確かなことは言えませんが、 PSet(x, y) でたくさんのドットを描くことでグラフを描くのが一般的な ようですね。 参考URL) http://www.johoka.net/vbsin.htm など ただ、今回は直線を引けばいいので、Line(x1, y1)-(x2, y2) で良いのでは? あと、ご質問のコードでは x, y の平均と標準偏差を求めているようなのですが、 これで回帰直線は求まるのでしょうか?
お礼
>irija_bariさん アドバイスありがとうございます。 一応掲載したプログラムは平均値、標準偏差、相関係数を求めるようになっており、参考書などみたらこの3つがわかれば回帰直線をもとめることができるとあったのですが; これだとまだ回帰直線を求めるには不足なのでしょうか?; お忙しいとこ申し訳ありません; よろしくお願いします。