경험적 데이터에서 임의의 다변량 값 생성


10

부분적으로 상관 관계가있는 수익으로 여러 자산을 평가하기 위해 Monte Carlo 함수를 작업 중입니다. 현재 공분산 행렬을 생성하고 rmvnorm()R 의 함수에 피드합니다 (상관 된 임의의 값 생성).

그러나 자산의 수익 분배를 보면 일반적으로 분배되지 않습니다.

이것은 실제로 두 부분으로 된 질문입니다.
1) 알려진 분포가없는 실제 데이터 일 때 PDF 또는 CDF를 어떻게 추정 할 수 있습니까?

2) rmvnorm과 같은 상관 값을 생성하지만이 알 수없는 (정규적이지 않은) 분포에 대해 어떻게 할 수 있습니까?

감사!


분포가 알려진 분포에 맞지 않는 것 같습니다. 파라 메트릭을 가정 한 다음 몬테카를로 추정에 사용하는 것이 매우 위험하다고 생각합니다.

내가 볼 수있는 일종의 부트 스트랩이나 "임시 몬테 카를로"방법이 없습니까?

답변:


2

(1) 시뮬레이션 된 시계열을 생성하는 데 필요한 CDF입니다. 그것을 구축하려면 먼저 가격 변경 / 반품을 히스토그램으로 표시하십시오. 가장 왼쪽에있는 빈부터 시작하여 누적 된 빈 인구 집단을 가져옵니다. 총 빈 모집단으로 나누어 새 기능을 정규화하십시오. 남은 것은 CDF입니다. 트릭을 수행하는 몇 가지 numpy 코드는 다음과 같습니다.

# Make a histogram of price changes

counts,bin_edges = np.histogram(deltas,numbins,normed=False) # numpy histogram

# Make a CDF of the price changes

n_counts,bin_edges2 = np.histogram(deltas,numbins,normed=True)
cdf = np.cumsum(n_counts)  # cdf not normalized, despite above
scale = 1.0/cdf[-1]
ncdf = scale * cdf

(2) 상관 된 픽을 생성하려면 copula를 사용하십시오. 상관 시계열 생성에 대한 이전 질문에 대한 이 답변 을 참조하십시오 .


4

첫 번째 질문과 관련하여 데이터 리샘플링을 고려할 수 있습니다. 데이터가 동시 적으로 상관되는 것이 아니라 시간이 지남에 따라 상관 된 경우 문제가있을 수 있으며,이 경우 블록 부트 스트랩과 같은 것이 필요합니다. 그러나 반환 데이터의 경우 간단한 부트 스트랩이 좋습니다.

두 번째 질문에 대한 답은 목표 분포에 크게 의존한다고 생각합니다.


3

첫 번째 질문에 대한 답은 모델을 작성한다는 것입니다. 귀하의 경우 이는 분포를 선택하고 모수를 추정하는 것을 의미합니다.

분포가 있으면 Gibbs 또는 Metropolis 알고리즘을 사용하여 분포를 샘플링 할 수 있습니다.

참고로,이 분포에서 표본 추출해야합니까? 일반적으로 관심은 분포의 일부 특성에 있습니다. 부트 스트랩을 통한 경험적 분포를 사용하여 추정하거나이 특성에 대한 모델을 다시 작성할 수 있습니다.


특정 자산에 대해 가능한 수익을 샘플링하는 데 관심이 있습니다. 분포가 정상적이지 않고 시간이 지남에 따라 자산이 상호 연관되므로 분배를 선택하는 데 어려움이 있습니다. 포트폴리오 최적화를위한 몬테 카를로 방법을 모색 중입니다.
노아

1
@Noah, GARCH와 같은 다양한 확률 변동성 모델을 고려 했습니까?
mpiktas

나는 GARCH 모델을 보았다. 그러나 GARCH는이 문제를 해결하지 못했습니다. 여러 시계열에서 상관 무작위 샘플을 생성하려고합니다. 랜덤 다변량 표준 샘플 작업이지만 수익률이 정규 분포이고이 경우에는 그렇지 않다는 가정이 필요합니다.
노아

1
@Noah, 다변량 GARCH는 어떻습니까? 각 개별 계열은 비대 각 공분산 행렬을 사용한 다변량 법선의 혁신을 통해 GARCH입니다. 그런 다음 수익률은 정규 분포를 가지지 않지만 상관 관계가 있습니다.
mpiktas

3

나는 또한 당신이 모델이 필요하다고 생각한다는 점에서 @mpiktas와 함께 있습니다.

여기에서 표준 방법은 다른 자산 사이의 의존성 구조를 포착하고 다른 자산에 대한 비정규 정규 분포 또는 t 분포 한계 분포를 사용하는 copula를 추정하는 것입니다. 그것은 당신에게 당신의 종류의 작업에 거의 표준 인 매우 일반적인 모델 클래스를 제공합니다 (예를 들어, 다변량 t- 분포를 가정하면 더 일반적입니다) . 있다 copulaR.위한 패키지


1

ecdf()함수를 사용하여 R을 사용하여 질문의 첫 번째 부분에 가능한 대답

# simulate some data...
N <- 1000
fdata <- c( rnorm(N %/% 2, mean=14), rnorm(N %/% 2, mean=35))

# here's the Empirical CDF of that data...
E1 <- ecdf(fdata)
plot(E1)

# now simulate 1000 numbers from this ECDF...
ns <- 1000
ans <- as.numeric(quantile(E1, runif(ns)))
hist(ans,pro=T,nclass=113,col='wheat2')

1
이것은 일 변량 데이터에만 적용됩니다.
Stéphane Laurent
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.