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
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
回答される方がいらっしゃらないようなので。
。。VB はほとんど使ったことがないので、確かなことは言えませんが、
PSet(x, y) でたくさんのドットを描くことでグラフを描くのが一般的な
ようですね。
参考URL) http://www.johoka.net/vbsin.htm など
ただ、今回は直線を引けばいいので、Line(x1, y1)-(x2, y2) で良いのでは?
あと、ご質問のコードでは x, y の平均と標準偏差を求めているようなのですが、
これで回帰直線は求まるのでしょうか?
>irija_bariさん
アドバイスありがとうございます。
一応掲載したプログラムは平均値、標準偏差、相関係数を求めるようになっており、参考書などみたらこの3つがわかれば回帰直線をもとめることができるとあったのですが;
これだとまだ回帰直線を求めるには不足なのでしょうか?;
お忙しいとこ申し訳ありません;
よろしくお願いします。
No.2
- 回答日時:
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) を実行すればよいのではないでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAプログラミング 2 2022/11/27 12:07
- Visual Basic(VBA) VBAプログラミング 2 2022/11/27 12:13
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
- Visual Basic(VBA) エクセル マクロ(A1:A10)までの中で一番多く出た数字をB10に表示 6 2023/04/25 17:01
- Visual Basic(VBA) vbaの計算 if elseと範囲について 6 2022/11/26 01:49
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) VBA 配列を使ったコードに直していただけますか 4 2023/05/06 15:18
- 数学 単振り子とルンゲ・タック法 1 2022/07/15 00:05
- Visual Basic(VBA) VBA横データを縦にしたいです 2 2023/08/08 19:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ASPで日付(期間)検索
-
ペイントソフトの作成方法
-
他のフォームから別のフォーム...
-
エクセルVBAでテキストボッ...
-
【VB6.0】 あるフォームから他...
-
perlによるxmlファイルの取得
-
タイムアウトする仕組みを作りたい
-
C#のループでtextboxに値を入れ...
-
sublimit textっていうエディタ...
-
三項でたとえば交換って
-
C言語のサフィックスについて
-
VS CodeでTEXファイルにPDF形式...
-
pthread_cond_waitとptherad_co...
-
二点の座標から距離や角度を求...
-
【VB.NET】テキストボックスに...
-
VB.NETでのイベントの途中終了
-
VB6のFriendについて
-
verilogのcase文
-
アクセスできない保護レベルエ...
-
【VBS】クリップボード操作につ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SavePictureで保存できない
-
ボールが壁に当たって跳ね返る...
-
Matlabでsin波を使って矩形波を...
-
PictureBoxでのアニメーション...
-
Matlab/SimulinkのChirp信号に...
-
FlexGridで文字色を変更。
-
ピッ、ってアルファベットでど...
-
SCALEの使い方教えてください
-
プログレスバーに似たコントロ...
-
Picture box の サイズを変更
-
(VB)ピクチャボックスに表示し...
-
画像をランダムに表示させたい...
-
ペイントソフトの作成方法
-
ピクチャーボックスの画像を印...
-
C言語のOpenGLで複数のテクスチ...
-
VBによる回帰直線のプログラム
-
文字間の幅の設定
-
画像処理
-
三項でたとえば交換って
-
VBA public変数はどのようなこ...
おすすめ情報