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 = 4530 LinkTopic = "Form1" ScaleHeight = 1830 ScaleWidth = 4530 ShowInTaskbar = 0 'False StartUpPosition = 3 'Windows の既定値 Begin VB.TextBox Text2 Height = 270 Left = 480 TabIndex = 2 Text = "6.反復のない二元配置の分散分析" Top = 480 Width = 3015 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() '6.分散分析,反復のない二元配置.0入力は学生,それ以外は教師用ファイル作成' ' データa,b処理の向きが教科書といれ違ったので出力のさいの表記だけa,bを入れ替えた' Dim bango As Integer bango = Val(Text1.Text) CommonDialog1.ShowSave Open CommonDialog1.FileName For Output As #1 Dim dUncan(8 To 30, 1 To 4) As Single Dim hEikin_a(7), hEikin_b(7) As Single Dim dun(1 To 7) As Single Dim iSeito(1 To 7, 1 To 7) As Integer Dim iWa_a(7), iWa_b(7) As Integer Dim sDun(7, 7) As String Dim f1_a, f2_a, f1_b, f2_b, tValue_a, tValue_b, lSd_a, lSd_b, sA_a, sA_b As Single Dim du, sM_a, sM_b, k, kk, cF, hEihowa1, sS_a, sS_b, sS_gosa, mS_a, mS_b, mS_gosa, fValue_a, fValue_b, wOrk As Single Dim yr, d, sOwa, iWa2, i, j, n1, n2, m, p, q, dF_total, dF_b, dF_a, dF_gosa As Integer q = 0 dUncan(12, 1) = 3.082 dUncan(12, 2) = 3.225 dUncan(12, 3) = 3.313 dUncan(12, 4) = 3.37 dUncan(15, 1) = 3.014 dUncan(15, 2) = 3.16 dUncan(15, 3) = 3.25 dUncan(15, 4) = 3.312 dUncan(16, 1) = 2.998 dUncan(16, 2) = 3.144 dUncan(16, 3) = 3.235 dUncan(16, 4) = 3.298 dUncan(18, 1) = 2.971 dUncan(18, 2) = 3.118 dUncan(18, 3) = 3.21 dUncan(18, 4) = 3.274 dUncan(24, 1) = 2.919 dUncan(24, 2) = 3.066 dUncan(24, 3) = 3.16 dUncan(24, 4) = 3.226 dUncan(30, 1) = 2.888 dUncan(30, 2) = 3.035 dUncan(30, 3) = 3.131 dUncan(30, 4) = 3.199 Form1.AutoRedraw = True yr = Val(Mid$(Date$, 3, 4)) Print yr Randomize (yr + 16) If bango = 0 Then GoTo NOBANGO Else For m = 1 To 9 Print #1, ""; m; " "; Next m For m = 10 To 50 Print #1, ""; m; " "; Next m For m = 51 To 59 Print #1, ""; m; " "; Next m For m = 60 To 99 Print #1, ""; m; " "; Next m Print #1, "
"
End If
NOBANGO:
 For m = 1 To 50      '学生数'
   If bango <> 0 Then Print #1, "-------------------------"
For p = 1 To 3      '繰り返し数'
'以下処理数n1のサイクル変更'
d = m Mod 3
If p = 1 And d = 1 Then n1 = 5
If p = 1 And d = 2 Then n1 = 4
If p = 1 And d = 0 Then n1 = 3
If p = 2 And d = 1 Then n1 = 4
If p = 2 And d = 2 Then n1 = 3
If p = 2 And d = 0 Then n1 = 5
If p = 3 And d = 1 Then n1 = 3
If p = 3 And d = 2 Then n1 = 5
If p = 3 And d = 0 Then n1 = 4
'以下反復数n2'
If n1 = 3 Then n2 = 7
If n1 = 4 Then n2 = 5
If n1 = 5 Then n2 = 4
    dF_total = n1 * n2 - 1
    dF_b = n2 - 1
    dF_a = n1 - 1
    dF_gosa = n1 * n2 - n1 - n2 + 1
    f1_a = 1.004 + 2.001 / dF_gosa + 41.79 / (dF_gosa ^ 2) + 2.318 / dF_a - 0.957 / (dF_a ^ 2) - 1.659 / (dF_a * dF_gosa) + 2.395 / dF_gosa ^ (1 / 2) + 1.241 / dF_a ^ (1 / 2)
    f2_a = -0.231 - 35.08 / dF_gosa + 214.2 / (dF_gosa ^ 2) + 4.645 / dF_a - 1.552 / (dF_a ^ 2) + 11.97 / (dF_a * dF_gosa) + 16.6 / dF_gosa ^ (1 / 2) + 1.932 / dF_a ^ (1 / 2)
    f1_b = 1.004 + 2.001 / dF_gosa + 41.79 / (dF_gosa ^ 2) + 2.318 / dF_b - 0.957 / (dF_b ^ 2) - 1.659 / (dF_b * dF_gosa) + 2.395 / dF_gosa ^ (1 / 2) + 1.241 / dF_b ^ (1 / 2)
    f2_b = -0.231 - 35.08 / dF_gosa + 214.2 / (dF_gosa ^ 2) + 4.645 / dF_b - 1.552 / (dF_b ^ 2) + 11.97 / (dF_b * dF_gosa) + 16.6 / dF_gosa ^ (1 / 2) + 1.932 / dF_b ^ (1 / 2)
SEITO:
  For j = 1 To n1
    iWa_a(j) = 0
  Next j
  For j = 1 To n2
    iWa_b(j) = 0
  Next j
  sOwa = 0
  iWa2 = 0
  sS_a = 0
  sS_b = 0
'データ作成'
  For j = 1 To n1
  For i = 1 To n2
   d = p Mod 2
   If d = 1 And n1 <> 3 Then GoTo SEI1
   If d = 0 And n1 <> 3 Then GoTo SEI2
   If n1 = 3 Then GoTo SEI3
SEI1:
    If j = 2 Then k = 0 Else k = 0.3
    If i = 2 Then kk = 5 Else kk = 0
    iSeito(j, i) = Rnd * 5 + k * j * i + kk    'a,b共に** '
    GoTo SEI4
SEI2:
    If i = 2 Then k = 0 Else k = 2
    If j = 2 Then kk = 2 Else kk = 1
    iSeito(j, i) = Rnd * 5 + k * i + kk     'aはns,bは**'
    GoTo SEI4
SEI3:
    k = 1.5
    iSeito(j, i) = Rnd * 5 + k * j          'aは**,bはns'
SEI4:
  Next i
  Next j
  For j = 1 To n1
  For i = 1 To n2
      iWa_a(j) = iWa_a(j) + iSeito(j, i)
      iWa_b(i) = iWa_b(i) + iSeito(j, i)
      iWa2 = iWa2 + iSeito(j, i) ^ 2
      sOwa = sOwa + iSeito(j, i)
  Next i
  Next j
  '処理同一平均値チェック'
  For j = 1 To n1 - 1
  For i = 1 To n1 - j
      If iWa_a(j) = iWa_a(i + j) Then GoTo SEITO
  Next i
  Next j
  For j = 1 To n2 - 1
  For i = 1 To n2 - j
      If iWa_b(j) = iWa_b(i + j) Then GoTo SEITO
  Next i
  Next j
'計算開始'
  For j = 1 To n1
    hEikin_a(j) = iWa_a(j) / n2
    sS_a = sS_a + iWa_a(j) ^ 2
  Next j
  For j = 1 To n2
    hEikin_b(j) = iWa_b(j) / n1
    sS_b = sS_b + iWa_b(j) ^ 2
  Next j
    cF = sOwa ^ 2 / (n1 * n2)
    iWa2 = iWa2 - cF
    sS_a = sS_a / n2 - cF
    sS_b = sS_b / n1 - cF
    sS_gosa = iWa2 - sS_a - sS_b
    mS_a = sS_a / dF_a
    mS_b = sS_b / dF_b
    mS_gosa = sS_gosa / dF_gosa
    fValue_a = mS_a / mS_gosa
    fValue_b = mS_b / mS_gosa
    sM_a = (mS_gosa / n2) ^ (1 / 2)
    sM_b = (mS_gosa / n1) ^ (1 / 2)
 '  Form1.Print m, p, d, n1, cF, fValue_a, fValue_b   '
 '  If Val(Len(cF)) < 10 Then GoTo SEITO  '
 ' n1=4,5はpによって両方**,または**とns交互に.n1=3はaが**,bはns. '
  If d = 1 And n1 <> 3 Then GoTo DOTTI1
  If d = 0 And n1 <> 3 Then GoTo DOTTI2
  If n1 = 3 Then GoTo DOTTI3
DOTTI1:
    'a,b共に**'
    If fValue_a < (f2_a + 0.05) Then GoTo SEITO
    If fValue_b < (f2_b + 0.05) Then GoTo SEITO
    GoTo DOTTI4
DOTTI2:
    'aはns,bは**'
    If fValue_a > (f1_a - 0.05) Then GoTo SEITO
    If fValue_b < (f2_b + 0.05) Then GoTo SEITO
    GoTo DOTTI4
DOTTI3:
    'n1=3はaは**,bはns'
    If fValue_a < (f2_a + 0.05) Then GoTo SEITO
    If fValue_b > (f1_b - 0.05) Then GoTo SEITO
DOTTI4:
  If bango = 0 Then GoTo FILEFORSTUDENT
' FILEOUT FOR SENSEI '
  If m < 10 And p = 1 Then Print #1, ""
  If m > 9 And p = 1 Then Print #1, ""
   Print #1, m; "-"; p
   Print #1, m + 50; "-"; p
   For j = 1 To n1
   For i = 1 To n2
    Print #1, iSeito(j, i);
   Next i
    Print #1,
   Next j
   Print #1, "平均値a;  ";
   For j = 1 To n1
     Print #1, Format(hEikin_a(j), "###.####"), "  ";
   Next j
   Print #1,
   Print #1, "平均値b;  ";
   For j = 1 To n2
     Print #1, Format(hEikin_b(j), "###.####"), "  ";
   Next j
   Print #1,
   Print #1, "総和  総2乗和  補正項   処理平均の標準偏差 ;  ";
   Print #1, sOwa, iWa2 + cF, Format(cF, "###.######"), Format(sM_a, "###.####")
   Print #1, "Factor         DF           SS           MS         F-value      (5%,     1%) "
   Print #1, "Total ", dF_total, Format(iWa2, "000.000")
   Print #1, "Shori_a ", dF_b, Format(sS_b, "000.000"), Format(mS_b, "000.000"), Format(fValue_b, "000.000"), Format(f1_b, "000.000"), Format(f2_b, "000.000")
   Print #1, "Shori_b ", dF_a, Format(sS_a, "000.000"), Format(mS_a, "000.000"), Format(fValue_a, "000.000"), Format(f1_a, "000.000"), Format(f2_a, "000.000")
   Print #1, "Error ", dF_gosa, Format(sS_gosa, "000.000"), Format(mS_gosa, "000.000")
' ------------------------ '
     If fValue_b < f1_b Then GoTo D4b
'mean b_values sorting '
     For i = 1 To n2 - 1
     For j = i + 1 To n2
     If hEikin_b(i) > hEikin_b(j) Then GoTo SORT2
     wOrk = hEikin_b(i): hEikin_b(i) = hEikin_b(j): hEikin_b(j) = wOrk
SORT2:
     Next j
     Next i
     Print #1, "=== A ===  Sorted means ";
     For i = 1 To n2
      Print #1, Format(hEikin_b(i), "###.####"), "  ";
     Next i
     Print #1,
'Duncan b '
   For i = 1 To 4
    dun(i) = sM_b * dUncan(dF_gosa, i)
   Next i
   lSd_b = dun(1)
   tValue_b = lSd_b / (sM_b * 2 ^ (1 / 2))
   Print #1, "LSD=t*SM*Root2= ";
   Print #1, Format(tValue_b, "##.####");
   Print #1, "*";
   Print #1, Format(sM_b, "##.####");
   Print #1, "* 1.4142 = ";
   Print #1, Format(lSd_b, "##.####")
   For j = 1 To n2 - 1
   For i = 1 To n2 - j
     Print #1, j; "-"; n2 - i + 1; "; ";
     du = dun(n2 - i - j + 1)
     Print #1, "dun("; n2 - i - j + 2; ")= ", Format(du, "###.####");
     sA_b = hEikin_b(j) - hEikin_b(n2 - i + 1)
     Print #1, " SA= ", Format(sA_b, "###.####");
     If sA_b > du Then GoTo D2b Else GoTo D1b
D2b:
     Print #1, " *"
     sDun(n2 - i, j) = "* "
     GoTo D3b
D1b:
     Print #1, " NS"
     sDun(n2 - i, j) = "N"
D3b:
   Next i
   Next j
  For i = 1 To n2 - 1
  For j = 1 To i
    Print #1, sDun(i, j); "  ";
  Next j
  Print #1,
  Next i
D4b:
' --------------------------- '
     If fValue_a < f1_a Then GoTo D4
'mean a_values sorting  '
     For i = 1 To n1 - 1
     For j = i + 1 To n1
     If hEikin_a(i) > hEikin_a(j) Then GoTo SORT
     wOrk = hEikin_a(i): hEikin_a(i) = hEikin_a(j): hEikin_a(j) = wOrk
SORT:
     Next j
     Next i
     Print #1, "=== B ===  Sorted means ";
     For i = 1 To n1
      Print #1, Format(hEikin_a(i), "###.####"), "  ";
     Next i
     Print #1,
'Duncan a '
   For i = 1 To 4
    dun(i) = sM_a * dUncan(dF_gosa, i)
   Next i
   lSd_a = dun(1)
   tValue_a = lSd_a / (sM_a * 2 ^ (1 / 2))
   Print #1, "LSD=t*SM*Root2= ";
   Print #1, Format(tValue_a, "##.####");
   Print #1, "*";
   Print #1, Format(sM_a, "##.####");
   Print #1, "* 1.4142 = ";
   Print #1, Format(lSd_a, "##.####")
   For j = 1 To n1 - 1
   For i = 1 To n1 - j
     Print #1, j; "-"; n1 - i + 1; "; ";
     du = dun(n1 - i - j + 1)
     Print #1, "dun("; n1 - i - j + 2; ")= ", Format(du, "###.####");
     sA_a = hEikin_a(j) - hEikin_a(n1 - i + 1)
     Print #1, " SA= ", Format(sA_a, "###.####");
     If sA_a > du Then GoTo D2 Else GoTo D1
D2:
     Print #1, " *"
     sDun(n1 - i, j) = "* "
     GoTo D3
D1:
     Print #1, " NS"
     sDun(n1 - i, j) = "N"
D3:
   Next i
   Next j
  For i = 1 To n1 - 1
  For j = 1 To i
    Print #1, sDun(i, j); "  ";
  Next j
  Print #1,
  Next i
D4:
  GoTo TOBASU
' ====================== '
FILEFORSTUDENT:
  If p > 1 Then GoTo TOBU3
    Print #1, "jsDB[";
    Print #1, q;
    Print #1, "]='";
TOBU3:
   Print #1, "No ";
   Print #1, p;
   Print #1, "
"; For j = 1 To n1 For i = 1 To n2 Print #1, iSeito(j, i); Next i Print #1, "
"; Next j If p = 3 Then Print #1, " No Answer
'" GoTo TOBASU End If If p = 2 Then GoTo FDAKE End If Print #1, "総和", "   ", "総2乗和", "   ", "CF ;"; Print #1, sOwa, "   ", iWa2 + cF, "   ", Format(cF, "###.#######"), "
"; Print #1, "------- ANOVA Table ----
"; Print #1, "Factor", "   ", "DF ", "   ", "SS", "   ", "MS", "   ", "F
"; Print #1, "Total ", "   ", dF_total, "   ", Format(iWa2, "###.###"), "
"; Print #1, "Shori_a ", "    ", dF_b, "   ", Format(sS_b, "###.####"), "   ", Format(mS_b, "###.####"), "   ", Format(fValue_b, "###.####"), "
"; Print #1, "Shori_b ", "    ", dF_a, "   ", Format(sS_a, "###.####"), "   ", Format(mS_a, "###.####"), "   ", Format(fValue_a, "###.####"), "
"; Print #1, "Error ", "   ", dF_gosa, "   ", Format(sS_gosa, "###.####"), "   ", Format(mS_gosa, "###.####"), "
"; GoTo TOBASU FDAKE: Print #1, "F値 a, b "; Print #1, Format(fValue_b, "##.####"), Format(fValue_a, "##.####"); Print #1, "
"; TOBASU: Next p q = q + 1 Next m Close #1 Form1.Print Form1.Print "OK" End Sub