2014-06-06 157 views
1

J'ai un ensemble de données XTS qui contient de nombreux cours de clôture des actions appelé: dataset. Je voulais ensuite trouver si leurs retours ont une corrélation via cor(), mais je reçois un message d'erreur: Error in cor(RETS) : 'x' must be numeric.erreur de corrélation: 'x' doit être numérique

Voici ce que je l'ai fait:

RETS <- CalculateReturns(dataset, method= c("log")) # Calculate returns Via PerformanceAnalytics 
RETS<- na.locf(RETS) #Solves missing NAs by carrying forward last observation 
RETS[is.na(RETS)] <- "0" #I then fill the rest of the NAs by adding "0" 

Voici un échantillon de RETS

row.names A.Close AA.Close AADR.Close AAIT.Close AAL.Close 
1 2013-01-01 0   0   0   0   0 
2 2013-01-02 0.0035  0.0088  0.0044  -0.00842 0 
3 2013-01-03 0.0195  0.0207  -0.002848 -0.00494 0 
4 2013-01-06 -0.0072  -0.0174  0.0078  -0.00070 0 
5 2013-01-07 -0.0080  0   -0.01106  -0.03353 0 
6 2013-01-08 0.0266  -0.002200 0.006655  0.0160  0 
7 2013-01-09 0.0073  -0.01218  0.007551  0.013620 0 

Puis-je effectuer la corrélation:

#Perform Correlation 
cor(RETS) -> correl 
Error in cor(RETS1) : 'x' must be numeric 

#Tried using as.numeric 
cor(as.numeric(RETS), as.numeric(RETS) -> correl 

Cependant, la réponse est « 1 ". J'ai également essayé d'utiliser la fonction de corrélation dans psych mais obtenir le même message d'erreur.

+0

Pourriez-vous nous montrer le résultat de 'typeof (RETS)'? – Pop

+0

@Pop Oui, 'typeof (RETS) =" caractère "' – Jason

+2

Quelle est votre question? En utilisant 'RETS [is.na (RETS)] <-" 0 "' vous transformez toutes vos données en caractères et vous ne pouvez pas calculer une corrélation de caractères. – Roland

Répondre

3

J'ajoute @ réponse de Roland où fermer la question.

Le problème est que l'utilisation

RETS[is.na(RETS)] <- "0" 

tourne toutes les données en caractères depuis l'ajout d'une valeur de caractère à une valeur numérique change automatiquement les data.types à un caractère. Ainsi, quand vous allez prendre la corrélation, il n'y a aucun moyen de le faire pour les valeurs de caractères. Donc, si vous faites simplement

RETS[is.na(RETS)] <- 0 

à la place, vous devriez éviter le problème de conversion.

Plutôt que de définir vos valeurs manquantes à NA, vous pouvez également envisager dire explicitement cor comment gérer les valeurs manquantes Par exemple

cor(RETS, use="pairwise.complete.obs") 

ne calculera corrélation entre deux variables pour les couples où les deux ne sont pas-NA . Voir la page d'aide ?cor pour toutes les options.

Questions connexes