2011-04-07 1 views
3

새로운 Mathematica 통계 및 데이터 분석 기능으로 점점 더 많은 작업을 시작했습니다.Mathematica에서 PDF, CDF, FindDistributionParameters 등의 기능을 확장 할 수 있습니까?

화요일 (위대한 발표 자료, 나는 그것을 강력히 추천한다) "Statistics & Mathematica를 이용한 데이터 분석"온라인 세미나에 참석했지만,이 포럼에있는 누군가가 고려해야 할 몇 가지 문제를 생각해 냈다. .

필자는 데이터 분석을 간소화하기 위해 광범위한 노트북을 만들었는데,이를 "AnalysisNotebook"이라고합니다. 그것은 포함 차트와 데이터의 광범위한 일련의 출력 : 등 꼬리에 맞게, 가설 테스트 데이터를, 연구 히스토그램, PDFCDF 플롯, QQ 플롯, 플롯이 큰만큼 내가 티카의와 함께 머물로 작동

오프 - -shelf 배포판을 사용하고 있으며, 단순한 MixtureDistribution 및 심지어 ParameterMixtureDistribution의 경우에도 잘 작동 할 수 있습니다. Mathematica가 모발을 분쇄하여 모멘트와 PDFCDF, FindDistributionParameters 등을 파악할 수 있습니다.

은 내가 정의하고 사용하려고 할 때 문제로 실행도 간단한 TransformedDistribution 즉,

LogNormalNormalDistribution[Gamma_, Sigma_, Delta_] := 
    TransformedDistribution[ u*v + Delta, 
    {Distributed[ u, LogNormalDistribution[ Log[Gamma], Sigma] ], 
    Distributed[ v, NormalDistribution[0, Sqrt[2]]} 
    ]; 

나는 그런 형질 전환 분포의 라인을 따라 많은 일을하고 싶습니다. 이 선물과 같은 도전에 감사드립니다 (이 포럼에서 배운 것들 중 일부는 고맙습니다. 모두 감사합니다) :

  • 폐쇄 형이 아닐 수도 있습니다.
  • PDFCDF 계산에는 보간법, 해결 방법 또는 사용자 지정 접근법이 필요할 수 있습니다.
  • FindDistributionParametersDistributionFitTest은 이런 종류의 문제를 처리하는 방법을 알지 못합니다.

기본적으로 사용하기를 원하는 표준적인 것들은 실제로 작동하지 않거나 작동하지 않을 수 있으며, 그렇게하기를 기대할 수 없습니다.

이러한 종류의 작업을 수행 할 수있는 사용자 지정 코드를 작성할 수 있지만 (이 포럼은 많은 도움이되었습니다.) 모든 사용자 지정 대안의 복잡성을 AnalysisNotebook에 통합하면 바보처럼 보입니다. AnalysisNotebook은 새로운 커스텀 함수마다 커질 것입니다. 내가 PDF, CDF, FindDistributionParameters, DistributionFitTest의 내 사용자 정의 버전을 쓸 수와 다른 것을 내가 버전에 내장 된 더 일반적인 단순히 완벽하게 부를 것이다 표준해야 할 수 있습니다

은 이러한 노력에 대단히 나에게 도움이 될 것이다. 이렇게하면 내 AnalysisNotebook과 같은 것이 도구 상자의 표준 구성 요소 인 단순하고 깔끔하게 유지 될 수 있습니다. 당신이 내 뜻을 취하면, 배관 작업보다는 수학 연습에 시간을 할애 할 수 있습니다.

다른 것을하기위한 함수의 버전을 정의 할 수있는 방법 (다른 수의 인수 또는 다른 종류의 상황 인식 사용)과 비슷한 방식으로 Mathematica는 사용하는 함수에 대해 비슷한 작업을 수행해야합니다 배포판을 인수로 사용하여 특정 기본 제공 배포에 사용할 솔루션을 파악합니다.PDF[], CDF[], FindDistributionParameters[], DistributionFitTest[] 및 관련 기능을 해당 수준에서 추가하거나 확장 할 수있는 기능이 필요합니다. 사용자 지정 배포판 및 내장 지원 기능이 원활하게 호출 할 수있는 필수 지원 코드 기능을 추가 할 수 있어야합니다.

아마 꿈 일 수도 있지만 어떤 식 으로든 내가이 문제에 접근 할 수있는 방법을 알고 있다면, 귀하의 의견에 진심으로 감사드립니다.

편집 - 내가 만난 문제의 종류 :

다음 코드가 완료 결코 실행

r1 = RandomVariate[LogNormalNormalDistribution[0.01, 0.4, 0.0003], 1000]; 
FindDistributionParameters[r1, LogNormalNormalDistribution[gamma, sigma, delta]] 

는이 문제를 해결하려면 나는 다음과 같은 기능을 쓴

myLNNFit[data_] := Module[{costFunction, moments}, 
    moments = Moment[EmpiricalDistribution[data], #] & /@ Range[5]; 
    costFunction[gamma_, sigma_, delta_] = 
    [email protected][((Moment[LogNormalNormalDistribution[gamma, sigma, delta],#]&/@Range[5]) - moments)^2]; 
    NMinimize[{costFunction[gamma, sigma, delta], gamma > 0, sigma > 0}, {gamma, sigma, delta}] ] 

이것은 그 자체로는 잘 작동하지만 다른 모든 것들은 잘 처리하지 못합니다.

+0

'TransformedDistribution'을 사용할 때 어떤 종류의 문제가 발생합니까? (나는 이전의 질문을 발견했다. 간단한 요약으로 그들을 참조 할 수있다.) 또한,'\ [감마]와 같은 노트에 사용 된 모든 특수 기호가 내가 작성한대로 나타나기 때문에 읽기 쉽도록 만든다. 게시물을 올리기 직전에 복사 된 코드에서 마크 업을 제거 할 수 있습니다. – rcollyer

+0

코드 정리에 감사드립니다. 내가 만난 문제의 종류는 무작위로 다양성을 생성하는 것이 좋습니다 : r1 = RandomVariate [LogNormalNormalDistribution [0.01, 0.4, 0.0003], 1000];ListLinePlot [%, PlotRange -> All] FindDistributionParameters [r1, LogNormalNormalDistribution [감마, 시그마, 델타]를 시도하면 코드 실행이 완료되지 않습니다. – Jagra

+0

계속 ...이렇게하려면 다음과 같이 작성했습니다. (약간의 도움으로) myLNNFit [data_] : = Module [{costFunction, moments}, moments = 순간 [EmpiricalDistribution [data], #] 및/@ Range [5]; costFunction [gamma_, sigma_, delta_] = Sqrt @ Total [((LogNormalNormalDistribution [감마, 시그마, 델타], #] 및/@ Range [5]) - 순간)^2]; NMinimize [0, 시그마> 0}, {gamma, sigma, delta}] {{costFunction [감마, 시그마, 델타, 감마] ]이 작업 자체는 정상적으로 작동하지만 그 밖의 모든 작업에는 적합하지 않습니다. – Jagra

답변

8

TagSet을 사용하여 정의를 연결할 기호를 지정할 수 있습니다. 이렇게하면 PDFProtected인데도 PDF의 분포를 정의 할 수 있습니다. 여기에 사소한 예가 있습니다. TriangleWave은 내장 기호이며 TriangleDistribution은 방금 만든 것입니다. 이것은 실패

PDF[TriangleDistribution[x_]] := TriangleWave[x] 

이 작동 :

이제
TriangleDistribution /: PDF[TriangleDistribution[x_]] := TriangleWave[x] 

당신은 할 수 있습니다 :

Plot[PDF[TriangleDistribution[x]], {x, 0, 1}] 
+0

이것은 매우 흥미롭고 유용하며 내가 필요한 모든 것을 제공 할 수 있습니다. 나는 이것을 시도 할 수있는 기회를 얻 자마자 대답으로 인식하게 될 것입니다. 감사! – Jagra

3

친애하는 Jarga을 티카 설명서의 다음 tutorial 당신을위한 난수 생성을 가능하게 할 지금 설명 배포판에 대해서는이 문서의 맨 아래에있는 '배포 생성기 정의'섹션을 참조하십시오.

Joe가 제안한 것과 매우 유사합니다.

In[1]:= Random`DistributionVector[ 
    LogNormalNormalDistribution[gamma_, sigma_, delta_], len_, prec_] ^:= 
    RandomVariate[LogNormalDistribution[Log[gamma], sigma], len, 
    WorkingPrecision -> prec]* 
    RandomVariate[NormalDistribution[0, Sqrt[2]], len, 
    WorkingPrecision -> prec] + delta 

In[2]:= RandomVariate[ 
LogNormalNormalDistribution[0.01, 0.4, 0.0003], 5] 

Out[2]= {-0.0013684, 0.00400979, 0.00960139, 0.00524952, 0.012049} 

견적 프레임 워크에 새로운 배포판을 삽입하는 방법에 대해 알고 있지 않습니다. 가설 테스트는 CDF가 배포 용으로 정의되어 있고 올바르게 작동하면 작동해야합니다.