我正在学习使用R中提供的各种预测包,并遇到了bsts()。我处理的数据是需求的时间序列。
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[HttpGet]
public ActionResult Login()
{
return View(); // for the login form
}
[HttpPost]
public void Login(string UserName, .... <other fields>)
{
// validate your login first here
FormsAuthentication.SetAuthCookie(UserName, true);
}
}
我是否可以限制data=c(27, 2, 7, 7, 9, 4, 3, 3, 3, 9, 6, 2, 6, 2, 3, 8, 6, 1, 3, 8, 4, 5, 8, 5, 4, 4, 6, 1, 6, 5, 1, 3, 0, 2, 6, 7, 1, 2, 6, 2, 8, 6, 1, 1, 3, 2, 1, 3, 1, 6, 3, 4, 3, 7, 3, 4, 1, 7, 5, 6, 3, 4, 3, 9, 2, 1, 7, 2, 2, 9, 4, 5, 3, 4, 2, 4, 4, 8, 6, 3, 9, 2, 9, 4, 1, 3, 8, 1, 7, 7, 6, 0, 1, 4, 8, 9, 2, 5)
ts.main=ts(data, start=c(1910,1), frequency=12)
ss <- AddLocalLinearTrend(list(), y=ts.main)
ss <- AddSeasonal(ss, y=as.numeric(ts.temp), nseasons=12)
model <- bsts(as.numeric(ts.temp),
state.specification = ss,
niter = 1000)
pred <- predict(model, horizon = 12)
变为否定?
答案 0 :(得分:2)
由于您的数据是计数的时间序列,因此您需要考虑到这一点而不是假设高斯误差;有关此问题的一些讨论和一些方法的详细说明,请参阅例如Brandt et al 2000和Brandt and Williams 2001。幸运的是,bsts
包具有内置的功能family
选项(请参阅the documentation的第24至26页)。
所以,你可以这样做
model <- bsts(as.numeric(ts.main),
state.specification = ss,
family = 'poisson',
niter = 1000)
以便bsts()
函数正确地将数据视为计数,这将解决您的问题,因为根据定义,后验预测分布的抽取将是非负的。