2015-09-28 9 views
7

Rでは、npパッケージを使用して、条件付き密度の帯域幅を作成しました。私がしたいのは、いくつかの新しい条件付きベクトル、結果の分布からのサンプルを与えられたことです。いくつかの条件付きデータがある場合、Rの条件付き密度からサンプリングすることは可能ですか?

現在のコード:

library('np') 
# Generate some test data. 
somedata = data.frame(replicate(10,runif(100, 0, 1))) 
# Conditional variables. 
X <- data.frame(somedata[, c('X1', 'X2', 'X3')]) 
# Dependent variables. 
Y <- data.frame(somedata[, c('X4', 'X5', 'X6')]) 
# Warning, this can be slow (but shouldn't be too bad). 
bwsome = npcdensbw(xdat=X, ydat=Y) 
# TODO: Given some vector t of conditional data, how can I sample from the resulting distribution? 

は、私はパッケージのドキュメントを読みましたが、私は私のビジョンは理にかなっているか、何ができるかどうかを把握することができていないので、Rにはかなり新しいです。必要に応じて、私は喜んで別のパッケージを使用します。

+0

「エラー:関数「npcedensbw」が見つかりませんでした。 Wheb私はその名前で表示されていないnpパッケージの利用可能な関数を見ています。私が 'npcdensbw'で再実行し、結果を' plot'すると、6X vatriableと表示されます。さて...正確に何が問題だったのですか? –

+0

実際、私は条件変数と従属変数の両方で多変量データを扱っています。私がしたいのは、決定された分布のサンプルです。条件付き/独立変数のいくつかの新しいベクトルが与えられたら、条件付き変数が与えられたときの分布に従ってサンプリングしたいと思う。より簡単な例では、xとyの両方が1次元の場合、yに分布があり、その分布の中にサンプルがあるようにxを修正したいと思うでしょう。私はここで同じことをしたい。それはもっと明確ですか? – gdoug

+0

質問が正しく理解されているかどうかを確認する:https://cran.r-project.org/web/packages/np/vignettes/np_faq.pdfのFAQ 2.49とあなたのケースはどのように違うのですか? – coffeinjunky

答えて

2
ここ

から例2.49である:@coffeejunkyからこのヒントは、次の6を持つあなたの問題に対する可能な 解決された後

### 
library(np) 
data(faithful) 
n <- nrow(faithful) 
x1 <- faithful$eruptions 
x2 <- faithful$waiting 
## First compute the bandwidth vector 
bw <- npudensbw(~x1 + x2, ckertype = "gaussian") 
plot(bw, view = "fixed", ylim = c(0, 3)) 
## Next generate draws from the kernel density (Gaussian) 
n.boot <- 1000 
i.boot <- sample(1:n, n.boot, replace = TRUE) 
x1.boot <- rnorm(n.boot,x1[i.boot],bw$bw[1]) 
x2.boot <- rnorm(n.boot,x2[i.boot],bw$bw[2]) 
## Plot the density for the bootstrap sample using the original 
## bandwidths 
plot(npudens(~x1.boot+x2.boot,bws=bw$bw), view = "fixed") 

https://cran.r-project.org/web/packages/np/vignettes/np_faq.pdfは、それがために2つの変数のために、次の ソリューションを提供します変数:

## Generate some test data. 
somedata = data.frame(replicate(10, runif(100, 0, 1))) 
## Conditional variables. 
X <- data.frame(somedata[, c('X1', 'X2', 'X3')]) 
## Dependent variables. 
Y <- data.frame(somedata[, c('X4', 'X5', 'X6')]) 
## First compute the bandwidth vector 
n <- nrow(somedata) 
bw <- npudensbw(~X$X1 + X$X2 + X$X3 + Y$X4 + Y$X5 + Y$X6, ckertype = "gaussian") 
plot(bw, view = "fixed", ylim = c(0, 3)) 
## Next generate draws from the kernel density (Gaussian) 
n.boot <- 1000 
i.boot <- sample(1:n, n.boot, replace=TRUE) 
x1.boot <- rnorm(n.boot, X$X1[i.boot], bw$bw[1]) 
x2.boot <- rnorm(n.boot, X$X2[i.boot], bw$bw[2]) 
x3.boot <- rnorm(n.boot, X$X3[i.boot], bw$bw[3]) 
x4.boot <- rnorm(n.boot, Y$X4[i.boot], bw$bw[4]) 
x5.boot <- rnorm(n.boot, Y$X5[i.boot], bw$bw[5]) 
x6.boot <- rnorm(n.boot, Y$X6[i.boot], bw$bw[6]) 
## Plot the density for the bootstrap sample using the original 
## bandwidths 
ob1 <- npudens(~x1.boot + x2.boot + x3.boot + x4.boot + x5.boot + x6.boot, bws = bw$bw) 
plot(ob1, view = "fixed", ylim = c(0, 3)) 
+0

この例は、(npudensbwを使用して)カーネル無条件密度推定値からサンプリングしますが、カーネル条件付き密度推定値( 'npcdensbw'を使用する)ではサンプリングしません。たぶん、このコードをこれに適応させる簡単な方法があるかもしれませんが、 'np'ヘルプファイルにはよく書かれていませんし、質問のこの特定の面について明確な答えが重要です。 –

関連する問題