我正在尝试生成一些数据的散点图。我这样做有两种不同的方式,如下面的代码所示(大多数代码只是排列数据,唯一的图形部分位于底部)。一个使用对工作空间中变量的直接引用,另一个使用数据首先将数据排列到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
答案 0 :(得分:1)
方法1绝对不正确,因为它会将点数相隔6年!例如,CPIAUCSL[3]
是1980-03-01的数据,而lag(MCOILWTICO,1)[3]
对应于1986-03-01 - 但是,在散点图上,它们将被配对!相比之下,basket[ ,1][3]
和basket[ ,2][3]
都属于1980-03-01。
(你的双重检查没有显示问题,因为你使用了合并 - 而不是方法1! - 这解决了问题。)