全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
7661 14
2012-02-19
本人是R的初学者,想请教几个问题:
现在有1992年至2007年的中国人均GDP的数据,目的是要比较 linear model, log linear model, exponeantial model这三个模型,对2008年的人均GDP做forecast,假设并不知道2008年及以后的数据。
问题一:如何以1992至2005年做in sample,以2005至2007做out of sample,比较实际值和预测值,以选择模型呢?关键是如何写R 命令。目前我写到下面:
# ---- Linear Trend Model -----
y <- read.csv(file="data.csv",head=TRUE,sep=",")#input the data with head
print(y)
tsy <- ts(y, start=1992, frequency=1)
plot.ts(tsy,type="l",col="blue",ylab="gdp per capita",xlab="year") #plot the time series
is.ts(tsy)# test whether it is time series
t=1992:2007
lm1<-lm(tsy~t,na.action=NULL)# linear trend model
                             #-- the na.action statement is to retain time series attributes
summary(lm1)
model.matrix(lm1)  #You can view the model matrix (with the dummy variables) this way:
yhat=fitted(lm1) #fitted value of the model
e=residuals(lm1) #forecast error of the model
tsyhat<-ts(fitted(lm1),start=1992, frequency=1)# make the yhat time series
tse<-ts(e,start=1992,frequency=1)  # make the forecast error time series
ts.plot(tsy,type="p",lwd=2,col="red",ylab="GDP per capita",xlab="Year")
lines(tsyhat)
ts.plot(tse,type="l",lwd=2,col="blue",ylab="Forecast error",xlab="Year")
abline(h=0,col="red")
##do the out of sample prediction
years<-c(2007,2008,2009)
b<-predict(lm1,data.frame(x=2008),se.fit = TRUE, scale = NULL, df = Inf,
        interval = c("none", "confidence", "prediction"),
        level = 0.95, type = c("response", "terms"),
        terms = NULL, na.action = na.pass,
        pred.var = res.var/weights, weights = 1)

但是这样predict出来的东西都是1992至2007的,何做2008年的forecast呢?

问题二:如何画prediction的interval到plot上呢,这个一点都不会了。

十万火急啊,下周就要交report了,坐等高手指教,不胜感激!!!!



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2012-2-19 12:00:46
帮顶
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-2-19 13:16:47
myyahoo 发表于 2012-2-19 12:00
帮顶
谢谢帮顶!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-2-19 14:37:25
不知道你为什么加那些默认的参数 ,这样可以啊
b<-predict(lm1,data.frame(t=2008:2012),se.fit = TRUE,interval ='prediction')      
b

附件列表
KE2{E)87~[8DZ215%TUI7BN.jpg

原图尺寸 29.79 KB

KE2{E)87~[8DZ215%TUI7BN.jpg

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-2-19 14:47:16
吉林小王子 发表于 2012-2-19 14:37
不知道你为什么加那些默认的参数 ,这样可以啊
b
谢谢好心人帮忙!那有什么思路吧predict的interval画出来吗,并且和真实值比较,画在一张图上。万分感谢了!不知道这种东西有没有哪里有模板模仿的,如果要自己想实在是太麻烦了。

还想请教一个问题,用plot画图的时候,怎样控制x轴的单位呢,譬如,我的x轴是年,每次都是5年一个刻度,可是我想一年一个刻度,怎么办呢?请不惜指教!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-2-19 15:09:52
y=(1:16)+rnorm(16)*3

tsy <- ts(y, start=1992, frequency=1)
t=1:16
lm1<-lm(tsy~t,na.action=NULL)# linear trend model
b<-predict(lm1,data.frame(t=17:22),se.fit = TRUE,interval ='prediction') ;b

t=17:22
c=data.frame(b[1])
y1=c(c$fit.lwr, c$fit.upr, c$fit.fit);y1
t1=rep(t,3)
plot(t1,y1,type='p')


附件列表
QY%O9O7]01U7H1E3Y4[[~~U.jpg

原图尺寸 24.48 KB

QY%O9O7]01U7H1E3Y4[[~~U.jpg

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群