У мене є кадр даних, і я хотів би створитифункція, в якій зберігаються лише змінні з низькою кореляцією. Це означає перегляд парної кореляції кожної змінної з рештою змінних, а для тих змінних, у яких щонайменше один коефіцієнт кореляції більший за 0,4, тоді ця змінна та одна сильно корельована виймаються з рамки даних.
Наприклад, припустимо, у мене є кадр даних:
data <- data.frame(x1=rnorm(10), x2=rnorm(10), x3=runif(10), x4=runif(10,15,20))
cor(data, use="pairwise.complete.obs")
x1 x2 x3 x4
x1 1.00000000 -0.3325757 0.08567911 0.2651721
x2 -0.33257569 1.0000000 -0.18761301 0.4660056
x3 0.08567911 -0.1876130 1.00000000 -0.3321003
x4 0.26517210 0.4660056 -0.33210031 1.0000000
Тоді я хотів би повернути кадр даних, зберігаючи лише x1 і x3 (враховуючи, що x2 і x4 мають співвідношення 0,46)
Відповіді:
3 для відповіді № 1Обчисліть кореляційну матрицю cd
, перевіряючи, чи є щось >0.4
. Потім підмножимо, ігноруючи diag
onals, де row==col
:
cd <- abs(cor(data, use="pairwise.complete.obs")) > 0.4
data[-unique(col(cd)[cd & row(cd) != col(cd)])]
2 для відповіді № 2
Ви можете спробувати:
set.seed(50)
data <- data.frame(x1=rnorm(10), x2=rnorm(10), x3=runif(10), x4=runif(10,15,20))
mycor <- cor(data, use="pairwise.complete.obs")
data[, !apply(mycor, 2, function (x) max(x[-which.max(x)]) >.4 | min(x[which.min(x)]) < -.4) ]