0

私はデータフレームを持っています:

head(df)

GMT
               MSCI ACWI        DJGlbl  Russell 1000   Russell Dev S&P GSCI Industrial 
1999-03-01 -0.0070000000  0.0020000000 -0.0010000000 -0.0150000000        -0.0100000000
1999-03-02 -0.0050352467  0.0009980040 -0.0070070070 -0.0020304569         0.0040404040
1999-03-03 -0.0020242915  0.0029910269  0.0000000000 -0.0061037640         0.0010060362
1999-03-04  0.0070993915  0.0029821074  0.0151209677 -0.0010235415         0.0050251256
1999-03-05  0.0241691843  0.0089197225  0.0218470705  0.0276639344        -0.0120000000
1999-03-08  0.0039331367  0.0039292731  0.0058309038 -0.0009970090        -0.0020242915
1999-03-09  0.0029382958  0.0000000000 -0.0028985507  0.0069860279        -0.0010141988
1999-03-10  0.0078125000  0.0088062622  0.0058139535  0.0118929633         0.0091370558

以下のコードでローリング ウィンドウ共分散行列を計算しました。名前 (windowsList) は、たとえば1-60最初の 60 日間の cov.matrix では $ 2-61、ウィンドウが 1 日シフトしたときの次の共分散行列では$ の値を達成します。

windowSize <- 60
windows <- embed(1:nrow(df), windowSize)

lapplyApproach <- function(df, windows) {

windowsList <- split(t(windows), rep(1:nrow(windows), each=ncol(windows)))

names(windowsList) <- unlist(lapply(windowsList, function(x)paste(range(x), sep="",   collapse="-")))
return(lapply(windowsList, function(x)cov(df[x, ])))
}

私の問題は、数値ではなく日付の範囲で名前 (windowsList) の値を取得したいということです。たとえば、 $ の代わりに $ の1-60ようなものが必要1999-03-01 - 1999-05-21です。日付のマトリックスを作成してから、それらの間の範囲を計算しようとしましたが、成功しませんでした。アイデアは、名前 ($1999-03-01 - 1999-05-21など) がシートの名前として Excel に渡されるということです。例:

library("XLConnect")
hb <- loadWorkbook("stuff.xlsx", create = TRUE)
createSheet(hb, names(windowsList)) 
writeWorksheet(hb,windowsList, names(windowsList),header=TRUE)
saveWorkbook(hb)

誰かが親切に私を正しい方向に向けることができますか?:)よろしくお願いします

4

1 に答える 1

0

を使用すると機能しますrownames(df)[range(x)]

df <- read.table(text = "MSCI_ACWI        DJGlbl  Russell_1000   Russell-Dev S&P_GSCI_Industrial 
1999-03-01 -0.0070000000  0.0020000000 -0.0010000000 -0.0150000000        -0.0100000000
1999-03-02 -0.0050352467  0.0009980040 -0.0070070070 -0.0020304569         0.0040404040
1999-03-03 -0.0020242915  0.0029910269  0.0000000000 -0.0061037640         0.0010060362
1999-03-04  0.0070993915  0.0029821074  0.0151209677 -0.0010235415         0.0050251256
1999-03-05  0.0241691843  0.0089197225  0.0218470705  0.0276639344        -0.0120000000
1999-03-08  0.0039331367  0.0039292731  0.0058309038 -0.0009970090        -0.0020242915
1999-03-09  0.0029382958  0.0000000000 -0.0028985507  0.0069860279        -0.0010141988
1999-03-10  0.0078125000  0.0088062622  0.0058139535  0.0118929633         0.0091370558", header = TRUE)

windowSize <- 6
windows <- embed(1:nrow(df), windowSize)

関数の最後のコマンドも変更しました。リストであるdf[x, ]ため機能しませんでした。xそこで、df[unlist(x),]代わりに使用しました。

lapplyApproach <- function(df, windows) {  
 windowsList <- split(t(windows), rep(1:nrow(windows), each=ncol(windows)))  
 names(windowsList) <- unlist(lapply(windowsList,
            function(x) paste(rownames(df)[range(x)], sep="",   collapse=" - ")))
 return(lapply(windowsList, function(x) cov(df[unlist(x),])))
}

出力:

lapplyApproach(df, windows)

$`1999-03-01 - 1999-03-08`
                        MSCI_ACWI        DJGlbl  Russell_1000   Russell.Dev S.P_GSCI_Industrial
MSCI_ACWI            1.307947e-04  3.004810e-05  1.155990e-04  1.552330e-04       -3.310649e-05
DJGlbl               3.004810e-05  7.696563e-06  2.547058e-05  3.607536e-05       -1.244441e-05
Russell_1000         1.155990e-04  2.547058e-05  1.176579e-04  1.195526e-04       -2.707752e-05
Russell.Dev          1.552330e-04  3.607536e-05  1.195526e-04  2.065329e-04       -3.872039e-05
S.P_GSCI_Industrial -3.310649e-05 -1.244441e-05 -2.707752e-05 -3.872039e-05        5.164804e-05

...
于 2012-09-17T11:20:06.563 に答える