Корреляции отличаются как рассчитанные между двумя фреймами данных по сравнению с индивидуально - PullRequest
0 голосов
/ 01 ноября 2018

Я заметил, что корреляции из линейной модели с одной переменной, выполненной на данных, отличаются от корреляций, которые рассчитываются между двумя фреймами данных. Я рассчитал корреляции вручную, и результаты были такими же, как у линейных моделей ».

Корреляции, рассчитанные с использованием двух фреймов данных, приведены выше, а корреляции, рассчитанные с помощью цикла, - на рисунке ниже. Вопрос в том, почему корреляции различаются?

Correlations

Выполнение кода может занять минуту, так как это код источника из GitHub.

source("https://github.com/KaroRonty/ShillerGoyalDataRetriever/raw/master/ShillerGoyalDataRetriever.r")

# Return calculation for the next i years
returns <- as.data.frame(matrix(nrow = 1774))
for(i in 1:20){
    temp <- (lead(full_data$index, 12 * i) / full_data$index) ^ (1 / i)
    returns <- cbind(returns, temp)
    temp <- NA
    colnames(returns)[i + 1] <- paste0("ret_", i)
}
returns <- returns %>% select(-V1)  

# CAPE calculation for the next i years
capes <- as.data.frame(matrix(nrow = 1774))
temp2 <- NA
for(i in 1:20){
    for(j in 1:I(nrow(full_data) - 12)){
        temp2[j + i * 12] <- full_data$Price[j + i * 12] / mean(full_data$Earnings[j:I(j + i * 12 - 1)])
    }
    temp2 <- temp2[1:1774]
    capes <- cbind(capes, temp2)
    temp2 <- NA
    colnames(capes)[i + 1] <- paste0("cape_", i)
}
capes <- capes %>% select(-V1)  

# Calculate correlations
correlations <- cor(capes, returns, use = "complete.obs")

# Calculate correlations manually
x <- as.data.frame(matrix(nrow = 20, ncol = 20))
correlations_manual <- as.data.frame(matrix(nrow = 20, ncol = 20))
for(i in 1:20){
    for(j in 1:20){
        correlations_manual[i, j] <- cor(capes[, i], returns[, j], use = "complete.obs")
    }
}
colnames(correlations_manual) <- colnames(correlations)
rownames(correlations_manual) <- rownames(correlations)
identical(correlations, correlations_manual) # FALSE
...