相関と回帰分析と順位相関
9.相関と回帰分析
100 rem Soukan
110 dim x(50),y(50)
120 n = 10 : xo = 0 : yo = 0
130 for i = 1 to n
140 read x(i)
150 xo = xo+x(i)
160 next i
170 for i = 1 to n
180 read y(i)
190 yo = yo+y(i)
200 next i
210 x1 = xo/n:rem Heikin
220 y1 = yo/n:rem Heikin
230 q = 0 : s = 0 : t = 0
240 print "X Y"
250 for i = 1 to n
260 print x(i),y(i)
270 q = q+(x(i)-x1)*(y(i)-y1):rem Bunshi
280 s = s+(x(i)-x1)*(x(i)-x1)
290 t = t+(y(i)-y1)*(y(i)-y1)
300 next i
310 r = q/sqr(s*t)
320 print "Soukan Keisuu= ",r
330 rem Kaiki y=a*x+b
340 sy = 0 : sx = 0 : sxy = 0 : sx2 = 0
350 for j = 1 to n
360 sy = sy+y(j)
370 sx = sx+x(j)
380 sx2 = sx2+x(j)*x(j)
390 sxy = sxy+x(j)*y(j)
400 next j
410 b = (sy*sx2-sx*sxy)/(n*sx2-sx*sx)
420 a = (n*sxy-sx*sy)/(n*sx2-sx*sx)
430 print "y=a*x+b a=";a,"b=";b
440 end
450 rem mogi data
460 data 5,6,2,8,10,9,3,7,3,8
470 data 3,4,1,4,5,6,2,4,1,3
解説)
相関と回帰分析(直線回帰)の係数を求めるプログラムです。
10行目のdimで行列を定義しています。x,yとも50個までとしていますが、
幾らでも増やせます。
xを先に全部読んで、次にyを読むようにしています。
10.順位相関
100 rem spir-man(-1<=r<=1)
110 dim t1(100),t2(100)
120 w = 0 : n = 5
130 for i = 1 to n
140 read t1(i),t2(i)
150 next i
151 print "t1 t2"
160 for i = 1 to n
170 w = w+t1(i)*t2(i)
172 print t1(i),t2(i)
180 next i
190 r = 3*(4*w-n*(n+1)*(n+1))/n/(n*n-1)
200 print "W=";w
210 print "Jun-i Soukan R=";r
220 end
230 rem mogi data
240 data 5,4
250 data 3,3
260 data 2,1
270 data 4,5
280 data 1,2
解説)
スピルマンの順位相関です。120行目でデータ数nを5にしています。
データ数を増やしたい時は、この値を変えて下さい。
上と違いx,yを一組ずつ読むようにしてあります。
文法的には、特に説明することはないかと思います。remを書くのにマルチステート
メント(:rem)にしているところがちょっと違う使い方か、と言った程度です。