--- プログラム ---

BEGIN{  #1
print "data:"
print "number,value1,value2"
print ""
print "sample1"
loadfile("./data/dt01.txt")
print "soukankeisuu="
print soukankeisuu()
print ""
print "sample2"
loadfile("./data/dt02.txt")
print "soukankeisuu="
print soukankeisuu()
print ""
print "sample3"
loadfile("./data/dt03.txt")
print "soukankeisuu="
print soukankeisuu()
print ""
print "sample4"
loadfile("./data/dt04.txt")
print "soukankeisuu="
print soukankeisuu()
print ""
}  #1

function heikin(an)
{  #1
x=0
for(i=1;i<=rn;i++)
{  #2
x=x+arr[i,an]
}  #2
ans=x/rn
return ans
}  #1

function hensasekiwa()
{  #1
hk1=heikin(1)
hk2=heikin(2)
x=0
for(i=1;i<=rn;i++)
{  #2
x=x+(arr[i,1]-hk1)*(arr[i,2]-hk2)
}  #2
ans=x
return ans
}  #1

function hensaheihouwa(an)
{  #1
hk=heikin(an)
x=0
for(i=1;i<=rn;i++)
{  #2
x=x+(arr[i,an]-hk)^2
}  #2
ans=x
return ans
}  #1

function soukankeisuu()
{  #1
ans=hensasekiwa()/(sqrt(hensaheihouwa(1))*sqrt(hensaheihouwa(2)))
return ans
}  #1

function loadfile(fn)
{  #1
rn=1
while(getline < fn > 0)
{  #2
split($0,arr2,",")
for(j=0;j<=2;j++)
{  #3
arr[rn,j]=arr2[j+1]
}  #3
rn++
}  #2
rn--
close(fn)

for(i=1;i<=rn;i++)
{  #2
for(j=0;j<2;j++)
{  #3
printf arr[i,j] ","
}  #3
print arr[i,2]
}  #2
}  #1


--- 実行結果 ---

data:
number,value1,value2

sample1
1,88,6
2,92,8
3,65,6
4,83,8
5,58,6
6,98,9
7,77,8
8,71,6
9,63,6
soukankeisuu=
0.752915

sample2
1,10,1
2,20,2
3,30,3
4,40,4
5,50,5
6,60,6
7,70,7
8,80,8
9,90,9
soukankeisuu=
1

sample3
1,10,9
2,20,8
3,30,7
4,40,6
5,50,5
6,60,4
7,70,3
8,80,2
9,90,1
soukankeisuu=
-1

sample4
1,10,9
2,20,8
3,30,7
4,40,6
5,50,5
6,60,6
7,70,7
8,80,8
9,90,9
soukankeisuu=
0



++ MEMO ++


相関係数は2つのデータ間の線形関係の強さを調べるのに用いられる。
-1〜+1の範囲の値をとる。
1に近いほど正の相関(データ1↑・データ2↑)、-1に近いほど負の相関(データ1↑・データ2↓)がある、という。



戻る