生成具有特定值的矩阵,使其标准偏差为1?

时间:2019-02-14 14:17:06

标签: r

我目前正在阅读“ R简介”一书,而我完全陷入了以下问题:

  

创建一个5x5矩阵(M),其所有条目均取自均匀分布,且标准差为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 :(得分:2)

可以通过以下方式设置平均值:

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

答案 1 :(得分:0)

现在这应该是定义均匀分布的正确方法。如果将平均值定义为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))

答案 2 :(得分:0)

从随机均匀分布中,每个人只能以相同的概率模拟一个范围内的值,这是当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)

答案 3 :(得分:0)

您必须找到适合每个均数,sd对的pdf范围(a,b)。均匀距离的平均值是

  • mu <-(b + a)/ 2 mu值从1:5开始索引。
  • 统一dist的sd为(b-a)/ sqrt(12)
  • sd固定为1,因此请使用sd方程求解b。
  • 然后在mu方程中插入b来求解a
  • 现在您有了统一dist的a,b参数
  • sapply函数如下所示:

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

运行summary(z)将为您提供输出统计信息。由于样本量小,样本工具将关闭。要进行测试,请将runif样本大小从5更改为100000。然后再次运行summary(z)。您将看到这些值收敛到索引均值。