2017-01-05 51 views
0

我想根據R中較小數據集的分佈對大型數據集進行採樣。我一直在尋找解決方案,但一段時間沒有成功。我在R方面比較新,所以我很抱歉,如果這是直截了當的。但是,我嘗試了一些solutions如何基於R中另一個數據集的分佈對數據進行採樣

以下是一些示例數據。我稱之爲觀察模型:是

# 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) 

兩個數據集的分佈如下: enter image description here

目標:我想品嚐較大的「模型」數據集相匹配的小「觀察到的」。我知道有不同的數據點,因此它不會直接匹配。

我一直在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) 

這給了我新的圖形看起來非常類似於舊(除了尾巴): enter image description here

我希望有更好的搭配。因此我開始探索在模型數據上使用密度函數。見下文:

# 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) 

下面是兩個曲線圖,第一個是與第一採樣,並且第二個是第二取樣: enter image description here

有一個在右曲線圖更期望的移位,其表示由所觀察的密度建模的採樣密度。但是,數據並不相同。也就是說,我沒有對模型數據進行採樣。請看下圖:

summary(SampleMod3 %in% Model) 

生產:

Mode FALSE NA's 
logical 1000  0 

表示我沒有采樣模擬數據,但是模擬的數據,而密度。是否有可能根據另一個數據集的分佈對數據集進行採樣?先謝謝你。

編輯:

感謝所有幫助傢伙!這裏是我使用丹尼爾森提供的並由bethanyp支持的approxfun()函數。

enter image description here

與理解爲什麼時髦的新分配任何幫助嗎?

回答

1

有趣的問題。我認爲這會有所幫助。首先,它近似於密度函數。然後,它從具有擬合密度概率的模型點採樣。

predict_density = approxfun(dens.obs) #function that approximates dens.obs 
#sample points from Model with probability distr. of dens.obs 
SampleMod3 <- sample(Model, length(Obs), replace=FALSE, prob=predict_density(Model)) 
summary(SampleMod3 %in% Model) 
    Mode TRUE NA's 
logical 1000  0 
+1

看起來我們在同一時間以兩種不同的方式寫相同的答案。我去了解釋,你去了如何做的功能...偉大的電話!總是很高興知道我在正確的軌道上! – sconfluentus

+0

感謝你們倆。我使用了上面概述的「how-to」解決方案,並在我的問題的編輯部分中獲得了分佈(上圖)。任何幫助理解時髦的新分配? – Phil

1

我假設在實踐中您使用的是一組真實的非隨機生成數據。在這種情況下,不同樣本的可能值有可能出現,因爲隨機抽樣方法並不意味着數據中沒有模式。在荒野中,真實的東西有實際的頻率,這會顯示在你的元樣本中。

所以你應該使用加權概率從原始選擇較小的子樣本。

實施例整個羣體,其中被吸入每個數概率{1,2,1,3,4,1,3} (記住的總和必須等於1): 1:0.4285 2:0.1429 3:0.2857 4:0.1429

,如果你在

sample(x, size, replace = FALSE, prob = my_freqs) 

prob= my_freqs部分使用這些加權的概率你可能會獲得更多的可能性內嵌你期待什麼。但我不能100%確定這是否是你以後的事情。

在隨機數據中,嘗試set.seed(2),看看是否告訴R使用用於在原始集合創建中生成這些頻率的種子讓您更接近您的目標。

我知道有一個通用隨機公式與每組相關聯。我將不得不假設它是一組爲各種隨機方法生成它們的方法的頻率概率,所以它可以幫助您在從隨機集合中抽樣之前使用它。

相關問題