我有一个近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"
答案 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"