我正在尝试生成一些数据的散点图。我用两种不同的方式进行操作,如下面的代码所示(大多数代码只是在排列数据,唯一的图形部分在底部)。一个使用对工作空间中变量的直接引用,另一个使用数据首先排列到xts对象中,然后使用列索引来引用它们。
即使我检查了两种方法的源数据是否相同,最终的散点图也有所不同。
我想知道为什么这些情节有所不同,在此先感谢。
# Get data
# =============
library('quantmod')
# Set monthly time interval
StartPeriod = paste0("1980-01")
EndPeriod = paste0("2014-07")
DateString = paste0(StartPeriod,"/", EndPeriod)
# CPI (monthly)
getSymbols("CPIAUCSL", src="FRED")
# QoQ growth, Annualized
CPIAUCSL = ((CPIAUCSL/lag(CPIAUCSL))^4-1)*100
CPIAUCSL = CPIAUCSL[DateString]
# Oil prices (monthly)
getSymbols(c("MCOILWTICO"), src="FRED")
# QoQ growth, annualized
MCOILWTICO = ((MCOILWTICO/lag(MCOILWTICO))^4-1)*100
MCOILWTICO = MCOILWTICO[DateString]
# Produce plots
# ===============
library('lattice')
# Method 1, direct reference
xyplot(CPIAUCSL~lag(MCOILWTICO,1), ylim=c(-5,6),
ylab="CPI",
xlab="Oil Price, 1 month lag",
main="Method 1: Inflation vs. Lagged Oil Price",
grid=TRUE)
# Method 2, refer to column indices of xts object
basket = merge(CPIAUCSL, MCOILWTICO)
xyplot(basket[ ,1] ~ lag(basket[ ,2],1), ylim=c(-5, 6),
ylab="CPI",
xlab="Oil Price, 1 month lag",
main="Method 2: Inflation vs. Lagged Oil Price",
grid=TRUE)
# Double check data fed into plots is the same
View(merge(CPIAUCSL, lag(MCOILWTICO,1)))
View(merge(basket[ ,1], lag(basket[ ,2],1))) # yes, matches
方法1绝对是不正确的,因为它将相距6年!例如,CPIAUCSL[3]
是1980-03-01的数据,而lag(MCOILWTICO,1)[3]
对应于1986-03-01的数据-但是,在散点图上,它们将配对!相比之下,basket[ ,1][3]
与basket[ ,2][3]
同属1980年3月1日。
(您的仔细检查并没有显示问题,因为您在那里使用了merge-而不是方法1!解决了问题。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句