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 = 360 TabIndex = 2 Text = "4.ブロック化していない一元配置の分散分析" Top = 480 Width = 3735 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() '分散分析,ブロック化していない一元配置.反復数が異なる.0入力は学生,それ以外は教師用ファイル作成' Dim bango As Integer bango = Val(Text1.Text) CommonDialog1.ShowSave Open CommonDialog1.FileName For Output As #1 Dim dUncan(15 To 30, 1 To 4) As Single Dim hEikin(5) As Single Dim dun(1 To 5) As Single Dim iSeito(1 To 5, 1 To 7) As Integer Dim iWa(5) As Integer Dim sDun(6, 6) As String Dim f1, f2, tValue, lSd, sA, du, sM, k, cF, hEihowa1, sS_shori, sS_gosa, mS_shori, mS_gosa, fValue, wOrk As Single Dim yr, d, sOwa, iWa2, i, j, n1, n2, m, p, q, dF_total, dF_shori, dF_gosa As Integer q = 0 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 + 14) 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 = 7
If n1 = 5 Then n2 = 7
dF_total = n1 * n2 - 1
dF_shori = n1 - 1
dF_gosa = n1 * n2 - n1
f1 = 1.004 + 2.001 / dF_gosa + 41.79 / (dF_gosa ^ 2) + 2.318 / dF_shori - 0.957 / (dF_shori ^ 2) - 1.659 / (dF_shori * dF_gosa) + 2.395 / dF_gosa ^ (1 / 2) + 1.241 / dF_shori ^ (1 / 2)
f2 = -0.231 - 35.08 / dF_gosa + 214.2 / (dF_gosa ^ 2) + 4.645 / dF_shori - 1.552 / (dF_shori ^ 2) + 11.97 / (dF_shori * dF_gosa) + 16.6 / dF_gosa ^ (1 / 2) + 1.932 / dF_shori ^ (1 / 2)
SEITO:
For j = 1 To n1
iWa(j) = 0
Next j
sOwa = 0
iWa2 = 0
sS_shori = 0
For j = 1 To n1
For i = 1 To n2
If n1 <> 3 And j = 2 Then k = 0 Else k = 2
If n1 = 3 Then k = 2
iSeito(j, i) = 10 + Rnd * 10 + k * j 'データ作成'
Next i
Next j
For j = 1 To n1
For i = 1 To n2
iWa(j) = iWa(j) + 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(j) = iWa(i + j) Then GoTo SEITO
Next i
Next j
For j = 1 To n1
hEikin(j) = iWa(j) / n2
sS_shori = sS_shori + iWa(j) ^ 2
Next j
cF = sOwa ^ 2 / (n1 * n2)
iWa2 = iWa2 - cF
sS_shori = sS_shori / n2 - cF
sS_gosa = iWa2 - sS_shori
mS_shori = sS_shori / dF_shori
mS_gosa = sS_gosa / dF_gosa
fValue = mS_shori / mS_gosa
sM = (mS_gosa / n2) ^ (1 / 2)
' Form1.Print m, p, n1, cF, fValue '
If Val(Len(cF)) < 10 Then GoTo SEITO
'n1=5は**'
If n1 = 5 And fValue < (f2 + 0.05) Then GoTo SEITO
'n1=4は**'
If n1 = 4 And fValue < (f2 + 0.05) Then GoTo SEITO
'n1=3は*'
If n1 = 3 And (fValue > (f2 - 0.05) Or fValue < (f1 + 0.05)) Then GoTo SEITO
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, "平均値; ";
For j = 1 To n1
Print #1, Format(hEikin(j), "###.####"), " ";
Next j
Print #1,
Print #1, "総和 総2乗和 補正項 処理平均の標準偏差 ; ";
Print #1, sOwa, iWa2 + cF, Format(cF, "###.######"), Format(sM, "###.####")
Print #1, "Factor DF SS MS F-value (5%, 1%) "
Print #1, "Total ", dF_total, Format(iWa2, "000.000"); ""
Print #1, "Shori ", dF_shori, Format(sS_shori, "000.000"), Format(mS_shori, "000.000"), Format(fValue, "000.000"), Format(f1, "000.000"), Format(f2, "000.000")
Print #1, "Error ", dF_gosa, Format(sS_gosa, "000.000"), Format(mS_gosa, "000.000")
'mean values sorting
For i = 1 To n1 - 1
For j = i + 1 To n1
If hEikin(i) > hEikin(j) Then GoTo SORT
wOrk = hEikin(i): hEikin(i) = hEikin(j): hEikin(j) = wOrk
SORT:
Next j
Next i
Print #1, "Sorted means ";
For i = 1 To n1
Print #1, Format(hEikin(i), "###.####"), " ";
Next i
Print #1,
'Duncan '
For i = 1 To 4
dun(i) = sM * dUncan(dF_gosa, i)
Next i
lSd = dun(1)
tValue = lSd / (sM * 2 ^ (1 / 2))
Print #1, "LSD=t*SM*Root2= ";
Print #1, Format(tValue, "##.####");
Print #1, "*";
Print #1, Format(sM, "##.####");
Print #1, "* 1.4142 = ";
Print #1, Format(lSd, "##.####")
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 = hEikin(j) - hEikin(n1 - i + 1)
Print #1, " SA= ", Format(sA, "###.####");
If sA > du Then GoTo D2 Else GoTo D1
D2:
Print #1, " *"
sDun(n1 - i, j) = "* "
GoTo D3
D1:
Print #1, " NS"
sDun(n1 - i, j) = "NS"
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
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 ", "  ", dF_shori, "  ", Format(sS_shori, "###.####"), "  ", Format(mS_shori, "###.####"), "  ", Format(fValue, "###.####"), "
";
Print #1, "Error ", "  ", dF_gosa, "  ", Format(sS_gosa, "###.####"), "  ", Format(mS_gosa, "###.####"), "
";
'mean values sorting
For i = 1 To n1 - 1
For j = i + 1 To n1
If hEikin(i) > hEikin(j) Then GoTo SORT2
wOrk = hEikin(i): hEikin(i) = hEikin(j): hEikin(j) = wOrk
SORT2:
Next j
Next i
'Duncan '
For i = 1 To 4
dun(i) = sM * dUncan(dF_gosa, i)
Next i
For j = 1 To n1 - 1
For i = 1 To n1 - j
du = dun(n1 - i - j + 1)
sA = hEikin(j) - hEikin(n1 - i + 1)
If sA > du Then GoTo D22 Else GoTo D12
D22:
sDun(n1 - i, j) = "* "
GoTo D32
D12:
sDun(n1 - i, j) = "N"
D32:
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
GoTo TOBASU
FDAKE:
Print #1, "F値 ";
Print #1, Format(fValue, "##.####");
Print #1, "
";
TOBASU:
Next p
q = q + 1
Next m
Close #1
Form1.Print
Form1.Print "OK"
End Sub