Rの小さなデータセットの分布に基づいて大きなデータセットをサンプリングしたいと思います。私はRで比較的新しいので、これが簡単であれば謝罪します。しかし、私はいくつか試みたsolutions。R内の別のデータセットの分布に基づいてデータをサンプリングする方法
ここにいくつかのサンプルデータがあります。次のように2つのデータセットの
# Set seed
set.seed(2)
# Create smaller observed data
Obs <- rnorm(1000, 5, 2.5)
# Create larger modeled data
set.seed(2)
Model <- rnorm(10000, 8, 1.5)
分布は以下のとおりです:私はそれを観察し、モデルと呼ぶことにします
目標:私は "小さいと一致するように、より大きな「モデル」データセットをサンプリングしたいと思います観察された "。私は、異なるデータポイントが関係しているので、それは直接の一致ではないことを理解しています。
私は次のようにしますdensity()
とsample()
上に読んでされています:
# Obtain the density of the observed at the length of the model.
# Note: info on the sample() function stated the prob argument in the sample() function
# must be the same length as what's being sampled. Thus, n=length(Model) below.
dens.obs <- density(Obs, n=length(Model))
# Sample the Model data the length(Obs) at the probability of density of the observed
set.seed(22)
SampleMod <- sample(Model, length(Obs), replace=FALSE, prob=dens.obs$y)
これは私に(尾を除く)古いと非常によく似ています新しいプロットできます:
私はより良いマッチを望んでいました。そこで私はモデルデータの密度関数を使って調べ始めました。下記参照:ここ
# Density function on model, length of model
dens.mod <- density(Model, n=length(Model))
# Sample the density of the model $x at the density of the observed $ y
set.seed(22)
SampleMod3 <- sample(dens.mod$x, length(Obs), replace=FALSE, prob=dens.obs$y)
は、二つのプロットである、第一のサンプリング最初と同じであり、第二は、サンプリングされた第二ある:
右のプロットでより望ましいシフトがあり、これは観察された密度によってモデル化されたサンプリングされた密度を表す。ただし、データは同じではありません。つまり、私はモデリングされたデータをサンプリングしませんでした。以下を参照してください:
summary(SampleMod3 %in% Model)
は生成します。
Mode FALSE NA's
logical 1000 0
を私はモデル化されたデータをサンプリングではなく、モデル化されたデータの密度がなかったことを示しています。別のデータセットの分布に基づいてデータセットをサンプリングすることは可能ですか?前もって感謝します。
EDIT:すべてのヘルプみんなのため
ありがとう!ここで私のプロットは、ダニエルソンから提供され、ベタナイプによってサポートされたapproxfun()
機能を使用しています。
なぜファンキーな新しい分布を理解することで任意のヘルプ?
同時に2つの異なる方法で同じ回答を書いていたように見えます。私は説明のために行った、あなたはどのように機能するために行った...素晴らしい呼び出し!私は正しい軌道に乗っていることを常に知っておいてよかった! – sconfluentus
あなたのおかげで両方。私は上記の「ハウツー」ソリューションを使用し、私の質問の編集セクション(上記)で配布を入手しました。ファンキーな新しいディストリビューションを理解するための助け? – Phil