我正在尝试对使用日期范围作为自变量的数据集执行简单的线性回归。我想绘制数据以及回归线和方程。数据集不是时间序列。当我创建情节时,它看起来像 this
情节看起来很好,但是斜率显然不是零,截距不应该是0.945,因为等式表明。这个article给出了一个很好的解释,说明编程语言如何将日期范围的起源转移到预先指定的零起点,我相信是R中的1/1/1970。我认为这是什么发生在我的情况下。虽然文章给出了问题的一个很好的解释,但它的解决方案没有详细说明如何解决R中的问题。所以我的问题是,如何将我的自变量的原点从1970年1月1日转移到第一个日期在我的数据集中执行R?
中的线性回归我尝试将日期范围转换为数字和因子,这两者都不是解决方案。我怀疑在网上搜索解决方案时我没有使用正确的搜索字词。所提出的大部分内容都描述了如何通过原点强制回归线,这不是我想要做的。谢谢你的帮助。
编辑:制作情节的代码如下。 'agcy'是数据的样本。实际数据集有超过一千个点。agcy <- data.frame(as.Date(c('2010-01-01', '2011-02-01', '2012-11-18', '2016-08-30', '2017-04-21')), c(-0.3, -0.1, -0.1, -0.2, -0.4))
colnames(agcy) <- c('Date', 'Diff')
png('C:\\Desktop\\file.png', width = 720, height = 480)
samps <- 0.05
MA <- movAvg(agcy, agcy$Diff, samps) #movAvg() is a user-defined function that computes the moving average of the data series, "samps" is the proportion of data points to use in the moving average calculation
model <- lm(MA ~ agcy$Date)
intercept <- round(coef(model)[1],3)
slope <- round(coef(model)[2],3)
r2 <- round(summary(model)$r.squared,3)
eqn <- sapply(c(bquote(italic(y) == .(slope)*italic(x) + .(intercept)),bquote(r^2 == .(r2))), as.expression)
plot(agcy$Date, MA, xlab='Date',ylab='Difference',col = 'green', type = 'p', pch=18, ylim = c(-0.5,0.5))
abline(model)
text(par('usr')[2],c(0.5,0.45),eqn,pos = 2)
abline(h=0, col = 'black')
dev.off()