Вычисление корреляции прокатки по нескольким столбцам временного ряда xts [дубликат]

Подтверждена следующая функция для Firefox 40, Chrome 44, Opera 31 и IE 11. Bowser используется для обнаружения браузера, также используется jQuery. - secUrl - это URL-адрес защищенной паролем области, из которой выходить из системы. - redirUrl - это URL-адрес области, не защищенной паролем (страница успеха выхода из системы). - вы можете увеличить таймер переадресации (в настоящее время 200 мс).

function logout(secUrl, redirUrl) {
    if (bowser.msie) {
        document.execCommand('ClearAuthenticationCache', 'false');
    } else if (bowser.gecko) {
        $.ajax({
            async: false,
            url: secUrl,
            type: 'GET',
            username: 'logout'
        });
    } else if (bowser.webkit) {
        var xmlhttp = new XMLHttpRequest();
        xmlhttp.open("GET", secUrl, true);
        xmlhttp.setRequestHeader("Authorization", "Basic logout");
        xmlhttp.send();
    } else {
        alert("Logging out automatically is unsupported for " + bowser.name
            + "\nYou must close the browser to log out.");
    }
    setTimeout(function () {
        window.location.href = redirUrl;
    }, 200);
}

0
задан Community 23 May 2017 в 12:00
поделиться

2 ответа

Предполагая, что вход 3-х столбцов воспроизводится в примечании и используя окно ширины 3 для иллюстрации, определите функцию корреляции Cor, которая принимает матрицу и вычисляет ее корреляционную матрицу, извлекающую нижнюю треугольную часть, чтобы исключить избыточность и добавить имена столбцов , Теперь используйте это с rollapplyr:

library(xts)

Cor <- function(x) {
    corr <- cor(x)
    out <- as.data.frame.table(corr)[lower.tri(corr), ]
    with(out, setNames(Freq, paste(Var1, Var2)))
}
rollapplyr(xx, 3, Cor, by.column = FALSE)

, давая:

                    DO0182U09B3.DO0182U09A3 DO0182U09C3.DO0182U09A3 DO0182U09C3.DO0182U09B3
2017-01-20 16:30:00                      NA                      NA                      NA
2017-01-20 16:45:00                      NA                      NA                      NA
2017-01-20 17:00:00                 0.98573                -0.99613                -0.99671
2017-01-20 17:15:00                 0.98629                 0.95983                 0.99297
2017-01-20 17:30:00                 0.52664                 0.47475                 0.99820
2017-01-20 17:45:00                 0.56204                 0.50460                 0.99769

Примечание: Вход xx в воспроизводимой форме:

xx <- structure(c(-101.5, -101.32, -101.45, -100.91, -100.91, -100.97, 
-103.37, -102.75, -103.3, -95.92, -103.04, -103.67, -103.86, 
-104.22, -103.93, -99.22, -104.09, -104.12), .Dim = c(6L, 3L), .Dimnames = list(
    NULL, c("DO0182U09A3", "DO0182U09B3", "DO0182U09C3")), index = structure(c(1484947800, 
1484948700, 1484949600, 1484950500, 1484951400, 1484952300), tzone = "", tclass = c("POSIXct", 
"POSIXt")), class = c("xts", "zoo"), .indexCLASS = c("POSIXct", 
"POSIXt"), tclass = c("POSIXct", "POSIXt"), .indexTZ = "", tzone = "")
1
ответ дан G. Grothendieck 18 August 2018 в 12:08
поделиться
  • 1
    @G, Гротендик, спасибо за ваш ответ. С тех пор, как я wideRawXTS менял свой wideRawXTS фрейм, с помощью scale(), теперь он называется wideRawDFScaled. Когда я запускаю cor() на wideRawDFScaled, который является объектом XTS, и имеет размеры [1: 1343, 1:12] I см., что DO0182U09B3.DO0182U09A3 имеет корреляцию 0,2759166. Когда я запускаю свой код выше, я получаю тот же показатель для тех же двух переменных, но он повторяется для всех временных рядов. Я прикреплял изображения к OP, показывающие, о чем я говорю. Также должен ли массив возвращаться не 12x12x1343? Если у меня есть 12 vars, я не должен иметь 12x12 строк и cols? – TheGoat 9 March 2017 в 23:11
  • 2
    Если у вас есть n переменных, то под диагональю корреляционной матрицы (или выше) есть значения (n, 2) = n * (n-1) / 2. Пожалуйста, упростите свою проблему до минимальной, которая имеет ту же проблему и полностью воспроизводима. – G. Grothendieck 10 March 2017 в 00:49
  • 3
    Я снова попробовал ваш код, и я заменил x в соответствии с вашим примером моим объектом zoo wideRawDFscaled, и я считаю, что он работает сейчас. С моим ограниченным опытом программирования определение функций меня смущает, я видел, как многие люди определяют function(x), я предполагаю, что мое определение функции должно быть Cor <- function(wideRawDFscaled) { corr <- cor(wideRawDFscaled) – TheGoat 10 March 2017 в 01:12
  • 4
    Вы можете использовать любые имена переменных, которые вам нравятся в аргументах ваших функций, если вы используете одно и то же имя в теле функции. Они не имеют отношения к переменным с тем же именем вне функции. Например, изменение function(x) x на function(y) y ничего не делает. Оба они производят одинаковый выход для одного входа. – G. Grothendieck 10 March 2017 в 01:18
  • 5
    Я изменил имя ввода на xx, чтобы четко отличить его от формального аргумента x в Cor. Это ничего не меняет, но только для ясности в свете вашего комментария. – G. Grothendieck 10 March 2017 в 14:27

Вы можете использовать combn для применения корреляции к каждой паре столбцов. Адаптация ответа, на который вы ссылались:

window <- 20
cors <- combn(colnames(wideRawXTS),2,
              function(p) rollapply(wideRawXTS, window  ,
                                    function(x) cor(x[,p[1]],x[,p[2]]), 
                                    by.column=FALSE))
colnames(cors) <- combn(colnames(wideRawXTS),2, paste, collapse=".")
1
ответ дан HubertL 18 August 2018 в 12:08
поделиться
  • 1
    Спасибо что нашли время ответить. У меня есть ошибка, которую я не могу понять, > colnames(cors) <- combn(names(wideRawDFscaled),2,paste,collapse=".") Error in colnames & lt; - ( * tmp * , value = c("DO0182U09A3.DO0182U09B3", "DO0182U09A3.DO0182U09C3", : length of 'dimnames' [2] not equal to array extent – TheGoat 9 March 2017 в 23:49
  • 2
    Попробуйте заменить names на colnames – HubertL 9 March 2017 в 23:53
  • 3
    Я пробовал ваши рекомендации, и у меня такая же ошибка ... – TheGoat 10 March 2017 в 00:22
  • 4
    пожалуйста, dput ваши данные - я не могу воспроизвести ошибку – HubertL 10 March 2017 в 00:53
Другие вопросы по тегам:

Похожие вопросы: