回归分析抛出随机数据
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")
以下是我的数据,
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")