我想根據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)
目標:我想品嚐較大的「模型」數據集相匹配的小「觀察到的」。我知道有不同的數據點,因此它不會直接匹配。
我一直在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
表示我沒有采樣模擬數據,但是模擬的數據,而密度。是否有可能根據另一個數據集的分佈對數據集進行採樣?先謝謝你。
編輯:
感謝所有幫助傢伙!這裏是我使用丹尼爾森提供的並由bethanyp支持的approxfun()
函數。
與理解爲什麼時髦的新分配任何幫助嗎?
看起來我們在同一時間以兩種不同的方式寫相同的答案。我去了解釋,你去了如何做的功能...偉大的電話!總是很高興知道我在正確的軌道上! – sconfluentus
感謝你們倆。我使用了上面概述的「how-to」解決方案,並在我的問題的編輯部分中獲得了分佈(上圖)。任何幫助理解時髦的新分配? – Phil