2017-06-02 66 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