给出一系列独立但不完全相同的伯努利试验,其中载体给出成功概率,例如:
x <- seq(0, 50, 0.1)
prob <- - x*(x - 50)/1000 # trial probabilities for trials 1 to 501
从每次试验获得随机变量的最有效方法是什么?我假设矢量化是要走的路。
我知道两个函数给伯努利随机变量:
rbernoulli
的purr
,它不接受成功概率向量作为输入。在这种情况下,可以将函数包装在apply
类型的操作中。rbinom
的 size = 1
给出了伯努利随机变量。它还接受概率向量,以便:
rbinom(n = length(prob), size = 1, prob = prob)
给出一个正确长度的输出。但是,我并不完全确定这实际上是我想要的。帮助文件?rbinom
中似乎相关的位是:
对于rbinom,结果的长度由n确定,并且是 另一个的数值参数的最大长度 功能
除了n之外的数字参数被循环到长度 结果。只使用逻辑参数的第一个元素。
但是,n
是一个没有默认值的参数,所以我不确定第一句话是什么意思。我认为第二句话意味着我得到了我想要的东西,因为只有size = 1
才能被回收。但是this thread似乎表明此方法不起作用。
这个blog post也提供了一些其他方法。一位评论员使用rbinom
提到了我的建议。
答案 0 :(得分:2)
测试rbinom
的另一种方法是为prob
进行矢量化,利用N个bernoulli随机变量之和为分母N的二项式随机变量:
x <- seq(0, 50, 0.1)
prob <- -x*(x - 50)/1000
n <- rbinom(prob, size=1000, prob)
par(mfrow=c(1, 2))
plot(prob ~ x)
plot(n ~ x)
答案 1 :(得分:1)
如果您不相信互联网上的随机陌生人而且不懂文档,也许您可以通过测试来说服自己。只需设置随机种子即可获得可重现的结果:
public function actionUpload()
{
$model = new UploadForm();
if (Yii::$app->request->isPost) {
$model->imageFile = UploadedFile::getInstance($model, 'imageFile');
if ($model->upload()) {
// file is uploaded successfully
return;
}
}
return $this->render('upload', ['model' => $model]);
}
class UploadForm extends Model
{
/**
* @var UploadedFile
*/
public $imageFile;
public function rules()
{
return [
[['imageFile'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg'],
];
}
public function upload()
{
if ($this->validate()) {
$this->imageFile->saveAs('uploads/' . $this->imageFile->baseName . '.' . $this->imageFile->extension);
return true;
} else {
return false;
}
}
}