Mathematica에서 시계열 데이터의 지역 최소 점과 최대 점을 확인하는 방법이 필요합니다. 이것은 쉬운 일이되어야하는 것처럼 보이지만 까다로워집니다. 나는 이것을 MathForum에 올렸지 만, 여기에 좀 더 눈을 뜰 수도 있다고 생각했습니다.Mathematica를 사용하여 시계열에서 중요한 최소 점과 최대 점을 확인하십시오.
당신의 문제에 대해 설명 종이 찾을 수 있습니다 내가 지금까지 시도했습니다 http://www.cs.cmu.edu/~eugene/research/full/compress-series.pdf
을 ...
가져 오기 및 일부 데이터 형식 :data = FinancialData["SPY", {"May 1, 2006", "Jan. 21, 2011"}][[All, 2]];
data = data/[email protected];
data = Transpose[{Range[[email protected]], data}];
2 개 함수를 정의 :
를첫 번째 방법 :
이제 또 다른 방법 (210), 유연하지 않지만 각 기능이 무엇에
findMinimaMaxima2[data_] := data[[[email protected](Length[#] & /@ Split[Prepend[Sign[[email protected][[All, 2]] - M[email protected][[All, 2]]], 0]])]]
봐. 우선 findMinimaMaxima2 []는 :
minmax = findMinimaMaxima2[data];
{[email protected], [email protected]}
[email protected]
이는 약 49 %의 데이터 압축에 (이 경우에) 모든 최소값 및 최대 값과 결과를 선택하지만, 창을 확장하는 유연성이 없다. 이 다른 방법이 있습니다.
minmax2 = findMinimaMaxima[data, 2];
{[email protected], [email protected]}
[email protected]
그러나 우리는 (60)에 창을 확장 할 때 어떻게되는지 살펴 : 2의 창 적은 틀림없이 더 중요한 극값 산출
minmax2 = findMinimaMaxima[data, 60];
ListLinePlot[{data, minmax2}]
더 이상 대체 최소값과 최대 값의 일부. [] findMinimaMaxima의 출력에 findMinimaMaxima2 [] 적용 은 ...
minmax3 = findMinimaMaxima2[minmax2];
ListLinePlot[{data, minmax2, minmax3}]
을 해결 방법을 제공하지만,이 문제를 해결하기 위해 서투른 방법처럼 보인다.
따라서 고정 된 창을 사용하여 왼쪽 및 오른쪽으로 보는 아이디어는 모든 것을 원하는대로하지 않습니다. 필자는 다음 최소값 또는 최대 값을 설정하기 위해 함수가 충족 시키거나 초과해야하는 범위 값 R (예 : 퍼센트 이동 위 또는 아래)을 사용할 수있는 대안을 생각하기 시작했습니다. 여기 내 첫 번째 시도이다 :
findMinimaMaxima3[data_, R_] := Module[{d, n, positions},
d = data[[All, 2]];
n = Transpose[{data[[All, 1]], [email protected][If[(#2 <= #1 + #1*R && #2 >= #1) || (#2 >= #1 - #1* R && #2 <= #1), #1, #2] &, d[[1]], d]}];
n = Sign[[email protected][[All, 2]] - [email protected][[All, 2]]];
positions = [email protected][Most[Position[n, Except[0]]]];
data[[positions]]
]
minmax4 = findMinimaMaxima3[data, 0.1];
ListLinePlot[{data, minmax4}]
이 너무과 사후 처리에서 혜택 findMinimaMaxima2 []
ListLinePlot[{data, findMinimaMaxima2[minmax4]}]
그러나 당신이 자세히 보면, 당신은 그들이 R 값을 넘어 가면이 극단이 골대를 벗어났습니다 볼 차트의 절대 최소값과 최대 값을 비롯하여 큰 위아래로 움직이는 여러 위치가 있습니다. R 값을 변경하면 더욱 상단과 바닥이 골대를 벗어났습니다 방법을 보여줍니다
minmax4 = findMinimaMaxima3[data, 0.15];
ListLinePlot[{data, minmax4}]
그래서, 나는 다시 생각해야합니다. 누구든지 데이터 플롯을보고 중요한 최소 및 최대 값을 쉽게 식별 할 수 있습니다. 그것을하기위한 알고리즘을 얻는 것이 더 어려워 보입니다. 창 및/또는 R 값은 솔루션에 중요하게 보이지만 어느 것도 독자적으로는 충분하지 않습니다 (적어도 위의 방법은 아님).
중요한 미니 마 및 최대를 식별하는 방법을 제시하거나 대안을 제안 할 수 있습니까?
이 코드와 토론이 모두 포함 된 노트북을 전달해 주시기 바랍니다. 아무도 필요 없다면 알려주세요.
내가 반복적 인 방법을 사용하는 것이 좋습니다 Jagra
maxima와 minima의 교체 기준이 가격 변동에 항상 중요한 것은 아닙니다. 여기처럼 http://i.imgur.com/nsIK7.png –
StackOverflow를 환영하고 우리가 일반적으로 여기에서하는 세 가지 사항을 생각 나게 해주십시오 : 1) 도움을 받으면 답변을 주겠다. 귀하의 전문 분야에서 2) ['FAQs'를 읽으십시오.] (http://tinyurl.com/2vycnvr) 3) 좋은 Q & A를 볼 때 [회색 삼각형을 사용하여] 투표하십시오 (http : // i .imgur.com/kygEP.png) 시스템의 신뢰성은 사용자가 자신의 지식을 공유함으로써 얻을 수있는 평판을 기반으로합니다. 또한 문제가있는 경우 문제를 해결하는 대답을 수락하는 것을 잊지 마십시오. [checkmark 기호를 누르십시오] (http://i.imgur.com/uqJeW.png) –