matlab - 是否有用于计算二项分布标准的 Matlab 函数?
问题描述
我有一个二进制向量 V,其中每个条目都描述了整个会话中相关试验的成功 (1) 或失败 (0)。(向量的长度表示会话中的试验次数)。我可以很容易地计算会话的成功率(通过取向量的平均值,即(sum(V)/length(V)))。
但是我还需要知道每个会话的方差或标准。
为了计算,可以使用Matlab std 函数(即取std(V)/length(V))吗?或者,我应该使用特别适合二项分布的东西吗?是否有特定于“成功/失败”分布的 Matlab 标准(或方差)函数?
谢谢
解决方案
如果满足二项分布的假设,
- 固定数量的n次独立伯努利试验,
- 每个都有恒定的成功概率p,
那么我不确定这是必要的,因为参数n
和p
可从您的数据中获得。
请注意,我们将成功次数(在n次试验中)建模为随二项式( n,p)分布分布的随机变量。
n = length(V);
p = mean(V); % equivalently, sum(V)/length(V)
% the mean is the maximum likelihood estimator (MLE) for p
% note: need large n or replication to get true p
那么成功概率不变的独立伯努利试验中成功次数的标准差就是.n
p
sqrt(n*p*(1-p))
当然,如果您有多个样本,您可以从数据中评估这一点。请注意,这与std(V)
. 在您的数据格式中,它需要有多个向量、V1
、V2
、V2
等(复制),那么成功次数的样本标准偏差将从以下获得。
% Given V1, V2, V3 sets of Bernoulli trials
std([sum(V1) sum(V2) sum(V3)])
如果您已经知道您的参数: n,p
你可以很容易地获得它。
n = 10;
p = 0.65;
pd = makedist('Binomial',n, p)
std(pd) % 1.5083
或者
sqrt(n*p*(1-p)) % 1.5083
如前所述。
标准差是否随 n 增加?
OP问:
有些事情困扰着我..如果 std =
sqrt(n*p*(1-p))
,那么它会随着n
. 增加时std不应该减少n
吗?
确认与推导:
定义:
然后,仅从期望和方差的定义中,我们可以显示方差(如果添加平方根,则与标准差类似)随n
.
由于平方根是非递减函数,我们知道标准差也存在相同的关系。
推荐阅读
- python - 在python中旋转高维正交向量
- laravel - 我在 github 上推送后,Laravel 存储链接不起作用
- reactjs - 如何使用映射在 React 函数中传递动态和静态参数{混合字段变量和函数}?
- jasper-reports - JasperReports 可编辑的 pdf 字段
- python - 如何在pyplot中为水平和垂直尺寸设置不同的dpi值
- android - 调整 ViewGroup 大小后渐变背景缩放
- php - PHP Slim 4 到处获取请求(Psr\Http\Message\RequestInterface)
- flutter - Flutter 自定义 NotificationListener 没有收到通知?
- python - 实现了模型网络,但训练误差和验证误差都没有减少
- javascript - 如何将 promise 对象中返回的 JSON 对象分配给全局变量?