Created
February 13, 2011 11:10
-
-
Save takkkun/824593 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
VERSION 5.00 | |
Begin VB.Form frmMain | |
BorderStyle = 1 '固定(実線) | |
Caption = "相関係数・回帰直線" | |
ClientHeight = 6135 | |
ClientLeft = 45 | |
ClientTop = 330 | |
ClientWidth = 4695 | |
BeginProperty Font | |
Name = "BDF M+" | |
Size = 9 | |
Charset = 128 | |
Weight = 400 | |
Underline = 0 'False | |
Italic = 0 'False | |
Strikethrough = 0 'False | |
EndProperty | |
LinkTopic = "Form1" | |
MaxButton = 0 'False | |
MinButton = 0 'False | |
ScaleHeight = 6135 | |
ScaleWidth = 4695 | |
StartUpPosition = 3 'Windows の既定値 | |
Begin VB.CommandButton cmdPrintData | |
Caption = "描画" | |
Height = 255 | |
Left = 3240 | |
TabIndex = 5 | |
Top = 5760 | |
Width = 1335 | |
End | |
Begin VB.CommandButton cmdCalculateData | |
Caption = "計算" | |
Height = 255 | |
Left = 1680 | |
TabIndex = 4 | |
Top = 5760 | |
Width = 1335 | |
End | |
Begin VB.TextBox txtFileName_2 | |
Height = 285 | |
Left = 120 | |
TabIndex = 3 | |
Text = "txtFileName_2" | |
Top = 5400 | |
Width = 4455 | |
End | |
Begin VB.TextBox txtFileName_1 | |
Height = 285 | |
Left = 120 | |
TabIndex = 2 | |
Text = "txtFileName_1" | |
Top = 5040 | |
Width = 4455 | |
End | |
Begin VB.PictureBox picScreen | |
AutoRedraw = -1 'True | |
Height = 4455 | |
Left = 120 | |
ScaleHeight = 1000 | |
ScaleMode = 0 'ユーザー | |
ScaleWidth = 1000 | |
TabIndex = 1 | |
Top = 120 | |
Width = 4455 | |
End | |
Begin VB.CommandButton cmdLoadFile | |
Caption = "読み込み" | |
Height = 255 | |
Left = 120 | |
TabIndex = 0 | |
Top = 5760 | |
Width = 1335 | |
End | |
Begin VB.Label lblPrint | |
Caption = "lblPrint" | |
Height = 255 | |
Left = 120 | |
TabIndex = 6 | |
Top = 4680 | |
Width = 4455 | |
End | |
End | |
Attribute VB_Name = "frmMain" | |
Attribute VB_GlobalNameSpace = False | |
Attribute VB_Creatable = False | |
Attribute VB_PredeclaredId = True | |
Attribute VB_Exposed = False | |
'------------------------------------------------------------------------------------------ | |
'名 称:相関係数・回帰直線計算プログラム | |
'作成者:n-Wisteria | |
'作成日:2004/04/05 | |
'更新日:2004/04/05 | |
'------------------------------------------------------------------------------------------ | |
'変数の宣言を強制する | |
Option Explicit | |
'配列の要素を1から開始する | |
Option Base 1 | |
'変数の宣言 | |
Private m_arrXValues(100) As Integer 'データX | |
Private m_arrYValues(100) As Integer 'データY | |
Private m_dblCC As Double '相関係数 | |
Private m_dblStartPos As Double '回帰直線・Y座標始点 | |
Private m_dblEndPos As Double '回帰直線・Y座標終点 | |
Private m_intDataCount As Integer 'データの個数 | |
Private m_intCode As Integer '符号 | |
Private Sub cmdLoadFile_Click() | |
'変数の宣言 | |
Dim strFilePath_1 As String 'ファイルパス1 | |
Dim strFIlePath_2 As String 'ファイルパス2 | |
Dim i As Integer 'カウンタ | |
'コントロールと変数の初期化 | |
m_dblCC = 0 | |
m_dblStartPos = 0 | |
m_dblEndPos = 0 | |
m_intDataCount = 0 | |
lblPrint.Caption = "相関係数:計算されていません" | |
'ファイルパスの格納 | |
strFilePath_1 = App.Path & "\" & txtFileName_1.Text & ".txt" | |
strFIlePath_2 = App.Path & "\" & txtFileName_2.Text & ".txt" | |
'ファイル有無のチェック | |
If Dir(strFilePath_1) = "" Then | |
MsgBox ("[ " & strFilePath_1 & " ] が見つかりません") | |
Exit Sub | |
End If | |
If Dir(strFIlePath_2) = "" Then | |
MsgBox ("[ " & strFIlePath_2 & " ] が見つかりません") | |
Exit Sub | |
End If | |
'データを配列に格納 | |
Open strFilePath_1 For Input As #1: Open strFIlePath_2 For Input As #2 | |
For i = 1 To 100 | |
If EOF(1) Or EOF(2) Then Exit For | |
Input #1, m_arrXValues(i) | |
Input #2, m_arrYValues(i) | |
Next i | |
Close #1, #2 | |
'データ件数を格納 | |
m_intDataCount = i - 1 | |
'読み込みデータ件数の確認 | |
MsgBox ("X,Y それぞれに" & m_intDataCount & "件のデータが読み込まれました") | |
End Sub | |
Private Sub cmdCalculateData_Click() | |
'変数の宣言 | |
Dim dblXAverage As Double 'データXの平均値 | |
Dim dblYAverage As Double 'データYの平均値 | |
Dim dblSxx As Double 'データSxx | |
Dim dblSyy As Double 'データSyy | |
Dim dblSxy As Double 'データSxy | |
Dim i As Integer 'カウンタ | |
'データ件数のチェック | |
If m_intDataCount = 0 Then | |
MsgBox ("データ件数が0件では計算できません") | |
Exit Sub | |
End If | |
'平均値の計算 | |
dblXAverage = Average("X") | |
dblYAverage = Average("Y") | |
'Sxx, Syy, Sxy の計算 | |
dblSxx = CalcS("xx", dblXAverage, 0) | |
dblSyy = CalcS("yy", 0, dblYAverage) | |
dblSxy = CalcS("xy", dblXAverage, dblYAverage) | |
'相関係数の計算 | |
m_dblCC = dblSxy / Sqr(dblSxx * dblSyy) | |
'回帰直線の計算 | |
m_dblStartPos = dblYAverage - dblSxy / dblSxx * dblXAverage | |
m_dblEndPos = dblSxy / dblSxx * 1000 + m_dblStartPos | |
If dblSxy / dblSxx > 0 Then | |
m_intCode = 1 | |
Else | |
m_intCode = -1 | |
End If | |
'計算完了の確認 | |
lblPrint.Caption = "相関係数:計算完了" | |
End Sub | |
Private Sub cmdPrintData_Click() | |
'変数の宣言 | |
Dim intXMax As Integer 'データXの最大値 | |
Dim intYMax As Integer 'データYの最大値 | |
Dim i As Integer 'カウンタ | |
'相関係数の表示 | |
lblPrint.Caption = "相関係数:" & m_dblCC | |
'目盛りの表示 | |
'略 | |
'最大値の取得 | |
intXMax = Max("X") + 5 | |
intYMax = Max("Y") + 5 | |
'データの座標のプロット | |
picScreen.Cls | |
picScreen.DrawWidth = 2 | |
For i = 1 To m_intDataCount | |
picScreen.PSet (m_arrXValues(i) / intXMax * 500 + 500, m_arrYValues(i) / intYMax * 500 + 500) | |
Next i | |
'回帰直線の表示 | |
picScreen.DrawWidth = 1 | |
picScreen.Line (500, m_dblStartPos + 500)-(1000 * m_intCode, m_dblEndPos + 500), vbRed | |
End Sub | |
Private Function Average(ByVal Style As String) As Double | |
'変数の宣言 | |
Dim lngTotal As Long '合計値 | |
Dim i As Integer 'カウンタ | |
'合計値の初期化 | |
lngTotal = 0 | |
'区分によって処理を分岐 | |
Select Case Style | |
Case "X" | |
For i = 1 To m_intDataCount | |
lngTotal = lngTotal + m_arrXValues(i) | |
Next i | |
Case "Y" | |
For i = 1 To m_intDataCount | |
lngTotal = lngTotal + m_arrYValues(i) | |
Next i | |
Case Else | |
'何も処理しない | |
End Select | |
'平均値を返す | |
Average = lngTotal / m_intDataCount | |
End Function | |
Private Function Max(ByVal Style As String) As Integer | |
'変数の宣言 | |
Dim intMax As Integer '最大値 | |
Dim i As Integer 'カウンタ | |
'最大値の初期化 | |
intMax = 0 | |
'区分によって処理を分岐 | |
Select Case Style | |
Case "X" | |
For i = 1 To m_intDataCount | |
If m_arrXValues(i) > intMax Then intMax = m_arrXValues(i) | |
Next i | |
Case "Y" | |
For i = 1 To m_intDataCount | |
If m_arrYValues(i) > intMax Then intMax = m_arrYValues(i) | |
Next i | |
Case Else | |
'何も処理しない | |
End Select | |
'最大値を返す | |
Max = intMax | |
End Function | |
Private Function CalcS(ByVal Style As String, ByVal XAverage As Double, ByVal YAverage As Double) As Double | |
'変数の宣言 | |
Dim dblTotal As Double '合計値 | |
Dim i As Integer 'カウンタ | |
'合計値の初期化 | |
dblTotal = 0 | |
'区分によって処理を分岐 | |
Select Case Style | |
Case "xx" | |
For i = 1 To m_intDataCount | |
dblTotal = dblTotal + (m_arrXValues(i) - XAverage) ^ 2 | |
Next i | |
Case "yy" | |
For i = 1 To m_intDataCount | |
dblTotal = dblTotal + (m_arrYValues(i) - YAverage) ^ 2 | |
Next i | |
Case "xy" | |
For i = 1 To m_intDataCount | |
dblTotal = dblTotal + (m_arrXValues(i) - XAverage) * (m_arrYValues(i) - YAverage) | |
Next i | |
Case Else | |
'何も処理しない | |
End Select | |
'値を返す | |
CalcS = dblTotal | |
End Function |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment