[英]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年该小组的年度体重分布? 理想情况下,我希望随着时间的流逝,均值的不确定性会增加。 同样,我希望标准偏差的不确定性也增加。 换一种说法,我想预测未来的权重分布,同时考虑到以下两种情况:
任何帮助将不胜感激。 如果有人可以在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.