преобразовать матрицу корреляции в кадр данных в R - PullRequest
0 голосов
/ 02 мая 2019
data(iris)
iris$Species<-NULL
cor(iris)

и получите кор.матрица

             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length    1.0000000  -0.1175698    0.8717538   0.8179411
Sepal.Width    -0.1175698   1.0000000   -0.4284401  -0.3661259
Petal.Length    0.8717538  -0.4284401    1.0000000   0.9628654
Petal.Width     0.8179411  -0.3661259    0.9628654   1.0000000

давайте получим описательную статистику

library(psych)
describe(iris)

и результаты

             vars   n mean   sd median trimmed  mad min max range  skew kurtosis   se
Sepal.Length    1 150 5.84 0.83   5.80    5.81 1.04 4.3 7.9   3.6  0.31    -0.61 0.07
Sepal.Width     2 150 3.06 0.44   3.00    3.04 0.44 2.0 4.4   2.4  0.31     0.14 0.04
Petal.Length    3 150 3.76 1.77   4.35    3.76 1.85 1.0 6.9   5.9 -0.27    -1.42 0.14
Petal.Width     4 150 1.20 0.76   1.30    1.18 1.04 0.1 2.5   2.4 -0.10    -1.36 0.06

Там много статик, но нам нужны только средние значения и сд

Итак, вопрос.Если у нас есть корреляция между переменными, и мы знаем среднее и SD этих переменных, как преобразовать кор.матрица к фрейму данных.Понятно, что, скорее всего, значения во фрейме данных будут отличаться от реальных.

1 Ответ

0 голосов
/ 03 мая 2019

Вы не указали распределение вероятностей, поэтому я предполагаю, что вам нужен кадр данных с нормальным распределением, поскольку вы упоминаете среднее значение и ковариацию.

Вы можете использовать функцию mvrnorm() изMASS пакет.Он сгенерирует многомерное нормальное распределение и будет иметь сходную матрицу корреляции с исходным набором.Но обратите внимание, что только корреляция и среднее значение будут точно такими же, если только исходные данные не имеют такое же распределение.

library(MASS)
library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following object is masked from 'package:MASS':
#> 
#>     select
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
data("iris")
iris$Species<-NULL
C <- cov(iris) # Note covariance, not cor
mu <- colMeans(iris)
df <- as_tibble(mvrnorm(10000,mu,C))
cor(df)
#>              Sepal.Length Sepal.Width Petal.Length Petal.Width
#> Sepal.Length    1.0000000  -0.1269997    0.8728482   0.8220813
#> Sepal.Width    -0.1269997   1.0000000   -0.4334930  -0.3707066
#> Petal.Length    0.8728482  -0.4334930    1.0000000   0.9633552
#> Petal.Width     0.8220813  -0.3707066    0.9633552   1.0000000
cor(iris)
#>              Sepal.Length Sepal.Width Petal.Length Petal.Width
#> Sepal.Length    1.0000000  -0.1175698    0.8717538   0.8179411
#> Sepal.Width    -0.1175698   1.0000000   -0.4284401  -0.3661259
#> Petal.Length    0.8717538  -0.4284401    1.0000000   0.9628654
#> Petal.Width     0.8179411  -0.3661259    0.9628654   1.0000000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...