Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 生成具有特定值的矩阵,使其标准偏差为1?_R - Fatal编程技术网

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

R 生成具有特定值的矩阵,使其标准偏差为1?,r,R,我目前正在读一本《R简介》,我完全被以下问题困住了: 创建一个5x5矩阵(M),其所有条目均取自均匀分布,sd 1和mean为元素的列号。(因此平均值(矩阵[,I])==第(I)列,sd(矩阵)==1) 我必须使用sapply()函数 我在想这样的事情: m <- matrix(runif(25), nrow = 5, ncol = 50 sapply(matrix, function(x) sd(x) == 1) m这应该是定义均匀分布的正确方法。如果将平均值定义为mean=0.5*(

我目前正在读一本《R简介》,我完全被以下问题困住了:

创建一个5x5矩阵(M),其所有条目均取自均匀分布,sd 1和mean为元素的列号。(因此平均值(矩阵[,I])==第(I)列,sd(矩阵)==1)

我必须使用
sapply()
函数

我在想这样的事情:

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

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

从随机均匀分布中,我们只能模拟一个范围内的值,每个范围内的值的概率相同,即当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
set.seed(1)

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

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)

my_uniform您必须首先找到适合每个平均值、sd对的pdf范围(a、b)。均匀距离的平均值为


  • 您有一个语法错误。看起来您使用的是0而不是闭括号。此外,请详述你的问题。你说它不起作用是什么意思?您是否收到错误消息?你还试过什么?@OTStats这只是一个愚蠢的开始,但我不认为这是应该做的。这不仅是一个很好的例子,说明我真的不知道从哪里开始。对于分类的混乱,我很抱歉,
    sd=1
    是否意味着25个数字的sd为1,或者每列的sd为1?@DarrenTsai总数的sd必须为1,每列的平均值应该等于列数。我发现您无法使总数的sd为1。例如,
    m确实生成了一个5x5矩阵,其sd为1,但我如何使其成为每列的平均值是元素的列号?(例如,对于2x2矩阵,第一列必须是0.5和1.5这样的值,因为第一列的平均值是1)我认为问题在于你有随机数,所以只有当随机数变为无穷大时,平均值才会等于列数,因此,根据定义,在这样一个小样本中存在偏差。该代码对平均值确实有效。我也在想,单位分布的sd总是1,所以我不能忽略这一部分吗?你是怎么想到减去sqrt(12)/2的?这是某种著名的方程式吗?总数的sd必须是1,每列的平均值应该等于列数,所以这不起作用,很抱歉没有在我的问题中正确地使用它。这是个好主意。我知道你使用的是均匀分布的方差公式,即
    (max-min)^2/12=1
    。也许你可以为还没学过的人解释一下。我刚刚编辑了这个问题,这样更容易理解。它的意思应该是(矩阵[,I])==colnum(I),sd(矩阵)==1Ok。这里包括一些数学知识。您的标准差为1,您的平均值应为列号。因此,您需要设置最大值和最小值,以满足这两个条件。我所做的是设置max=column\u number+c和min=column\u number-c。现在你的平均条件满足了。要得到c,你的第一个条件是std=1。这将导致c的公式为c=sqrt(12)/2