2013-04-19 2 views
1

R에서 커널 밀도를 사용하여 기존 데이터에서 샘플을 생성해야합니다. 음수 값이 누락되었지만 가능하지는 않지만 샘플 음수 값을 생성합니다.커널 샘플을 사용하는 생성 샘플

library(ks) 
set.seed(1) 
par(mfrow=c(2,1)) 

x<-rlnorm(100) 
hist(x, col="red", freq=F) 

y <- rkde(fhat=kde(x=x, h=hpi(x)), n=100) 
hist(y, col="green", freq=F) 

KDE 및 생성 된 샘플 범위를 제한하는 방법은 무엇입니까? positive 인수 싶어서

답변

4

rkde :

y <- rkde(
    fhat = kde(x=x, h=hpi(x)), 
    n = 100, 
    positive = TRUE 
) 

대안 그것을 구속하기 위해, 추정 전에 의 데이터를 (예를 들어, 대수로) 변환 할 수 있으며, 임의의 숫자 후 다시 변환 것 세대.

x2 <- log(x) 
y2 <- rkde(fhat=kde(x=x2, h=hpi(x2)), n=100) 
y <- exp(y2) 
hist(y, col="green", freq=F) 
+0

감사합니다. 변형의 다른 변형을 제안 할 수 있습니까? – Andy

+0

양의 값에 대해 일반적으로 로그가 충분합니다. 양수 값의 경우, 비 기울임 분포를 사용하면'log (exp (x) -1)'와 같은 것을 시도 할 수 있습니다 (0부터 직선입니다). 경계 값의 경우 경계를 알고 있으면 물류 변환을 사용할 수 있습니다. 데이터에 좀 더 taylored가 필요한 경우 데이터의 (가우시안) quantile-quantile 플롯을 볼 수 있습니다. 예를 들어 'n <- 100; x-rlnorm (n); i <- 순서 (x); plot (x [i], qnorm (ppoints (n))); 곡선 (log (x), add = T, lwd = 3)'. –

+0

Quantile-Quantile 플롯을 사용하여 난수를 생성하는 방법을 보여줄 수 있습니까? – Andy

1

KDE가 아닌 밀도 추정치를 수용 할 수 있으면 logspline 패키지를 살펴보십시오. 이것은 밀도 추정을 산정하는 다른 방법이고 결과 추정치가 경계를 벗어나 경계 근처에서 의미가 없도록 더 낮은 (및/또는 상위) 경계를 설정하는 인수가 있습니다.

여기 기본적인 예이다

set.seed(1) 
x<-rlnorm(100) 
hist(x, prob=TRUE) 

lines(density(x), col='red') 

library(ks) 
tmp <- kde(x, hpi(x)) 
lines(tmp$eval.points, tmp$estimate, col='green') 

library(logspline) 
lsfit <- logspline(x, lbound=0) 
curve(dlogspline(x,lsfit), add=TRUE, col='blue') 

curve(dlnorm, add=TRUE, col='orange') 

enter image description here

당신은 rlogspline 함수를 사용하여 장착 밀도에서 새로운 데이터 요소를 생성하고 plogsplineqlogspline 기능도있다.

+0

'logspline' 패키지를 사용하여 동일한 작업을 해결하는 방법을 보여줄 수 있습니까? – Andy

+0

@Andy, 예제를 추가했습니다. –

+0

'logpline' 방법론에 대한 무료 교과서를 추천 할 수 있습니까? – Andy

관련 문제