2011-06-28 2 views
3

Je n'ai absolument pas eu de chance de travailler avec la fonction HoltWinters via RSRuby et R. Comment exactement 1) créez-vous un objet de série temporelle via RSRuby et 2) transmettez-le avec succès HoltWinters pour obtenir une sortie?Comment passer un objet ts à R via RSRuby

Exemple:

@r = RSRuby.instance 
=> #<RSRuby:0x106bfe6c0 @proc_table={}, @class_table={}, @default_mode=-1, @cache={"get"=>#<RObj:0x106bfe580>, "helpfun"=>#<RObj:0x106bfd3d8>, "help"=>#<RObj:0x106bfd3d8>, "NaN"=>NaN, "FALSE"=>false, "TRUE"=>true, "F"=>false, "NA"=>-2147483648, "eval"=>#<RObj:0x106bfdf18>, "T"=>true, "parse"=>#<RObj:0x106bfe0d0>}, @caching=true> 
@r.assign('mytime',@r.ts(:data => [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34], :frequency => 12, :start => [1993,3], :end => [1995,3])) 
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25] 
@r.HoltWinters(@r.mytime) 
    RException: Error in decompose(ts(x[1L:wind], start = start(x), frequency = f), seasonal) : 
    time series has no or less than 2 periods 

rsruby (0.5.1.1)

version R 2.12.2 (2011-02-25)

Plate-forme: x86_64-apple-darwin9.8.0/x86_64 (64 bits)

: modifier: un exemple similaire dans R seulement ... si je pouvais obtenir une sortie de HoltWinters via RSRuby (autre qu'une erreur) je serais très hap py

> z <- ts(1:34, frequency = 12, start = c(1993,3), end = c(1995,3)) 
> z 
    Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 
1993   1 2 3 4 5 6 7 8 9 10 
1994 11 12 13 14 15 16 17 18 19 20 21 22 
1995 23 24 25          
> HoltWinters(z) 
Holt-Winters exponential smoothing with trend and additive seasonal component. 

Call: 
HoltWinters(x = z) 

Smoothing parameters: 
alpha: 1 
beta : 0 
gamma: 0 

Coefficients: 
      [,1] 
a 2.500000e+01 
b 1.000000e+00 
s1 -8.141636e-16 
s2 -8.141636e-16 
s3 9.621933e-16 
s4 2.738550e-15 
s5 -8.141636e-16 
s6 -8.141636e-16 
s7 7.401487e-17 
s8 -8.141636e-16 
s9 9.621933e-16 
s10 -8.141636e-16 
s11 -8.141636e-16 
s12 9.621933e-16 
+0

Je n'ai jamais utilisé R, mais s'il est pratique de vérifier si le code R équivalent est valide, alors vous pouvez le faire. Si le code R équivalent est valide, vous pouvez l'afficher dans la question. –

+0

Ajout d'un exemple dans R qui correspond à l'exemple de RSRuby. J'adorerais voir n'importe quelle sortie autre qu'une erreur de HoltWinters lorsqu'elle est utilisée dans RSRuby (les quelques autres méthodes que j'utilise dans RSRuby comme t_test fonctionnent bien, ne peuvent pas se porter garant de tous). Merci – Charles

Répondre

3

Si je comprends bien votre question, vous êtes vraiment à la recherche de conseils sur l'utilisation d'une interface spécifique. Au début, laissez-moi vous dire que je n'utilise pas RSRuby, mais j'utilise un utilitaire différent pour l'intégration de R et Ruby. Après un examen plus approfondi, je vois que vous voulez vraiment une option de série temporelle ... Ce que je crois ... Oui, qui peut facilement être produit à partir d'une base de données en utilisant le as.ts(data_frame) fxn.
http://stat.ethz.ch/R-manual/R-patched/library/stats/html/ts.html

Ce que j'ai utilisé est assez simple. Si c'est un problème majeur, peut-être que cela peut vous être utile.

require 'rserve/simpler' 
r_object = Rserve::Simpler.new 

Ce que je fais à côté est de prendre un Hash où les clés correspondent aux colonnes de trame de données, et les valeurs sont des tableaux, et je lance le Rserve::Simpler fxn Hash.to_dataframe sur eux afin qu'ils soient prêts à convertir.

data = Hash.new()#insert data here 
datafr = data.to_dataframe 
r_object.converse(df: datafr) do 
    %Q{df$time <- strptime(as.character(df$time), "%Y-%m-%d %X") 
    df$name <- factor(df$name) 
    } 
end 

Ceci utilise le code R dans le bloc inverse et gère tout bien. Je n'ai pas essayé cela avec votre problème particulier, mais je sais que cela a fonctionné pour moi d'importer des données de temps (classe Ruby Datetime) d'un tableau dans R afin que je puisse le représenter graphiquement. Bonne chance!

+0

Merci d'avoir pris le temps de répondre. Je serai en mesure de tester demain et répondra à nouveau alors. On dirait que je vais devoir masser cet exemple en syntaxe RSRuby, mais ça pourrait faire l'affaire. – Charles

+0

@Charles Avez-vous essayé quelque chose avec ça? Ou est-ce que quelque chose d'autre finit par fonctionner pour vous? Je n'avais pas entendu et la curiosité me tue! – Ryanmt

+0

Salut @Ryanmt, est-il possible d'appeler un fichier R directement à l'aide de RserverSimpler et de ramener les résultats à ruby? – massinissa

Questions connexes