繁体   English   中英

预测均值和标准差

[英]Forecast Mean and Standard Deviation

抱歉,这只是一个简单的问题,但过去一周我一直没有找到任何答案,这使我发疯。

背景信息:我有一个跟踪5年内5个人体重的数据集。 每年,我都会对组中个体的权重进行分布,然后从中计算出平均值和标准差。 数据如下:

 Year = [2002,2003,2004,2005,2006]
 Weights_2002 = [12, 14, 16, 18, 20]
 Weights_2003 = [14, 16, 18, 20,20]
 Weights_2004 = [16, 18, 20, 22, 18]
 Weights_2005 = [18, 21, 22, 22, 20]
 Weights_2006 = [2, 21, 19, 20, 20]

问题:我如何预测未来10年该小组的年度体重分布? 理想情况下,我希望随着时间的流逝,均值的不确定性会增加。 同样,我希望标准偏差的不确定性也增加。 换一种说法,我想预测未来的权重分布,同时考虑到以下两种情况:

  1. 数据中的自然方差
  2. 不确定性增加。

任何帮助将不胜感激。 如果有人可以在R中建议如何做到这一点,那就更好了。

多谢你们!

在R中没有关于如何使用预测工具的具体建议 问题的评论,这是使用蒙特卡洛模拟的另一种方法。

首先,做一些整理工作: Weights_2006的值2是错别字或异常值。 由于我无法确定哪个,因此我将其视为异常值并将其从分析中排除。

其次,您说您要基于increasing uncertainty来预测分布。 但是您的数据不支持这一点。

Year <- c(2002,2003,2004,2005,2006)
W2   <- c(12, 14, 16, 18, 20)
W3   <- c(14, 16, 18, 20,20)
W4   <- c(16, 18, 20, 22, 18)
W5   <- c(18, 21, 22, 22, 20)
W6   <- c(NA, 21, 19, 20, 20)
df   <- rbind(W2,W3,W4,W5,W6)
df   <- data.frame(Year,df)

library(reshape2)   # for melt(...)
library(ggplot2)
data <- melt(df,id="Year", variable.name="Individual",value.name="Weight")
ggplot(data)+
  geom_histogram(aes(x=Weight),binwidth=1,fill="lightgreen",colour="grey50")+
  facet_grid(Year~.)

平均权重随时间增加,但方差减小 查看各个时间序列可以说明原因。

ggplot(data, aes(x=Year, y=Weight, color=Individual))+geom_line()

通常,一个人的体重会随着时间线性增加(每年约2个单位),直到体重达到20,然后不再增加而是开始波动。 由于您的初始分布是均匀的,因此体重较轻的个体会随着时间的推移而增加,从而提高了平均值。 但是较重的人的体重不再增长。 因此,分布在20左右“聚集”,导致方差减小。 我们可以从数字中看到:增加平均值,减少标准偏差。

smry <- function(x)c(mean=mean(x),sd=sd(x))
aggregate(Weight~Year,data,smry)
#   Year Weight.mean  Weight.sd
# 1 2002  16.0000000  3.1622777
# 2 2003  17.6000000  2.6076810
# 3 2004  18.8000000  2.2803509
# 4 2005  20.6000000  1.6733201
# 5 2006  20.0000000  0.8164966

我们可以使用蒙特卡洛模拟对该行为进行建模。

set.seed(1)
start <- runif(1000,12,20)
X <- start
result <- X
for (i in 2003:2008){
  X <- X + 2
  X <- ifelse(X<20,X,20) +rnorm(length(X))
  result <- rbind(result,X)
}
result <- data.frame(Year=2002:2008,result)

在此模型中,我们从1000个人开始,其权重在12到20之间形成均匀分布,就像您的数据一样。 在每个时间步长,我们将权重增加2个单位。 如果结果> 20,则将其裁剪为20。然后,我们将随机噪声添加为N [0,1]。 现在我们可以绘制分布。

model <- melt(result,id="Year",variable.name="Individual",value.name="Weight")
ggplot(model,aes(x=Weight))+
  geom_histogram(aes(y=..density..),fill="lightgreen",colour="grey50",bins=20)+
  stat_density(geom="line",colour="blue")+
  geom_vline(data=aggregate(Weight~Year,model,mean), aes(xintercept=Weight), colour="red", size=2, linetype=2)+
  facet_grid(Year~.,scales="free")

红色条显示每年的平均体重。

如果您认为个人体重的自然变化随时间增加,请使用N[0,sigma]作为模型中的误差项,而sigma随着Year增加而增加。 问题在于您的数据中没有任何东西可以支持这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM