2016-07-19 17 views
0

안녕하십니까. 여기에 내 문제는 다음과 같습니다피어슨 두 열 사이의 상관 관계

104 0.1697 12.3513214 15.9136214 
112 -0.3146 12.0517303 14.8027303 
122 0.2718 10.881109 13.259109 
123 -0.4185 11.2880142 14.0237142 
128 0.0205 13.0585763 15.4365763 
132 0.1562 13.3956582 16.9579582 
136 -0.4602 12.2567041 14.6347041 
157 0.8142 13.6455927 17.2078927 
158 -0.9244 8.0012967 11.5635967 

약 10000 파일, 여러 행과 각 파일 : 나는 아래와 같은 몇 가지 파일이 있습니다. 그리고 각 파일에 대해 열 2와 열 4 사이의 피어슨 상관 관계를 만들어야합니다. 나중에이 상관 관계의 평균을 만들어야합니다. 그리고 저는 리눅스 명령으로 모든 것을하고 싶습니다. 아무도 도와 줄 수 없니? 감사합니다.

+0

두 값 사이의 '피어슨 상관 관계'가 어떻게 수행되는지 알려면주의하십시오. – Inian

+0

음,이 사이트에 간단한 예제가있다 .. 관심을 가져 주셔서 감사합니다 : http://www.stat.wmich.edu/s216/book/node122.html –

답변

0

이 스크립트를 사용해보세요. bash와 bc가 필요합니다 (부동 소수점 숫자로 작동).

  • 주고 액세스 모든 파일 매개 변수없이 bash /path/to/pearson.sh
  • 전화 스크립트를 저장되는 디렉토리에 chmod +x /path/to/pearson.sh
  • 변경 파일을 실행합니다.

이 파일의 데이터에 대해 계산 된 모든 피어슨 상관 계수의 평균을 산출해야합니다.

#! /bin/bash 

FILES=/path/to/files/ 

function add { 
    echo $1 + $2 | bc 
} 
function sub { 
    echo $1 - $2 | bc 
} 
function mult { 
    echo $1*$2 | bc 
} 
function div { 
    echo $1/$2 | bc -l 
} 
function sqrt { 
    echo "sqrt ($1)" | bc -l 
} 

X=0 
X2=0 
Y=0 
Y2=0 
XY=0 

r=0 
R=0 
N=0 

for f in $FILES/*; do 
    N=$((N+1)) 
    n=0 
    while read l; do 
    n=$((n+1)) 
    read -r -a rows <<< $l 
    x=${rows[1]} 
    y=${rows[3]} 
    X=$(add $X $x) 
    X2=$(add $X2 $(mult $x $x)) 
    Y=$(add $Y $y) 
    Y2=$(add $Y2 $(mult $y $y)) 
    XY=$(add $XY $(mult $x $y)) 
    done < $f; 
    r=$(add $r $XY) 
    r=$(sub $r $(div $(mult $X $Y) $n)) 
    d1=$(sub $X2 $(div $(mult $X $X) $n)) 
    d2=$(sub $Y2 $(div $(mult $Y $Y) $n)) 
    r=$(div $r $(sqrt $(mult $d1 $d2))) 
    R=$(add $R $r) 
    X=0 
    X2=0 
    Y=0 
    Y2=0 
    XY=0 
    r=0 
    n=0 
done 

echo Mean=$(div $R $N) 

Ps : 모든 파일의 형식이 사용자가 제시 한 형식과 같다고 가정했습니다. 계수를 계산하는 공식은 사용자가 입력 한 link에서 가져 왔습니다.

+0

감사합니다, 그것의 작업 .. =) , 당신의 도움과 지원에 감사드립니다. –