Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 改变一个数据集的分布以匹配另一个数据集_R_Statistics - Fatal编程技术网

R 改变一个数据集的分布以匹配另一个数据集

R 改变一个数据集的分布以匹配另一个数据集,r,statistics,R,Statistics,我有两个数据集,一个是模拟的人工数据,另一个是观测数据。它们的统计分布略有不同,我想强制建模的数据与数据分布中观察到的数据分布相匹配。换句话说,我需要建模的数据来更好地表示观测数据的尾部。这里有一个例子 model <- c(37.50,46.79,48.30,46.04,43.40,39.25,38.49,49.51,40.38,36.98,40.00, 38.49,37.74,47.92,44.53,44.91,44.91,40.00,41.51,47.92,36.98,43.40,

我有两个数据集,一个是模拟的人工数据,另一个是观测数据。它们的统计分布略有不同,我想强制建模的数据与数据分布中观察到的数据分布相匹配。换句话说,我需要建模的数据来更好地表示观测数据的尾部。这里有一个例子

model <- c(37.50,46.79,48.30,46.04,43.40,39.25,38.49,49.51,40.38,36.98,40.00,
38.49,37.74,47.92,44.53,44.91,44.91,40.00,41.51,47.92,36.98,43.40,
42.26,41.89,38.87,43.02,39.25,40.38,42.64,36.98,44.15,44.91,43.40,
49.81,38.87,40.00,52.45,53.13,47.92,52.45,44.91,29.54,27.13,35.60,
45.34,43.37,54.15,42.77,42.88,44.26,27.14,39.31,24.80,16.62,30.30,
36.39,28.60,28.53,35.84,31.10,34.55,52.65,48.81,43.42,52.49,38.00,
38.65,34.54,37.70,38.11,43.05,29.95,32.48,24.63,35.33,41.34)

observed <- c(39.50,44.79,58.28,56.04,53.40,59.25,48.49,54.51,35.38,39.98,28.00,
28.49,27.74,51.92,42.53,44.91,44.91,40.00,41.51,47.92,36.98,53.40,
42.26,42.89,43.87,43.02,39.25,40.38,42.64,36.98,44.15,44.91,43.40,
52.81,36.87,47.00,52.45,53.13,47.92,52.45,44.91,29.54,27.13,35.60,
51.34,43.37,51.15,42.77,42.88,44.26,27.14,39.31,24.80,12.62,30.30,
34.39,25.60,38.53,35.84,31.10,34.55,52.65,48.81,43.42,52.49,38.00,
34.65,39.54,47.70,38.11,43.05,29.95,22.48,24.63,35.33,41.34)

summary(model)
Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
16.62   36.98   40.38   40.28   44.91   54.15 

summary(observed)
Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
12.62   35.54   42.58   41.10   47.76   59.2

我怎样才能强制模型数据具有R中观察到的可变性?

你只是在模拟观察到的数据的分布吗?如果是这样,您可以根据观察结果生成一个核密度估计值,然后根据该模型密度分布重新采样。例如:

library(ggplot2)
首先,我们根据观测值生成密度估计值。这是我们观察值分布的模型。adjust是一个确定带宽的参数。默认值为1。值越小,平滑度越低,即密度估计值越接近数据中的小尺度结构:

dens.obs = density(observed, adjust=0.8)
现在,从密度估计中重新采样以获得建模值。我们设置prob=dens.obs$y,以便选择dens.obs$x中某个值的概率与其建模密度成正比

set.seed(439)
resample.obs = sample(dens.obs$x, 1000, replace=TRUE, prob=dens.obs$y)
将观测值和建模值放入数据框中,以准备绘图:

dat = data.frame(value=c(observed,resample.obs), 
                 group=rep(c("Observed","Modeled"), c(length(observed),length(resample.obs))))
下面的ECDF经验累积分布函数图显示,从核密度估计中采样得到的样本分布与观测数据类似:

ggplot(dat, aes(value, fill=group, colour=group)) +
  stat_ecdf(geom="step") +
  theme_bw()
您还可以使用与上面使用的调整参数相同的值,绘制观测数据的密度分布和从建模分布中采样的值

ggplot(dat, aes(value, fill=group, colour=group)) +
  geom_density(alpha=0.4, adjust=0.8) +
  theme_bw()

你只是在模拟观察到的数据的分布吗?如果是这样,您可以根据观察结果生成一个核密度估计值,然后根据该模型密度分布重新采样。例如:

library(ggplot2)
首先,我们根据观测值生成密度估计值。这是我们观察值分布的模型。adjust是一个确定带宽的参数。默认值为1。值越小,平滑度越低,即密度估计值越接近数据中的小尺度结构:

dens.obs = density(observed, adjust=0.8)
现在,从密度估计中重新采样以获得建模值。我们设置prob=dens.obs$y,以便选择dens.obs$x中某个值的概率与其建模密度成正比

set.seed(439)
resample.obs = sample(dens.obs$x, 1000, replace=TRUE, prob=dens.obs$y)
将观测值和建模值放入数据框中,以准备绘图:

dat = data.frame(value=c(observed,resample.obs), 
                 group=rep(c("Observed","Modeled"), c(length(observed),length(resample.obs))))
下面的ECDF经验累积分布函数图显示,从核密度估计中采样得到的样本分布与观测数据类似:

ggplot(dat, aes(value, fill=group, colour=group)) +
  stat_ecdf(geom="step") +
  theme_bw()
您还可以使用与上面使用的调整参数相同的值,绘制观测数据的密度分布和从建模分布中采样的值

ggplot(dat, aes(value, fill=group, colour=group)) +
  geom_density(alpha=0.4, adjust=0.8) +
  theme_bw()

看看这个答案


它讨论了SuppDists包的使用。此软件包允许您通过基于创建一组参数来创建分发。

看看这个答案


它讨论了SuppDists包的使用。此软件包允许您通过基于创建一组参数来创建分布。

这更像是一个数学讨论,而不是编程讨论。也许这会很好的吗?此外,更高频率与当前数据没有上下文关系。您可能需要更改样本以正确反映时间序列的性质。此外,您应该包括模型分布的分布类型和参数,除非它只是另一个经验分布,在这种情况下,您需要清楚地知道您有两个经验分布。@r2evan很好,我把多余的问题处理掉了。我不确定模型分布的分布类型和参数是什么,但它是建模的数据如果它是建模的数据,在不放弃它是真实模型这一事实的情况下,无法调整方差。也就是说,如果你将其视为经验数据并尝试,那么你将创建一个新模型,根据你需要进行任何方差修改。这看起来更像是一个数学讨论,而不是编程讨论。也许这会很好的吗?此外,更高频率与当前数据没有上下文关系。您可能需要更改样本以正确反映时间序列的性质。此外,您应该包括模型分布的分布类型和参数,除非它只是另一个经验分布,在这种情况下,您需要清楚地知道您有两个经验分布。@r2evan很好,我把多余的问题处理掉了。我不确定模型分布的分布类型和参数是什么,但它是建模的数据如果它是建模的数据,在不放弃它是真实模型这一事实的情况下,无法调整方差。也就是说,如果你把它当作经验数据并尝试,那么你将是cre 用你需要的任何方差修改来修改一个新模型。