使用datetime变量在散点图上绘制趋势线

时间:2014-09-18 09:46:20

标签: r

我有一个近1600个观测数据框,结构如下:

head(df)

Start_Time Duration
1 2014-09-18 10:01:00   4 mins
2 2014-09-18 08:01:00  41 mins
3 2014-09-18 08:01:00  22 mins
4 2014-09-18 08:01:00  41 mins
5 2014-09-18 08:01:00  60 mins
6 2014-09-18 07:02:00  17 mins

我已使用此功能绘制了数据:

plot(df$Start_Time,as.numeric(df$Duration), ylab = "Duration", xlab = "Date", ylim = c(0,450))

由于数据框每天包含数十个观察,我想画一条趋势线,以便更容易直观地读取数据。

我试过这段代码:

fit <- glm(df$Start_Time~df$Duration)
co <- coef(fit)
abline(fit, col="red", lwd=2)

但是我收到了这个错误:

Error in model.frame.default(formula = df$Start_Time ~ df$Duration,  : 
invalid type (list) for variable 'df$Start_Time'

我在这段代码中遇到了同样的错误:

abline(lm(df$Start_Time ~ df$Duration))

通过阅读错误消息,我认为这些函数不能处理非数字值。 我试过这个没有错误,但我的图表上没有显示该行:

fit <- glm(as.numeric(df$Start_Time)~df$Duration)
co <- coef(fit)
abline(fit, col="red", lwd=2)

当其中一个变量采用日期时间格式时,绘制趋势线/回归线的正确方法是什么?

注意:以下是str(df)

的结果
str(df)
'data.frame':   4121 obs. of  2 variables:
$ Start_Time: POSIXlt, format: "2014-09-18 10:01:00" "2014-09-18 08:01:00" "2014-09-18 08:01:00" "2014-09-18 08:01:00" ...
$ Duration  :Class 'difftime'  atomic [1:4121] 4 41 22 41 60 17 17 2 3 3 ...   .. ..- attr(*, "units")= chr "mins"

1 个答案:

答案 0 :(得分:0)

尝试以下代码以您所述的格式再现数据,然后使用lm()代替glm()拟合线性模型,并绘制结果,包括最佳拟合线。

set.seed(1)

times <- as.POSIXct("2014-09-18") + sort(runif(11, min=0, max=1000))
df <- data.frame(Start_time = times[-11])
df$Duration <- difftime(times[-11], times[-1])

model <- lm(Start_time ~ Duration, df)
plot(Start_time ~ Duration, df)
abline(model)

数据框的结构与您报告的相同:

str(df)
'data.frame':   10 obs. of  2 variables:
 $ Start_time: POSIXct, format: "2014-09-18 00:01:01" "2014-09-18 00:03:21" "2014-09-18 00:03:25" ...
 $ Duration  :Class 'difftime'  atomic [1:10] -139.9 -4.29 -59.53 -106.62 -200.73 ...
  .. ..- attr(*, "units")= chr "secs"