자기 상관의 무료 샘플


11

시간이 지남에 따라 동일한 간격으로 측정 된 일부 프로세스의 관측 값 을 나타내는 1 차원의 실제 값 벡터 x 를 고려하십시오 . 우리는 x시계열 이라고 부릅니다 .

하자 N 의 길이를 나타내는 XX 의 나타낸다 산술 평균 X를 . 샘플 자기 공분산 함수는 로 정의되며

자기 공분산

모든 -n < h < n에 대해 . 이것은 다른 시간에 관측 된 동일한 시리즈에서 두 점 사이의 선형 의존성을 측정합니다.

샘플의 자기 상관 함수 , 또는 ACF는,로서 정의된다

자기 상관

이것은 시간 t 에서 시리즈 x 의 선형 예측 가능성을 측정하며 , 우리는 값 x t + h 만 사용하여 x t를 나타냅니다 .

이 표본 추정치는 이론적 특성을 기반으로 한 순진 계산과 일치하지 않습니다. 즉, 샘플 자기 상관 함수는 xh- 스텝 지연으로 x피어슨 상관 계수 와 같지 않습니다 .

직무

배열 x 와 음이 아닌 정수 h가 주어지면, 지연 0부터 시작하여 x 의 첫 번째 h +1 지연 자기 상관을 인쇄하거나 반환 합니다. 지연 자동 상관은 위의 공식에서 음의 입력에 해당하는 것입니다.

0 < h < n 이라고 가정 할 수 있습니다 . 여기서 nx 길이이고 2 < n <256입니다.

출력은 1E-4 이내로 정확해야합니다. 내장 기능 사용 또는 실행 시간에 대한 제한은 없습니다.

h, x -> output
--------------
5, [2.4, 2.4, 2.4, 2.2, 2.1, 1.5, 2.3, 2.3, 2.5, 2] -> [1.00000000,  0.07659298, -0.06007802, -0.51144343, -0.02912874, -0.10468140]
1, [2134, 1863, 1877, 1877, 1492, 1249] -> [1.0000000, 0.3343041]
2, [13067.3, 13130.5, 13198.4] -> [1.0000000000, -0.0002854906, -0.4997145094]

답변:


4

젤리, 26 25 24 23 20 바이트

×L_SµḊ;0µƓС׹S€µF÷Ḣ

온라인으로 사용해보십시오!

작동 원리

×L_SµḊ;0µƓС׹S€µF÷Ḣ  Main link. Input: x (list) STDIN: h (integer)

×L                    Multiply all items in x by the length of x.
  _S                  Subtract the sum of x from all products.
                      Let's call the result X.
    µ                 Begin a new monadic chain. Argument: t (list)
     Ḋ                Remove the first element of t.
      ;0              Append a 0 to the result.
        µ             Push the previous chain and begin a new one.
                      Argument: X
         Ɠ            Read h from STDIN.
          С          Repeat the Ḋ;0 chain h times, collecting the h+1 intermediate
                      results in a list A.
            ×¹        Multiply the vectors in A by X.
              S€      Compute the sum of each vectorized product.
                µ     Begin a new, monadic chain. Argument: S (sums)
                 F    Flatten S. This does nothing except creating a deep copy.
                   Ḣ  Pop the first element of S.
                  ÷   Divide all elements of the copy by the first element.

6

R, 3 31 25 바이트

# changes the builtin to only return the acf
body(acf)=body(acf)[1:18]

사용법 (자기 상관이있는 배열을 반환)

(acf(c(2.4, 2.4, 2.4, 2.2, 2.1, 1.5, 2.3, 2.3, 2.5, 2),5))
# , , 1
#
#             [,1]
# [1,]  1.00000000
# [2,]  0.07659298
# [3,] -0.06007802
# [4,] -0.51144343
# [5,] -0.02912874
# [6,] -0.10468140

배경:

원래 acf내장을 기반으로 한 31 바이트 솔루션

function(n,h)c(acf(n,h,,F)$acf)

3 바이트 옵션 acf은 목록에 요소로 필요한 자기 상관을 반환하면서 플롯하고 (그리고 3 자리로 인쇄) 원래 내장되어 있습니다.

용법

 acf(c(2.4, 2.4, 2.4, 2.2, 2.1, 1.5, 2.3, 2.3, 2.5, 2),5)

산출:

#    Autocorrelations of series ‘c(2.4, 2.4, 2.4, 2.2, 2.1, 1.5, 2.3, 2.3, 2.5, 2)’, by lag
#
#     0      1      2      3      4      5 
# 1.000  0.077 -0.060 -0.511 -0.029 -0.105 

상관 관계를 소수점 이하 3 자리 이상으로 표시하려면 28 바이트가이를 수행합니다 (또는 플롯을 표시하지 않으려면 31).

# will still plot (28 bytes)
function(n,h)c(acf(n,h)$acf)
# won't plot (31 bytes)
function(n,h)c(acf(n,h,,F)$acf)

이것은 아마도 내가 본 것 중 가장 영리한 속임수 일 것입니다. 나는 그렇게 할 줄 몰랐다. 우리는이 달의 언어로 R을 선택하려고 노력하고 있습니다. 이 메타 답변 을 찬성 하여이를 실현할 수 있습니다.
JayCe

3

파이썬 3 147 130 126 120 바이트

def p(h,x):x=[t-sum(x)/len(x)for t in x];return[sum(s*t for s,t in zip(x[n:],x))/sum(b*b for b in x)for n in range(h+1)]

이 솔루션은 아마도 더 골프화 될 것입니다. 단지 시작일뿐입니다.

당신은 그것을 호출 할 수 있습니다 :

p(5,[2.4, 2.4, 2.4, 2.2, 2.1, 1.5, 2.3, 2.3, 2.5, 2])

2

MATL , 20 바이트

tYm-tPX+tX>/GnqiQ:+)

편집 (2016 년 5 월 20 일) : 언어 버전 18.0.0부터 Y+대신을 사용하십시오 X+. 링크에는이 변경 사항이 포함되어 있습니다.

온라인으로 사용해보십시오!

상관 관계는 컨볼 루션과 밀접한 관련이 있습니다. 우리는 평균을 빼서 정규화 한 다음, 좁히고, 최대 값으로 나누어 다시 정규화 한 다음 원하는 지연을 선택합니다.

tYm-       % implicit input. Duplicate and subtract mean
tPX+       % duplicate, flip, convolve
tX>/       % duplicate, divide by maximum value
Gnq        % length of array, n. Subtract 1
iQ:        % input number h. Generate vector [1,2,...,h+1]
+          % add to obtain vector [n,n+1,...,n+h]
)          % use that vector as an index. Implicitly display

1

Mathematica, 27 바이트

1 바이트를 절약 해 준 LegionMammal978에게 감사합니다.

함수 이름이 너무 길지 않으면 젤리를 이길 수 있습니다.

#2~CorrelationFunction~{#}&

테스트 사례

%[5,{2.4,2.4,2.4,2.2,2.1,1.5,2.3,2.3,2.5,2}]
(* {1.,0.076593,-0.060078,-0.511443,-0.0291287,-0.104681} *)

인터넷이 다운되기 전에 이것을 게시하려고했습니다 ...를 사용하여 바이트를 저장할 수 있습니다 #2~CorrelationFunction~{#}&.
LegionMammal978

1

옥타브, 47 37 바이트

@(h,x)xcov(x,'coeff')(numel(x)+(0:h))

@Rainer 익명 함수를 사용하여 몇 바이트를 절약 할 수 있습니다 (이 경우 disp함수 출력
Luis Mendo

@LuisMendo 당신이 맞아요. 를 세지 않고도 10 바이트를 절약했습니다 disp.
Rainer P.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.