Ошибки при использовании getSymbols () quantmod для прогнозирования цены акций - PullRequest
0 голосов
/ 10 февраля 2019

Я пытался использовать QuantMod для загрузки некоторых исторических данных о цене акций, вот мой код:

Nasdaq100_Symbols <- c('GE','PG','MSFT','AAPL','PFE','AMD','DELL','GRPN','FB','CSCO','INTC',
                   'EZJ.L','BP','HSBC','MKS')

getSymbols(Nasdaq100_Symbols)

Warning messages:
1: DELL contains missing values. Some functions will not work if objects contain missing values in the middle of the series. Consider using na.omit(), na.approx(), na.fill(), etc to remove or replace them. 

Как я могу удалить эти значения NA, так как я пытаюсь объединить их и сделать ихкак тип данных временного ряда,

nasdaq100 <- data.frame(as.xts(merge(GE,PG,MSFT,AAPL,PFE,AMD,DELL,GRPN,FB,CSCO,INTC,
                                 EZJ.L,BP,HSBC,MKS)))

head(nasdaq100[,1:12],2)

        GE.Open GE.High GE.Low GE.Close GE.Volume GE.Adjusted PG.Open PG.High PG.Low
2007-01-02      NA      NA     NA       NA        NA          NA      NA      NA     NA
2007-01-03   37.41   38.15  37.38    37.97  43222800    24.48669   63.72   64.66   63.7
       PG.Close PG.Volume PG.Adjusted
2007-01-02       NA        NA          NA
2007-01-03    64.54   9717900    44.56958   

 class(nasdaq100)
[1] "data.frame"

# set outcome variable
outcomeSymbol <- 'FISV.Volume'

# shift outcome value to be on same line as predictors
library(xts)
nasdaq100 <- xts(nasdaq100,order.by=as.Date(rownames(nasdaq100)))
nasdaq100 <- as.data.frame(merge(nasdaq100,lm1=lag(nasdaq100[,outcomeSymbol],-1)))

Error in `[.xts`(nasdaq100, , outcomeSymbol) : subscript out of bounds

Я застрял здесь, я нашел учебник на Youtube (https://www.youtube.com/watch?v=lDgvaJFpybU&t=32s), но не могу двигаться вперед из-за этих предупреждений и ошибок, может кто-топодскажите как это исправить?

1 Ответ

0 голосов
/ 10 февраля 2019

Если вы собираетесь выполнить часть примера кода, убедитесь, что вы все правильно настроили.В конце вы заполняете outcomeSymbol значением из стандартного FISV, которое вы не загрузили в начале вашего сценария.И я должен сказать, что код в скрипте, который вы можете найти здесь , мог бы быть написан лучше.Между xts и data.frame слишком много переключателей, которые не нужны.Я не собираюсь переписывать весь его код.Но этот код исправляет ваши ошибки.

Во-первых, вместо того, чтобы загрязнять вашу рабочую среду 100 акциями, я помещаю все в один объект списка.Затем объедините все это вместе с Reduce и merge.Недостающие данные, которые находятся в тикере DELL, будут хорошо объединяться со всем остальным, но будут NA, поскольку данных нет.Если вы хотите с этим справиться, либо не загружайте данные DELL, либо заполните их 0 с помощью функции na.fill.Этот последний вариант может быть не лучшим решением, если вы собираетесь использовать эти данные для обучения модели.Я также покажу вам, как превратить объект xts в data.frame без необходимости использовать as.Date позже.

library(quantmod)

Nasdaq100_Symbols <- c('GE','PG','MSFT','AAPL','PFE','AMD','DELL')

# put all stocks in one list object    
stocks <- lapply(Nasdaq100_Symbols, getSymbols, auto.assign = FALSE)

# following is not needed but if you want to use the list for other purposes 
# it is a good practice to name all the different list objects.

# names(stocks) <- Nasdaq100_Symbols


# merge all stocks into 1 xts object
nasdaq100 <- Reduce(merge, stocks)

# fill NA's with 0
nasdaq100 <- na.fill(nasdaq100, 0)

outcomeSymbol <- "GE.Volume" # <-- used GE as that data is available in the downloaded data set

# merge outcome to data
nasdaq100 <- merge(nasdaq100, lm1 = lag(nasdaq[, outcomeSymbol], -1))

# turn into data.frame
nasdaq100_df <- data.frame(date = index(nasdaq100), coredata(nasdaq100))
...