回归分析抛出随机数据

时间:2015-06-29 18:01:13

标签: r forecasting

以下是我的数据

day       sum
2015-03-05   44           
2015-03-06   46           
2015-03-06   48           
2015-03-07   48           
2015-03-08   58           
2015-03-09   58           
2015-03-10   66           
2015-03-11   68           
2015-03-12   85           
2015-03-13   94           
2015-03-14   98           
2015-03-15  102           
2015-03-16  102           
2015-03-17  104           
2015-03-17  114 

使用的变量类型如下,

typeof(x)
[1] "list"

typeof(x$day)
[1] "double"

typeof(x$sum)
[1] "integer"

class(x$day)
[1] "Date"

我想预测,在什么日期,可以获得特定金额。

以下是我的发现,

当我使用回归分析时,

q<-lm((as.POSIXct(x$day,"%Y-%m-%d"))~x$sum)
> predict(q,data.frame(x$sum==3000))

它会抛出一些随机值,如下所示,

         1          2          3          4          5          6          7          8 
1426062187 1426062187 1426062187 1426062187 1426062187 1426062187 1426062187 1426062187 
         9         10         11         12         13         14         15         16 
1426062187 1426062187 1426062187 1426062187 1426062187 1426062187 1426062187 1426062187 
        17         18         19         20         21         22         23         24 
1426062187 1426062187 1426062187 1426062187 1426062187 1426062187 1426062187 1426062187 
        25         26         27         28         29         30         31         32 
1426062187 1426062187 1426062187 1426062187 1426062187 1426062187 1426062187 1426062187 
        33         34         35         36         37         38         39         40 
1426062187 1426062187 1426062187 1426062187 1426074330 1426086474 1426086474 1426147192 

当我使用ts(x)时,日期的值会发生如下变化,

day

16464              

16465              

16466

16467

16468

16469

16470

16471

16472

当我使用ets时,以下是输出,

fit <- ets(x)
Error in ets(ana) : y should be a univariate time series

有人可以建议我在这里做错了,为什么我不能在这里使用任何模型?

由于

1 个答案:

答案 0 :(得分:1)

R中日期的基础值是数值。您所看到的不是随机值,而是两种不同日期格式的day的数值。

如果day为POSIXct格式,则该值为自1970年1月1日以来的秒数。如果day为日期格式,则该值为自1月1日以来的天数,1970年。例如:

x$day = as.POSIXct(x$day)
as.numeric(x$day)

[1] 1425542400 1425628800 1425628800 1425715200 ...


as.numeric(as.Date(x$day))

[1] 16499 16500 16500 16501 16502 ...

这里有一些代码可以进行回归并以日期格式绘制。为保持一致性,您必须小心确保原点(参考时间)和时区始终相同:

# Set x$day to POSIXct format, with time zone UTC
x$day = as.POSIXct(x$day, tz="UTC")

# Regression model predicting day from sum
q<-lm(day ~ sum, data=x)

# Plot day vs. sum and add regression line and a point prediction
plot(x$sum, x$day, las=1, ylab="", xlab="Sum", 
     xlim=c(40, 120), ylim=c(min(x$day), predict(q, data.frame(sum=120))))
lines(x$sum, as.POSIXct(predict(q), origin="1970-01-01 00:00:00 UTC", tz="UTC"),
      col="red")
points(120, predict(q, data.frame(sum=120)), pch=16, col="blue")

enter image description here