回归分析未显示摘要

时间:2015-07-01 19:56:25

标签: r time-series regression

以下是我的数据

> x
          day  sum
1  2015-04-14  129
2  2015-04-15  129
3  2015-04-16  129
4  2015-04-17  899
5  2015-04-18  899
6  2015-04-19  899
7  2015-04-20  899
8  2015-04-21  899
9  2015-04-22  899
10 2015-04-23  899
11 2015-04-24  899
12 2015-04-25  899
13 2015-04-26  899
14 2015-04-27  899
15 2015-04-28  899
16 2015-04-29  899
17 2015-04-30  899
18 2015-05-01  899
19 2015-05-02  899
20 2015-05-03  899
21 2015-05-04  899
22 2015-05-05  899
23 2015-05-06  899
24 2015-05-07  899
25 2015-05-08  899
26 2015-05-09  899
27 2015-05-10  899
28 2015-05-11  899
29 2015-05-12  920
30 2015-05-13  920
31 2015-05-14  920
32 2015-05-15  920
33 2015-05-16  920
34 2015-05-17  920
35 2015-05-18  920
36 2015-05-19  920
37 2015-05-20  920
38 2015-05-21  920
39 2015-05-22  920
40 2015-05-23  920
41 2015-05-24  920
42 2015-05-25  920
43 2015-05-26  920
44 2015-05-27  920
45 2015-05-28  920
46 2015-05-29  920
47 2015-05-30  920
48 2015-05-31  920
49 2015-06-01 1076

我想进行回归分析,找出总和为6000的数据。我做了以下,

> q<-lm(day ~ sum, data=x)
> q

Call:
lm(formula = day ~ sum, data = x)

Coefficients:
(Intercept)          sum  
  1.653e+04    3.584e-02  

> as.Date(predict(q, data.frame(sum=6000)))
           1 
"2015-11-08" 

我能够预测日期。但我不确定准确性,并希望改进它。但我无法查看回归的摘要。我收到以下错误,

> summary(q)
Error in Ops.difftime((f - mean(f)), 2) : 
  '^' not defined for "difftime" objects

以防万一,变量类型很重要,

> typeof(x)
[1] "list"
> typeof(x$day)
[1] "double"
> typeof(x$sum)
[1] "integer"
> class(x$day)
[1] "Date"

当我看一下之前的论坛时,

Difftime Error using Looping Regressions in R

以下是解决方案,

我通过将索引从时间值更改为标准整数索引来解决这个问题,一切运行正常。

但我不知道该怎么做?

有人可以帮我解决这个问题并说出我需要做些什么来获取摘要吗?

由于

1 个答案:

答案 0 :(得分:1)

R中的日期实际上只是根据某些规则重新转换为日期格式的数值。例如,Date格式是自1970年1月1日以来经过的天数,POSIXct格式是自1970年1月1日起参考UTC时区以来经过的秒数。以下是一些例子:

as.numeric(as.Date("1970-01-01", tz="UTC"))
# 0
as.numeric(as.Date("1970-01-05", tz="UTC"))
# 4
as.numeric(as.POSIXct("1970-01-01 00:00:00", tz="UTC"))
# 0
as.numeric(as.POSIXct("1970-01-05 00:00:00", tz="UTC"))
# 345600

解决问题的一种方法是将日期转换为数字格式,对数字数据运行回归,然后在结束时转换回日期。

在下面的代码中,我假设x$dayPOSIXct格式开始。

# Convert POSIXct date to a numeric value equal to number of days since Jan 1, 1970
x$day.numeric = as.numeric(x$day)/(24*60*60)

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

summary(q)

Call:
  lm(formula = day.numeric ~ sum, data = x)

Residuals:
  Min      1Q  Median      3Q     Max 
-22.253 -10.253   1.747   9.994  20.994 

Coefficients:
  Estimate Std. Error  t value Pr(>|t|)    
(Intercept) 1.653e+04  8.448e+00 1956.996  < 2e-16 ***
  sum         3.584e-02  9.550e-03    3.753  0.00048 ***
  ---
  Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 12.67 on 47 degrees of freedom
Multiple R-squared:  0.2306,    Adjusted R-squared:  0.2142 
F-statistic: 14.09 on 1 and 47 DF,  p-value: 0.0004796

# Predict date at which sum = 6000. Use as.Date to convert numeric value
# back to a date based on the number of days since Jan 1, 1970.
as.Date(predict(q, data.frame(sum=6000)), origin="1970-01-01")
           1 
"2015-11-08"