我是使用R的新手。我有以下示例数据集:
> head(abn)
Dates DTM YTM
1 2010-09-28 1133 2.965
2 2010-09-28 1834 3.613
3 2010-09-29 1132 2.994
4 2010-09-29 1833 3.595
5 2010-09-30 1131 3.026
6 2010-09-30 1832 3.590
观察结果是2010年至2016年观察期内的若干债券价值。我的数据集由多个债券组成,期限在1到15年之间(数据集中描述的260-3900个工作日)。 DTM代表成熟期和成熟期的YTM。
我的目标是建立一个每天成熟5年的合成债券。因此,我需要进行回归并找到DTM值为1300的YTM值,恰好是5年。
> plot(dtm, ytm, xlab = "Days to maturity", ylab = "Yield to maturity")
> abline(lm (ytm~dtm), col="red")
我在一次回归中绘制了所有日期的所有债券。我需要在x = 1300时得到y轴的值。但是,我需要分别为每个日期提供此信息。
答案 0 :(得分:0)
您可以使用dplyr
...
library(dplyr)
newval <- data.frame(DTM=1300) #predict.lm likes new values in a dataframe
abn5y <- abn %>% group_by(Dates) %>%
summarise(Y5=predict(lm(YTM ~ DTM), newval))
abn5y
Dates Y5
<chr> <dbl>
1 2010-09-28 3.119374
2 2010-09-29 3.138034
3 2010-09-30 3.161971
答案 1 :(得分:0)
library(plyr)
abn<-read.csv("abn.csv",stringsAsFactors = F)
dfs<-dlply(abn,.(Dates))
dailyYTM<-c()
for (i in unique(abn$Dates)){
df<-dfs[[grep(i,names(dfs))]]
model<-lm(df$YTM~df$DTM)
dailyYTM[i]<-model$coefficients[1]+model$coefficients[2]*1300
}
不是效率最高的但我认为会做的技巧。结果是日常结果