2015-04-30 1 views
0

У меня есть следующий код:запаздывающих переменных в F #

let years = [|1990 .. 2010|] 
let rand = System.Random() 
let gold = [ for i in years do yield rand.NextDouble()] 
let silver = [ for i in gold do yield 2.0 * i + rand.NextDouble()] 
let x = Frame.ofColumns["gold" => Series(years, gold); 
        "silver" => Series(years, silver) ] 

Я хотел бы регрессировать золото на «лаг» серебро. Как я могу изменить код ниже, так что я регресс золота на отсроченном серебре (серебро массив сдвигается назад на один)

let myresult = R.lm(formula = "gold~silver", data = (x |> R.as_data_frame)) 
R.summary(myresult) 

ответ

2

Вы можете использовать Series.shift 1 перенести данные в ряде в определенном направлении, так что я думаю, что вы можно просто построить рамку следующим образом:

let x = 
    [ "gold" => Series(years, gold); 
    "silver" => (Series(years, silver) |> Series.shift 1) ] 
    |> Frame.ofColumns 

Кроме того, вам не нужен R.as_data_frame вызова. Это происходит автоматически :-)

let myresult = R.lm(formula = "gold~silver", data = x) 
R.summary(myresult)