VERSION 5.00 Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "COMDLG32.OCX" Begin VB.Form Form1 Caption = "Form1" ClientHeight = 1830 ClientLeft = 60 ClientTop = 345 ClientWidth = 4785 LinkTopic = "Form1" ScaleHeight = 1830 ScaleWidth = 4785 ShowInTaskbar = 0 'False StartUpPosition = 3 'Windows の既定値 Begin VB.TextBox Text2 Height = 270 Left = 480 TabIndex = 2 Text = "11.回帰と相関" Top = 480 Width = 2055 End Begin MSComDlg.CommonDialog CommonDialog1 Left = 3840 Top = 1200 _ExtentX = 847 _ExtentY = 847 _Version = 393216 End Begin VB.CommandButton Command1 Caption = "0入力;学生用ファイル(*.js),その他の値;先生用ファイル(*.txt)作成 " Height = 855 Left = 1320 TabIndex = 1 Top = 960 Width = 2055 End Begin VB.TextBox Text1 Height = 495 Left = 240 TabIndex = 0 Top = 1200 Width = 735 End End Attribute VB_Name = "Form1" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Private Sub command1_click() '11.回帰と相関.0入力は学生,それ以外は教師用ファイル作成' Dim bango, REP, HAN, num As Integer bango = Val(Text1.Text) CommonDialog1.ShowSave Open CommonDialog1.FileName For Output As #1 QQ = 0 Form1.AutoRedraw = True YR = Val(Mid$(Date$, 3, 4)) Print YR Randomize (YR + 21) Dim T(40), X(2, 30), X2(30), R05(30), R01(30) ' t-value T(1) = 12.706: T(2) = 4.303: T(3) = 3.182: T(4) = 2.776: T(5) = 2.571 T(6) = 2.447: T(7) = 2.365: T(8) = 2.3006: T(9) = 2.262: T(10) = 2.228 T(11) = 2.201: T(12) = 2.179: T(13) = 2.16: T(14) = 2.145: T(15) = 2.131 T(16) = 2.12: T(17) = 2.11: T(18) = 2.101: T(19) = 2.093: T(20) = 2.086 T(21) = 2.08: T(22) = 2.074: T(23) = 2.069: T(24) = 2.064: T(25) = 2.06 T(26) = 2.056: T(27) = 2.052: T(28) = 2.048: T(29) = 2.045: T(30) = 2.042 ' significant r values ' R05(1) = 0.997: R05(2) = 0.95: R05(3) = 0.878: R05(4) = 0.811: R05(5) = 0.754: R05(6) = 0.707: R05(7) = 0.666: R05(8) = 0.632: R05(9) = 0.602: R05(10) = 0.576 R05(11) = 0.553: R05(12) = 0.532: R05(13) = 0.514: R05(14) = 0.497: R05(15) = 0.482: R05(16) = 0.468: R05(17) = 0.456: R05(18) = 0.444: R05(19) = 0.433: R05(20) = 0.423 R05(21) = 0.413: R05(22) = 0.404: R05(23) = 0.396: R05(24) = 0.388: R05(25) = 0.381: R05(26) = 0.374: R05(27) = 0.367: R05(28) = 0.361: R05(29) = 0.355: R05(30) = 0.349 R01(1) = 1: R01(2) = 0.99: R01(3) = 0.959: R01(4) = 0.917: R01(5) = 0.874: R01(6) = 0.834: R01(7) = 0.798: R01(8) = 0.765: R01(9) = 0.735: R01(10) = 0.708 R01(11) = 0.684: R01(12) = 0.661: R01(13) = 0.641: R01(14) = 0.623: R01(15) = 0.606: R01(16) = 0.59: R01(17) = 0.575: R01(18) = 0.561: R01(19) = 0.549: R01(20) = 0.537 R01(21) = 0.526: R01(22) = 0.515: R01(23) = 0.505: R01(24) = 0.496: R01(25) = 0.48: R01(26) = 0.478: R01(27) = 0.47: R01(28) = 0.463: R01(29) = 0.456: R01(30) = 0.449 NH = 2: NR = 5 ' KURIKAESHI ' If bango = 0 Then GoTo NOBANGO Else For num = 1 To 9 Print #1, ""; num; " "; Next num For num = 10 To 99 Print #1, ""; num; " "; Next num Print #1, "
"
End If
NOBANGO:
 For REP = 1 To 100  'Number of students
 For HAN = 1 To 3    'Number of works per student
 If HAN > 1 Then GoTo L520
L520:
 NRN = NR
L530:
 NR = Int(Rnd * 4 + 9)
 If NR = NRN Then GoTo L530
ATAI:
 ' Form1.Print "FF", rep, han, r '
 For j = 1 To NR
 X(1, j) = Int(Rnd * 7 + 4)
 X(2, j) = Int(X(1, j) / 2 + Int(Rnd * 5) + 4)
 If HAN = 3 Then X(2, j) = Int(7 - X(1, j) / 1 + Int(Rnd * 3))
 Next j
KEISAN:
 XM = 0: XD = 0: YM = 0: YD = 0: XYD = 0
 For j = 1 To NR
 XM = XM + X(1, j): XD = XD + X(1, j) ^ 2
 YM = YM + X(2, j): YD = YD + X(2, j) ^ 2
 XYD = XYD + X(1, j) * X(2, j)
 Next j
 XD = XD - XM ^ 2 / NR: YD = YD - YM ^ 2 / NR: XYD = XYD - XM * YM / NR
 B = XYD / XD: A = YM / NR - B * XM / NR
 D2YX = YD - XYD * XYD / XD
 S2YX = D2YX / (NR - 2)
 SYX = S2YX ^ (1 / 2)
 SB = SYX / (XD ^ (1 / 2))
 TT = B / SB
 DF = NR - 2: If DF > 30 Then DF = 30
 r = XYD / ((XD * YD) ^ (1 / 2))
 If r * r < 0.25 Then GoTo ATAI
 If HAN > 1 Then GoTo L810
 If r * r < R05(DF) ^ 2 Then GoTo ATAI
 If r * r > R01(DF) ^ 2 Then GoTo ATAI
 GoTo INSATU
L810:
 If HAN = 2 Then GoTo L820 Else GoTo L830
L820:
 If r * r > R05(DF) ^ 2 Then GoTo ATAI
 GoTo INSATU
L830:
 If r * r < R01(DF) ^ 2 Then GoTo ATAI
INSATU:
If bango = 0 Then GoTo FILEFORSTUDENTS
' ---------------------  '
  If REP < 10 And HAN = 1 Then Print #1, ""
  If REP > 9 And HAN = 1 Then Print #1, ""
 Print #1, REP; "-"; HAN
 Print #1, "X ";
 For i = 1 To NH
 If i = 2 Then Print #1, "Y ";
 For j = 1 To NR
 Print #1, X(i, j);
 Next j
 Print #1,
 Next i
 Print #1, "Sx,Sy,sowa,Dx,Dy,Dxy "; XM; YM; YM + XM; XM ^ 2 / NR; YM ^ 2 / NR; XM * YM / NR
 Print #1, "SSx,SSy,SSxy "; XD + XM ^ 2 / NR; YD + YM ^ 2 / NR; XYD + XM * YM / NR
 Print #1, "$$$$  Y = "; Format(B, "###.####");
 Print #1, " X + "; Format(A, "###.####"); "  $$$$ "
 Print #1, " Xb= "; XM / NR;
 Print #1, " Yb= "; YM / NR
 Print #1, " D2YX "; D2YX;
 Print #1, " S2YX "; S2YX;
 Print #1, " SYX "; SYX;
 Print #1, " SB "; SB
 Print #1, " T "; TT; " $$$$ df= "; NR - 2
 Print #1, "b= "; B;
 Print #1, "+-"; Format(SB * T(NR - 2), "###.####"); " $$$$  5,1% r= "; R05(DF); R01(DF)
 Print #1, "r=cov/(sx2*sy2)^(1/2)"; XYD; XD; YD; "=  $$$$ "; Format(r, "#.####");
 If r * r > R01(DF) ^ 2 Then Print #1, "**": GoTo L1090
 If r * r > R05(DF) ^ 2 Then Print #1, "*": GoTo L1090
 Print #1, "NS"
L1090:
 ' --------------------- '
 ' y_values sorting and X-Y plot'
     For i = 1 To NR - 1
     For j = i + 1 To NR
       If X(2, i) > X(2, j) Then GoTo SORT
       wOrk1 = X(2, i): X(2, i) = X(2, j): X(2, j) = wOrk1
       wOrk2 = X(1, i): X(1, i) = X(1, j): X(1, j) = wOrk2
SORT:
     Next j
     Next i
     For i = 1 To 2
     For j = 1 To NR
       Print #1, X(i, j);
     Next j
       Print #1,
     Next i
' ---------------------- '
' Douitu Y deno X sort '
     k3 = 1
     k = 0
NARABE:
     k = k + 1
     If k = NR Then GoTo NARABE3
     If X(2, k) - X(2, k + 1) <> 0 Then GoTo NARABE
      X2(k3) = X(1, k)
      X2(k3 + 1) = X(1, k + 1)
      k3 = k3 + 1
      If X(2, k + 1) - X(2, k + 2) = 0 Then GoTo NARABE
      k4 = k3
      k3 = 1
      For i = 1 To k4 - 1
   For j = i + 1 To k4
       If X2(i) < X2(j) Then GoTo SORT2
      wOrk = X2(i): X2(i) = X2(j): X2(j) = wOrk
SORT2:
    Next j
   Next i
 For j = 1 To k4
 X(1, 1 + j + k - k4) = X2(j)
 Next j
 GoTo NARABE
NARABE3:
   For i = 1 To 2
  For j = 1 To NR
   Print #1, X(i, j);
    Next j
     Print #1,
  Next i
  ' ------------------------ '
  ' X, Y Plot '
    Print #1, X(2, 1) + 1, "|";
    For j = 1 To Int((X(2, 1) + 1 - A) / B) + 1
         Print #1, "__";
    Next j
        Print #1, "_@"
   flag = 0
   For i = 1 To NR
        If flag = 1 Then GoTo W5
          Print #1, X(2, i), "|";
           For j = 1 To X(1, i) + 1
            Print #1, "__";
           Next j
        
           Print #1, "_x";
          
W5:
        flag = 0
        If i = NR Then GoTo W4
        wOrk3 = X(2, i) - X(2, i + 1)
        If wOrk3 = 1 Then GoTo W1
        If wOrk3 = 0 Then GoTo W2
        If wOrk3 > 1 Then GoTo W3
W3:
        Print #1,
         For j = 1 To wOrk3 - 1
           Print #1, X(2, i) - j, "|";
             For l = 1 To Int((X(2, i) - j - A) / B) + 1
             Print #1, "__";
             Next l
             Print #1, "_@"
         Next j
       GoTo W4
W2:
       For j = 1 To (X(1, i + 1) - X(1, i) - 1)
          Print #1, "__";
       Next j
          If X(1, i) - X(1, i - 1) = 0 Then GoTo W22
          If X(1, i) - X(1, i + 1) <> 0 Then Print #1, "_";
W22:
      Print #1, "x";
      flag = 1
      GoTo W4
W1:
     Print #1,
W4:
     Next i
 ' sitabubun hyouji '
     Print #1,
     If X(2, NR) <= 0 Then
      Print #1, X(2, NR) - 1, "|";
      For j = 1 To Int((X(2, NR) - 1 - A) / B) + 1
         Print #1, "__";
      Next j
        Print #1, "_@"
     End If
     For i = 1 To X(2, NR)
      Print #1, X(2, NR) - i, "|";
      If i = 1 Then
        For j = 1 To Int((X(2, NR) - 1 - A) / B) + 1
        Print #1, "__";
        Next j
        Print #1, "_@";
      End If
      Print #1,
     Next i
     Print #1,
     Print #1, "              ";
     Print #1, "-2   0   2   4   6   8  10  12  14  16";
     Print #1,
GoTo TOBASU
' ====================== '
FILEFORSTUDENTS:
 If HAN > 1 Then GoTo TOBU
 Print #1, "jsDB[";
 Print #1, QQ;
 Print #1, "]='";
TOBU:
 Print #1, "
No. "; HAN; Print #1, "
X "; For i = 1 To NH If i = 2 Then Print #1, "
Y "; For j = 1 To NR Print #1, X(i, j); Next j Next i If HAN > 1 Then GoTo TOBASU Print #1, "
Y = "; Format(B, "###.####"); Print #1, " X + "; Format(A, "###.####"); Print #1, "
r = ", Format(r, "##.####"); TOBASU: Next HAN Print #1, "'" QQ = QQ + 1 Next REP Close #1 Form1.Print Form1.Print "OK" End Sub