Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重置R中日期解释变量的原点_R_Linear Regression - Fatal编程技术网

重置R中日期解释变量的原点

重置R中日期解释变量的原点,r,linear-regression,R,Linear Regression,我试图对使用日期范围作为自变量的数据集执行简单的线性回归。我想把数据和回归线和方程一起画出来。数据集不是时间序列。当我创建绘图时,它看起来像 曲线图看起来很好,但是斜率显然不是零,截距不应为0.945,如方程所述。这很好地解释了编程语言将如何将日期范围的原点转移到预先指定的零起点,我认为这是R中的1/1/1970。我认为这就是我的情况。虽然这篇文章很好地解释了这个问题,但它的解决方案并没有详细说明如何解决R中的问题。所以我的问题是,在R中执行线性回归时,如何将自变量的原点从1970年1月1日移

我试图对使用日期范围作为自变量的数据集执行简单的线性回归。我想把数据和回归线和方程一起画出来。数据集不是时间序列。当我创建绘图时,它看起来像

曲线图看起来很好,但是斜率显然不是零,截距不应为0.945,如方程所述。这很好地解释了编程语言将如何将日期范围的原点转移到预先指定的零起点,我认为这是R中的1/1/1970。我认为这就是我的情况。虽然这篇文章很好地解释了这个问题,但它的解决方案并没有详细说明如何解决R中的问题。所以我的问题是,在R中执行线性回归时,如何将自变量的原点从1970年1月1日移到数据集中的第一个日期

我尝试将日期范围转换为数字和因子,这两种方法都不是解决方案。我怀疑我在网上搜索解决方案时没有使用正确的搜索词。接下来的大部分内容描述了如何强制回归线穿过原点,这不是我在这里要做的。谢谢你的帮助

编辑:下面是生成绘图的代码。”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()

agcy能否包含一些样本数据以及用于执行回归、绘制数据和绘制回归线的代码?首先,对于斜率-我认为您的绘图斜率显示为零,因为您创建了斜率并将其四舍五入为3。第二,您是否需要出于任何特殊原因移动截距变量,或者是否需要执行类似于
predict(model,data.frame(Date=as.Date(“2000/1/1”)))
的操作,以便在您感兴趣的年份提取预测值?我明白您关于斜率的意思。我想不管范围是2010-2017年还是1970-2017年,斜率都是一样的。不过,截距确实很重要,图中显示截距约为-0.1,而不是0.945。我不想预测任何一点。我只需要知道斜率和截距,在我拥有的数据范围内。我有多个类似于此的数据集,我的目标是比较每个数据集的趋势。好吧,图上大约-0.1处的“截距”正好是它进入图边界的位置-它不是实际截距。如果你扩展你的绘图
xlim
值(比如
xlim=c(as.Date('1965/1/1')、as.Date('2017/1/1'))
),你应该看到模型中的
abline
实际上在1970年前后通过了0.945(当然没有测试,因为我没有你的全部数据)。如果你像上面那样使用
predict()
,你基本上就是在这个交叉点上获取模型值,即上面例子中的“2000/1/1”截距。我以前不知道predict()函数,但这是一个方便的解决方法,可以在第一个点(正好是-0.16)获得截距值,并得到我需要的答案。不过,为了满足我的好奇心,有没有办法将线性回归中的原点从零移到其他值?