2016-09-26 3 views
3

먼저 통계를 집중적으로 다루는 포럼에 게시해야하는 정확한 위치인지 여부는 확실하지 않습니다. 그러나 이것을 R로 구현하려고 할 때 여기에 게시하는 것이 가장 좋을 것이라고 생각했습니다. 내가 틀렸다면 사과하십시오.R - 커널 밀도 추정에서 얻은 확률 밀도 분포에 대한 데이터를 시뮬레이트합니다.

그럼 제가하려는 것은 다음과 같습니다. 전체 250.000 개의 관측치에 대한 데이터를 시뮬레이트하고 경험적인 데이터 (불연속)에서 파생 된 커널 밀도 추정치와 함께 연속 (비 정수) 값을 할당합니다. 원래 값은 -5에서 +5까지입니다. 다음은 내가 사용하고자하는 배포본입니다.

enter image description here

그것은 값이 2.89이 아닌 3이 말을 할 수있는 정말 중요한 나는 이산 확률을 기반으로 새로운 데이터가 아니라 연속 사람을 시뮬레이션하지 않는 것이 나에게 매우 중요합니다 따라서 새로운 값은 플롯에 묘사 된 확률에 따라 지정됩니다. 시뮬레이션 된 데이터에서 가장 빈번한 값은 +2 주위에 있고, -4와 +5 주변의 값은 다소 드뭅니다.

R에서 데이터를 시뮬레이션 할 때와 커널 밀도 추정이 작동하는 방법에 대해 상당히 많은 내용을 읽었지만 실제로 전진하지는 않습니다. 그래서 내 질문은 기본적으로 두 단계를 수반합니다 - 어떻게 데이터를 시뮬레이트합니까 (1), 게다가이 특정 확률 분포 (2)를 사용하여 데이터를 어떻게 시뮬레이트합니까?

미리 감사드립니다. 저와 함께 도와주세요.

+0

질문을 이해한다면 아마도 몬테카를로 시뮬레이션을 사용할 수 있습니다. 배포본이 알려지기 때문에, 그 배포본의 무작위 샘플링을 사용하여 시뮬레이션 된 데이터를 생성 할 수 있습니다. 그게 당신이하려고하는 것처럼 들리니? –

+0

안녕하세요 @LloydChristmas, 답장을 보내 주셔서 감사합니다. 분배가 알려져 있지만 실제 이산 분포를 사용하여 데이터를 시뮬레이트하고 싶지는 않지만 커널에 표시된 연속적인 분포를 사용하고 싶습니다. 그것이 당신이 말하는 것 인 경우, 이것은 굉장 할 것입니다. 내가 어떻게 해? – nikUoM

+1

여기에 몇 가지 흥미로운 토론이 있습니다 : http://stats.stackexchange.com/questions/30303/how-to-simulate-data-that-satisfy-specific-constraints-such-as-having-specific-m –

답변

5

기본 이산 데이터를 사용하여 원하는 정밀도로 커널 밀도 추정치를 작성하십시오 (즉, 기계 정밀도와 계산 시간의 한계 내에서 응용 프로그램에 필요한 "근접 연속"으로 작성하십시오.)). 그런 다음 커널 밀도에서 샘플링하여 밀도 값을 사용하여 분포의 가능성이 높은 값을 샘플링 할 가능성이 높습니다. 예를 들어 :

set.seed(4396) 
dat = round(rnorm(1000,100,10)) 

하는 커널 밀도 추정을 만듭니다

가짜 데이터는 단지이 예에서 작업 할 무언가가있다. 당신이 포인트의 미세한 격자 추정 밀도를 원하는 경우 n을 증가 :

dens = density(dat, n=2^14) 

를이 경우, 밀도는 거리 mean(diff(dens$x)) = 0.0045 각 지점 사이에, 2^14 점의 그리드 추정된다.

이제 커널 밀도 추정의 샘플 : 밀도 추정의 x 값을 샘플링하고 밀도 추정의 y 값 (밀도)과 동일한 prob을 설정하여보다 많은 x 값이 될 수 있도록합니다. 가능성은 샘플링한다 :

kern.samp = sample(dens$x, 250000, replace=TRUE, prob=dens$y) 

dens (오리지널 데이터의 밀도 추정치) (검은 선)를 비교 kern.samp (적색)의 밀도 :

plot(dens, lwd=2) 
lines(density(kern.samp), col="red",lwd=2) 

enter image description here

위의 방법을 사용하면 밀도 추정을 위해 더 세밀하고 미세한 격자를 만들 수 있지만 밀도 추정에 사용되는 격자 점의 밀도 값 (즉, dens$x의 값)으로 제한됩니다.그러나 실제로 의 밀도를 얻을 수 있어야한다면 데이터 값을 근사 함수를 만들 수 있습니다. 이 경우에도 데이터 구조를 캡처하는 데 필요한 대역폭 및 격자 크기에 관계없이 밀도 추정을 작성한 다음 격자 점 사이의 밀도를 보간하는 함수를 작성합니다. 예를 들어

dens = density(dat, n=2^14) 

dens.func = approxfun(dens) 

x = c(72.4588, 86.94, 101.1058301) 

dens.func(x) 
[1] 0.001689885 0.017292405 0.040875436 

당신은 출력을 사용해서 (오히려 단지 density 함수에 의해 사용 된 그리드 포인트에보다) 모든 x 값의 밀도 분포를 얻기 위해이를 사용하고있다 dens.func을 에 대한 prob 인수로 사용하십시오.

+0

정말 고마워요. 나는 이것을 시험해보고 그것이 무엇을하는지 볼 것입니다. 나중에 내 결과와 함께 다시 연락 드리겠습니다. – nikUoM

+0

친애하는 @ eipi10 - 이것이 효과적입니다. 대단히 감사합니다! – nikUoM

관련 문제