2017-09-09 9 views
0

두 데이터 집합이 있고이 두 데이터 집합에서 계열의 상관 관계를 추정해야합니다. 예를 들어 길이가 189 인 시리즈와 다른 시리즈는 길이가 192입니다.이 시리즈의 종점은 동일한 기간 (즉, 2015 년 12 월)에 응답합니다.이 시리즈의 시작점에 차이가 있습니다. 마지막 지점부터 시작하여 두 시리즈의 12 데이터 블록 블록에 대한 상관 관계를 추정해야합니다. 예를 들어 첫 번째 블록은 2015 년 1 월부터 2015 년 12 월까지, 두 번째 블록은 2014 년 1 월에서 2014 년 12 월까지입니다. 마지막 블록의 데이터 길이가 동일하지 않으므로 데이터 길이를 균등하게 유지할 수 있고 마지막 블록의 크기를 줄일 수 있습니다 12 개월 이상. 예를 들어, 마지막 블록의 길이는 9 개월입니다. 루프를 생성하고 실행하는 방법? 나는 다음을 시도했다. 이것은 저에게 결과를 주지만 모든 루프 실행에 대해 동일한 상관 관계 값을 얻고 있습니다. 어디서 잘못 될지 모르겠다.2 개의 시계열에서 동일하지 않은 크기의 데이터 블록 간의 상관 관계 실행

correl=data.frame(x=numeric(0)) 
r=nrow(US) 
s=nrow(Argentina) 

a=ifelse(r<s,r,s) 

for (i in 1:(a%/%12)) { 
    if(i<a%/%12){ 
    elmnt1= US[r-11:r,]$IIP 
    elmnt2= Argentina[s-11:s,]$IIP 
    } else { 
    elmnt1= US[1:r%%12,]$IIP 
    elmnt2=Argentina[1:s%%12,]$IIP 
    } 
    corr=cor(elmnt1, elmnt2) 
    correl$x[i,]=corr 
    r=r-12 
    s=s-12 
} 
+0

재현 가능한 예를 제공해주십시오. 미국과 아르헨티나 데이터 프레임을 공유하십시오. – www

답변

0

for 루프 솔루션을 만들 필요가 없습니다. 관찰 길이가 일치하지 않는 것은 연구에서 발생하는 공통적 인 문제이며이를 처리하기 위해 상관 함수에 내장 된 응답이 있습니다. 당신의 길이가 서로 다른 동일한 데이터 프레임에서 두 변수가있는 경우, 여기에 몇 가지 옵션이 있습니다 : 당신의 x와 y만큼

#Use cor.test(), which automatically matches lengths (i.e. excludes NAs): 
cor.test(x,y) 

#Or add the following argument to the cor() function for the same purpose: 
cor(x,y,use='complete.obs') 

같은 테이블에 있으며, 아마이 경우 날짜가 일치 ,이 옵션은 문제를 해결해야합니다.

+0

@AKR - 아직도 답을 구하고 있습니까? 아니면 해결 되었습니까? 이 답변이 도움이 되었다면 커뮤니티가 해결되었음을 알리고 다른 사람들이 자신의 답변을 더 빨리 찾을 수 있도록 도와주는 해결책으로 선택하십시오. – www