R - 构造矩阵,模拟概率,包含在新矩阵中并在直方图上显示

时间:2014-09-05 05:43:53

标签: r matrix

尝试自学R.使用需要我的朋友的问题:

  • 构建一个包含5000行和20列的矩阵
  • 每列代表从硬币#1到#20
  • 的折腾
  • 每列必须代表50次硬币投掷。
  • 从第1列第1枚硬币到第20列第20枚硬币的概率为0.05到1

我不太确定如何循环这个或最有效的方式来解决它。我需要增加.05的增量吗?

  • 找出每列的均值和方差 将结果保存在20 * 2矩阵中。

- 使用2 * 4矩阵将前8列放入直方图中

- 每个主标题都是硬币#。

这是我到目前为止的代码。我想我在某些方面走在了正确的轨道上。任何帮助表示赞赏。感谢

test<-matrix(nrow=5000,ncol=20)
for(i in 1:20){

test<-matrix(nrow=5000,ncol=20,data=
c(rbinom(n=5000, size=50, prob=.05),rbinom(n=5000, size=50, prob=.10)
} ??




testdescstats<-matrix(nrow=20,ncol=2)
for(i in 1:20){

testdescstats[i,1]<-mean(test[,i])
testdescstats[i,2]<-var(test[,i])
}


split.screen(c(2,4))
for(i in 1:8){
screen(i)
hist(test[,i],paste0 graph titles?
}

2 个答案:

答案 0 :(得分:0)

for循环在R中是禁止的,但对于这个例子,它们非常快

创建逻辑矩阵(heads = TRUEtails = FALSE

mat <- matrix(TRUE, ncol = 20, nrow = 5000)

使用由列确定的硬币(prob)的重量来模拟硬币投掷

for (i in 1:20) 
  mat[,i] <- sample(c(TRUE, FALSE), size = 5000, prob = c(i/20, 1 - i/20), replace = TRUE)

使用apply获取列平均值和差异。您的价值可能会有所不同。

apply(mat, 2, mean)
 [1] 0.0506 0.0980 0.1520 0.2046 0.2496 0.2996 0.3460 0.3962 0.4504 0.5110 0.5528 0.6108 0.6560 0.7024 0.7528 0.8120 0.8496
[18] 0.8996 0.9498 1.0000

apply(mat, 2, var)
 [1] 0.04804925 0.08841368 0.12892178 0.16277139 0.18733731 0.20988182 0.22632927 0.23927341 0.24758936 0.24992899
[11] 0.24726161 0.23777091 0.22570914 0.20907606 0.18612939 0.15268654 0.12780540 0.09033791 0.04768950 0.00000000

答案 1 :(得分:0)

你真的只是想让我们为你做这件事吗?不确定这是最好的学习练习,但是你去了

#create matrix
prob <- seq(.05, 1, length.out=20)
x <- sapply(prob, function(p) rbinom(5000, 50, p))

#summarize
r <- t(apply(x, 2, function(z) c(mean(z), var(z))))

#plot histograms
layout(matrix(1:8, nrow=2, byrow=T))
for(i in 1:8) hist(x[,i], main=i)

enter image description here