Сгенерировать матрицу с определенными значениями, чтобы ее стандартное отклонение составляло 1? - PullRequest
0 голосов
/ 14 февраля 2019

В настоящее время я изучаю книгу «Введение в R» и полностью застрял в следующем вопросе:

Создайте матрицу 5x5 (M), все ее записи взяты из униформы.распределение с sd 1 и означает, что это номер столбца элемента.(так значит (matrix [, I]) == column (i), sd (matrix) == 1)

Я должен использовать функцию sapply().

Я думал о чем-то вроде этого:

m <- matrix(runif(25), nrow = 5, ncol = 50
sapply(matrix, function(x) sd(x) == 1)

Но эта часть уже не работает, и я просто застрял.Помощь будет оценена!

Ответы [ 4 ]

0 голосов
/ 14 февраля 2019

Вы должны найти диапазоны pdf (a, b), которые соответствуют каждому среднему, сначала пара sd.Среднее значение равномерного dist равно

  • mu <- (b + a) / 2. Значения mu индексируются как 1: 5. </li>
  • sd равномерного dist равно (b - a) / sqrt (12)
  • sd зафиксировано на 1, поэтому используйте уравнение sd для решения для b.
  • Затем подключите b к уравнению mu, чтобы найти для a
  • Теперь у вас есть параметры a, b унифицированного dist
  • Тогда функция sapply выглядит так:

    z <- sapply (1: 5,function (x) runif (5, 2 * x - (2 * x + sqrt (12) / 2), (2 * x + sqrt (12) / 2))) </p>

Run summary(z) выдаст вам статистику.Из-за малого размера выборки означает, что выборка будет отключена.Чтобы проверить, измените размер образца runif с 5 на 100000. Затем снова запустите summary(z).Вы увидите, что значения сходятся к среднему значению индекса.

0 голосов
/ 14 февраля 2019

Из случайного равномерного распределения можно имитировать только значения между диапазонами с одинаковой вероятностью каждого, являясь ожидаемым средним значением, когда n переходит в бесконечность, чтобы быть средним значением между минимальным и максимальным значениями.С точки зрения равномерного распределения среднее значение и стандартное отклонение не могут быть определены в функции.Что вы можете сделать, это симулировать так, чтобы среднее значение (т.е. среднее значение) было бы ожидаемым числом, но стандартное отклонение не будет равно 1:

set.seed(1)

numrow<-5
numcol<-5
Mat<-matrix(NA, nrow = numrow, ncol = numcol)
for(i in 1:numcol){
  Mat[,i]<- runif(numrow, min = i-0.5, max = i+0.5)
}
Mat

# [,1]     [,2]     [,3]     [,4]     [,5]
# [1,] 0.7655087 2.398390 2.705975 3.997699 5.434705
# [2,] 0.8721239 2.444675 2.676557 4.217619 4.712143
# [3,] 1.0728534 2.160798 3.187023 4.491906 5.151674
# [4,] 1.4082078 2.129114 2.884104 3.880035 4.625555
# [5,] 0.7016819 1.561786 3.269841 4.277445 4.767221

Чтобы увидеть формулы ожидаемого среднегои ожидаемая разница (следовательно, стандартное отклонение), я имею в виду https://en.wikipedia.org/wiki/Uniform_distribution_(continuous)

0 голосов
/ 14 февраля 2019

Среднее может быть установлено следующим образом:

my_uniform <- function(col_nbr) {
  runif(5, min = col_nbr-sqrt(12)/2, max=col_nbr+sqrt(12)/2)
}

M <- sapply(1:5, my_uniform)

Это приведет к std = 1 для каждого столбца, а среднее значение будет равно количеству столбцов в каждом столбце.Формуляр для среднего:

mean

Формуляр для SDT:

std

0 голосов
/ 14 февраля 2019

Теперь это должен быть правильный способ определения равномерного распределения.Если среднее значение определяется как mean=0.5*(a+b), то определение верхнего предела, подобного этому, приведет к среднему значению номера столбца.

 sapply(1:5, function(x){runif(5, min = 0, max = x*2)})

См. Этот маленький эксперимент МонтеКарло:

mean(runif(50000, min = 0, max = 1*2))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...