回归分析抛出随机数据

Regression analysis throwing random data

以下是我的数据,

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

任何人都可以告诉我我在这里犯了什么错误以及为什么我不能在这里使用任何模型吗?

谢谢

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

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

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")