我有我认为是一个非常容易解决的问题,但我无法弄清楚出了什么问题。我的目标是计算线性股票收益,但下面的代码在尝试绘制线性收益时只返回一条直线。任何帮助都会受到赞赏,如果事实证明这是一个愚蠢的事情,我会事先为我的无知道歉,我是R的完全初学者并且编码一般。
```{r}
dataFF = read.csv("FF_Data_2016_11.csv", header = T, sep = ";")
dataFF$Date = dataFF$X.1 %/% 100 + (dataFF$X.1 %% 100 - 1) /12
dataFF[,3:(ncol(dataFF)-1)] = dataFF[,3:(ncol(dataFF)-1)] * 0.01
```
```{r}
dataie = read.csv("ie_data2016_11.csv", header = T, sep = ";", dec = ".", skip = 7, nrows = 1751)
dataie = as.data.frame(dataie[1:1751,1:11])
tsdata = ts(dataie, start = c(1871,1), frequency = 12)
dataie$date = seq(from = tsp(tsdata)[1], to = tsp(tsdata)[2], length.out = nrow(tsdata))
dataie = na.omit(dataie)
```
```{r}
# (log price, log div, YTM, div/monthly, Div/Price, log D/P)
dataie$log_p = log(dataie$P)
dataie$log_d = log(dataie$DIV)
dataie$ytm = dataie$GS10/100
dataie$div_m = dataie$DIV/12
dataie$DP = dataie$div_m/dataie$P
dataie$log_DP = log(dataie$DP)
```
```{r}
# linear monthly R with/without div
dataie$r_lin = dataie$P/lag(dataie$P,1)-1
dataie$r_linD = (dataie$P+dataie$div_m)/lag(dataie$P, -1)-1
示例数据:
Date P DIV E CPI Fraction GS10 Price Dividend
1881.01 6.19 0.265 0.4858 9.419420 1881.042 3.700000 158.9405 6.804400
1881.02 6.17 0.270 0.4817 9.514585 1881.125 3.693333 156.8424 6.863442
1881.03 6.24 0.275 0.4775 9.514585 1881.208 3.686667 158.6218 6.990543
1881.04 6.22 0.280 0.4733 9.609669 1881.292 3.680000 156.5489 7.047217
div_m DP log_DP r_lin r_linD
0.02208333 0.003567582 -5.635867 0 0.003567582
0.02250000 0.003646677 -5.613939 0 0.003646677
0.02291667 0.003672543 -5.606871 0 0.003672543
0.02333333 0.003751340 -5.585642 0 0.003751340
答案 0 :(得分:0)
我认为问题是lag
运算符。它不适用于data.frame
s
例如:
df=data.frame(x=1:4)
df$lx=lag(df$x)
df
x lx
1 1 1
2 2 2
3 3 3
4 4 4
您需要将数据定义为使用lag
运算符的时间序列。使用xts
和您的Date
列:
library(xts)
dataie=xts(dataie,order.by=as.Date(paste(dataie$Date,"01",sep="."),format="%Y.%m.%d"))
# linear monthly R with/without div
dataie$r_lin = dataie$P/lag(dataie$P,1)-1
dataie$r_linD = (dataie$P+dataie$div_m)/lag(dataie$P)-1
> dataie[,c(1:3,15:17)]
Date P DIV log_DP r_lin r_linD
1881-01-01 1881.01 6.19 0.265 -5.635867 NA NA
1881-02-01 1881.02 6.17 0.270 -5.613939 -0.003231018 0.0004038772
1881-03-01 1881.03 6.24 0.275 -5.606871 0.011345219 0.0150594273
1881-04-01 1881.04 6.22 0.280 -5.585642 -0.003205128 0.0005341880