2017-06-02 87 views
0

我有这样的文件。许多公司的日志回归计算r

head(Historical_Stock_Prices_R) 
    Date1  MSFT AAPL GOOGL 
1 25-01-05 21.02985 4.873362 88.56 
2 26-01-05 21.02177 4.886890 94.62 
3 27-01-05 21.10259 4.913269 94.04 

想用这个公式LN(现价/以前的价格)来计算对数收益和我的预期输出是这样

Date1  MSFT AAPL GOOGL   
26-01-05 -0.04% 0.28% 6.62% 
27-01-05  0.38% 0.54% -0.61% 

试图从先前的堆栈溢出回答这个代码解决,但失败

logs=data.frame(cbind.data.frame(newdates[-1], 

diff(as.matrix(log(Historical_Stock_Prices_R[,-1]))))) 

回答

0

试试这个:

df = read.table(text=" 
Date1  MSFT AAPL GOOGL 
1 25-01-05 21.02985 4.873362 88.56 
2 26-01-05 21.02177 4.886890 94.62 
3 27-01-05 21.10259 4.913269 94.04",header=T) 

cbind.data.frame(date=df$Date1[-1],apply(df[,2:4],2,function(x) log(x[-1]/x[-length(x)])*100)) 

#  date  MSFT  AAPL  GOOGL 
# 2 26-01-05 -0.03842896 0.2772061 6.6188582 
# 3 27-01-05 0.38372143 0.5383395 -0.6148647 
+0

日回报给这个代码cbind.data.frame(日期= Historical_Stock_Prices_R $日期1 [2后: 3],应用(Historical_Stock_Prices_R [,2:4],2,函数(x)log(x [-1]/x [-length(x)])* 100)) 它显示data.frame ...,check.names = FALSE): 参数意味着不同的行数:2,245 > –

+0

我的b广告,这是因为我用你的例子(2行),你的矩阵可能更大。我替换了'df $ Date1 [2:nrow(df)]'这应该可以做到。 (介意df = Historical_Stock_Prices_R) – timfaber

+0

抱歉,我明白 –

0

如果你能更精确地表达你的意思是“失败”,那将会很有帮助。例如,添加您的错误消息。查看更多here好的问题

在任何情况下,我怀疑如果你用下面的代码替换它应该工作。

logs=data.frame(cbind.data.frame(Historical_Stock_Prices_R["Date1",-1], diff(as.matrix(log(Historical_Stock_Prices_R[,-1]))))) 

你的代码失败的原因是,有可能是您的环境中没有对象称为“newdates”,所以你要引用原始数据帧。 然后你可以重命名列。

+0

它部分工作。给出此 –

+0

的警告消息在data.frame(...,check.names = FALSE)中: 从短变量中找到行名并已被丢弃 –

+0

输出类似于此 –

0

使用TTR包和ROC

> library(TTR) 
> stocks 
    Date1  MSFT  AAPL GOOGL 
1 25-01-05 21.02985 4.873362 88.56 
2 26-01-05 21.02177 4.886890 94.62 
3 27-01-05 21.10259 4.913269 94.04 


> rocMSFT <- ROC(stocks[,"MSFT"]) 
> rocMSFT 
[1]   NA -0.0003842896 0.0038372143 

还看dailyReturn:计算从quantmod http://www.quantmod.com/documentation/periodReturn.html