R 奇怪的行为

R 奇怪的行为,r,plot,line,time-series,R,Plot,Line,Time Series,我目前正试图绘制一个价差的时间序列图,然后添加一条带回归的曲线。目前这只是一个AR(1),因为我想在开始之前得到正确的绘图 数据来自.XLS 并在OpenOffice中进行组织 Date - Price1 - Price 2 - NA.(Empty) 01.01.1982 - 1.56 - 2.53 - [...] 我读这篇文章是因为 library(xlsx) library(AER) x<-read.xlsx("data.xlsx",1) 所以我现在在内存中有一个表,它产生这

我目前正试图绘制一个价差的时间序列图,然后添加一条带回归的曲线。目前这只是一个AR(1),因为我想在开始之前得到正确的绘图

数据来自.XLS 并在OpenOffice中进行组织

Date - Price1 - Price 2 - NA.(Empty) 
01.01.1982 - 1.56 - 2.53 -  
[...]
我读这篇文章是因为

library(xlsx)
library(AER)
x<-read.xlsx("data.xlsx",1)
所以我现在在内存中有一个表,它产生这个head()

(日期之前有一个索引列,我不需要它,因为我按日期打印,但它在那里)

那么我会的

plot(x$Date,x$NA.)
我得到了正确的情节。我对plot命令进行了一些修改,以获得正确的网格、轴、日期和线等,但即使使用上面的简单plot版本,问题也依然存在,因此问题不在于我的编辑

问题如下:

如果我现在试着画一条线

abline(a=1,b=1,col="blue")
它不起作用。命令通过,但不显示一行。然而:

abline(a=1,b=0,col="blue")
按预期工作,并显示蓝色水平线

我遇到的问题是,我想将一个回归对象输入到绘图中,例如

SPRC=zoo(x$NA.,x$Date)
SPRC2=lag(SPRC, -1)
SPRC=SPRC[2:length(SPRC)]
LMO<-lm(SPRC ~ SPRC2)
abline(a=LMO$coefficients[2],b=LMO$coefficients[1],col="red")
然后是任何类型的线,但要么没有显示,要么变成垂直线(!)。只有当b=0时,它才成为一条水平线

我想这与数据对象或输入有关,但我真的不明白为什么它不起作用。我还在Date对象上尝试了as.Date,但这不会改变任何东西。所有其他的绘图命令似乎都起作用,比如添加自定义网格、PAR、定位器文本、轴等。如果我开始一个干净的R会话并且几乎只输入上面的代码,问题就发生了。 我还尝试切换回归变量,a和b值,或绘图变量的顺序。它仍然不起作用

你能想象问题出在哪里吗

编辑: 我刚刚检查了数据类型if typeof()。 x的类型是“列表”,其他的都是“双精度”,即使我做了
x$Date

#同样适用于package zoo
图书馆(动物园)

xUse标记,指定您正在使用的语言/技术。这将有助于其他人找到你的问题。一个可复制的示例()将非常有帮助。我怀疑你在使用隐含的日期单位时遇到了麻烦,它可能是以秒为单位的。
abline(a=40,b=1)
意味着你在画一条线
y=40x+1
,这条线(在我看来)确实是你在显示的图表上画的线。@plannapus:是的,不管我在a或b中输入了什么值。我只是把40放进了a,认为是截距,以明确这不是一个截距超出图表区域的问题。abline(1,1)将产生几乎相同的结果graph@user1680443正如我在下面的回答中所写的,我认为问题在于使用日期时x轴的值。我将检查您的示例。我可以这么说:使用read.table命令,一切似乎都正常工作(比如,如果我粘贴您的示例,它们工作得很好)。我将调查它为什么不能与XLS一起工作,并向您报告。谢谢大家!使用定位器并手动放入一条线(),它确实会生成一条线。但是,abline(回归)不适用于我的数据集。没有人排队。对于回归,截距约为31,斜率约为-0.01。我将尝试手动将其放入行()。编辑:aa,这很有效。好吧,如果我使用带有手动日期的行,它就可以工作了。代码是
行(c(810015700),c(intercept,intercept+(slope*(15700-8100)))
我想知道为什么abline()不起作用?没有你的实际数据,我真的不知道为什么它不起作用。但我很高兴你成功了。
abline(a=1,b=0,col="blue")
SPRC=zoo(x$NA.,x$Date)
SPRC2=lag(SPRC, -1)
SPRC=SPRC[2:length(SPRC)]
LMO<-lm(SPRC ~ SPRC2)
abline(a=LMO$coefficients[2],b=LMO$coefficients[1],col="red")
plot(SPRC)
plot(x$Price1)
abline(a=40,b=1)
x<- read.table(text="Date Price1 Price2 NA.
 28.08.1987  18.30  19.44 1.24
 31.08.1987  18.65  19.75 1.12", sep="", header=TRUE)
x$Date <- as.Date(x$Date, "%d.%m.%Y")

plot(x$Date, x$NA.)
# If we're trying to find the actual coordinates of some points on the plot
# here is what we find:
locator() 
$x
[1] 6449.495 6448.035 6450.967

$y
[1] 1.182379 1.186610 1.182908

# The x axis is running from 6448 to 6451 and here is the reason:

x$Date # Here is your date vector
[1] "1987-08-28" "1987-08-31"
as.numeric(x$Date) # And here it is converted in numerics
[1] 6448 6451 # Hence the values found on the plot with locator.

# The default origin for dates is the first of January, 1970
# 6448 is the number of days from that date to the 28th of August 1987.

# But you can still use regression tools:
lm(NA.~Date, data=x)->lmx
abline(lmx)  # YOu don't actually need to break your lm object into its coefficients, abline recognize lm objects.
# And the same works with package zoo
library(zoo)
x<- read.table(text="Date Price1 Price2 NA.
 28.08.1987  18.30  19.44 1.24
 31.08.1987  18.65  19.77 1.12
 01.09.1987  18.65  19.75 1.10", sep="", header=TRUE)
x$Date <- as.Date(x$Date, "%d.%m.%Y")
SPRC<-zoo(x$NA.,x$Date)
SPRC2<-lag(SPRC, -1)
SPRC<-SPRC[2:length(SPRC)]
LMO<-lm(SPRC ~ SPRC2)
plot(SPRC)
abline(LMO)