Sub corrcoef1(n As Long, x As *Single, y As *Single) Dim i As Long Dim sx As Single, sy As Single, sxx As Single, syy As Single, sxy As Single Dim dx As Single, dy As Single
For i=0 To n-1 sx = sx + x[i]: sy = sy + y[i] Next
sx = sx / n: sy = sy / n
For i = 0 To n-1 dx = x[i] - sx: dy = y[i] - sy sxx = sxx + dx * dx: syy = syy + dy * dy: sxy = sxy + dx * dy Next sxx = Sqr(sxx / (n - 1)) syy = Sqr(syy / (n - 1)) sxy = sxy / (n - 1) * sxx * syy
Print "標準偏差";sxx;syy, "相関係数";sxy End Sub
Sub corrcoef2(n As Long, x As *Single, y As *Single) Dim i As Long Dim sx As Single, sy As Single, sxx As Single, syy As Single, sxy As Single
For i=0 To n-1 sx += sx +x[i]: sy += sy +y[i] sxx += sxx +x[i] * x[i] syy += syy +y[i] * y[i] sxy += sxy +x[i] * y[i] Next
sx = sx /n: sxx = (sxx - n * sx * sx) / (n - 1) sy = sy /n: syy = (syy - n * sy * sy) / (n - 1) If (sxx > 0) Then sxx = Sqr(sxx) Else sxx = 0 If (syy > 0) Then syy = Sqr(syy) Else syy = 0 sxy = (sxy - n * sx * sy) / ((n - 1) * sxx * syy) Print "標準偏差";sxx;syy, "相関係数";sxy End Sub
Sub corrcoef3(n As Long, x As *Single, y As *Single) Dim i As Long Dim sx As Single, sy As Single, sxx As Single, syy As Single, sxy As Single Dim dx As Single, dy As Single
For i=0 To n-1 dx = x[i] - sx: sx = sx + dx / (i + 1) dy = y[i] - sy: sy = sy + dy / (i + 1) sxx = sxx +i * dx * dx / (i + 1) syy = syy +i * dy * dy / (i + 1) sxy = sxy +i * dx * dy / (i + 1) Next
sxx = Sqr(sxx / (n - 1)) syy = Sqr(syy / (n - 1)) sxy = sxy / (n - 1) * sxx * syy Print "標準偏差";sxx;syy, "相関係数";sxy End Sub
Const NMAX = 1000
main() Sub main() Dim s As String Dim n As Long Dim t As Single, u As Single
Dim x[NMAX] As Single, y[NMAX] As Single
n = 0 While (1) If getnum(t) = 0 Then Exit While If getnum(u) = 0 Then Exit While
If (n >= NMAX) Then Print("多すぎます") Exit Sub End If x[n] = t: y[n] = u: n=n+1 Wend Print "データの件数";n corrcoef1(n, x, y) corrcoef2(n, x, y) corrcoef3(n, x, y) End Sub
Function getnum(ByRef f As Single) As Long Dim s As String
Input s If s = "end" Then Exit Function f = Val(s) getnum = 1 End Function