2

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 と生成されたサンプルの範囲を制限するにはどうすればよいですか?

4

2 に答える 2

4

rkdepositive引数を渡します:

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)
于 2013-04-19T10:32:12.690 に答える
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' )

ここに画像の説明を入力

関数を使用して、当てはめた密度から新しいデータ ポイントを生成できます。また、関数rlogsplineplogsplineありqlogsplineます。

于 2013-04-19T17:09:56.990 に答える