/ / підмножина кадру даних відповідно до критеріїв на основі кореляції - r, підмножина

Підмножина кадру даних за критерієм, заснованим на кореляції - r, підмножина

У мене є кадр даних, і я хотів би створитифункція, в якій зберігаються лише змінні з низькою кореляцією. Це означає перегляд парної кореляції кожної змінної з рештою змінних, а для тих змінних, у яких щонайменше один коефіцієнт кореляції більший за 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. Потім підмножимо, ігноруючи diagonals, де 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) ]