Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.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中创建一个新的概率分布(依赖于以前的r.v.)_R_Function_Statistics_Probability Density - Fatal编程技术网

在r中创建一个新的概率分布(依赖于以前的r.v.)

在r中创建一个新的概率分布(依赖于以前的r.v.),r,function,statistics,probability-density,R,Function,Statistics,Probability Density,我想写这个pdf并用它生成随机数 假设X是一个仅取0或1值的随机变量,pdf如下所示: P(X_t) = a^[(1-X_(t-1))*X_t] * (1-a)^[(1-X_(t-1))*(1-X_t)] * b^[X_(t-1)*(1-X_t)] * (1-b)^[X_(t-1)*X_t] X_t:当前r.v.X_(t-1):上一个r.v.,其中t=1,2,…,t和t=0处的初始值被给出。最后,a和b是两个已知的概率。不确定我是否完全理解,但你可以做如下操作 如果我们说“y”是之前的变现,而

我想写这个pdf并用它生成随机数

假设X是一个仅取0或1值的随机变量,pdf如下所示:

P(X_t) = a^[(1-X_(t-1))*X_t] * (1-a)^[(1-X_(t-1))*(1-X_t)] * b^[X_(t-1)*(1-X_t)] * (1-b)^[X_(t-1)*X_t]

X_t
:当前r.v.
X_(t-1)
:上一个r.v.,其中t=1,2,…,t和t=0处的初始值被给出。最后,a和b是两个已知的概率。

不确定我是否完全理解,但你可以做如下操作

如果我们说“y”是之前的变现,而“x”是当前变现,那么我们有:

P(x=0|y=0) = 1-a
P(x=1|y=0) = a
P(x=0|y=1) = b
P(x=1|y=1) = 1-b

然后我们可以在[0,1]中生成均匀变量U,如果y=0,那么设置x=0,如果U不确定我是否完全理解,但是你可以做如下操作

如果我们说“y”是之前的变现,而“x”是当前变现,那么我们有:

P(x=0|y=0) = 1-a
P(x=1|y=0) = a
P(x=0|y=1) = b
P(x=1|y=1) = 1-b

那么我们可以在[0,1]中生成均匀变量U,如果y=0,那么设置x=0,如果U不清楚x(t)如何依赖于x(t)-根据你的公式。它应该是X(t)是X(t-1)和X(t-2)的函数吗?不,它是类似于伯努利的pdf,即P(X)=P^X。(1-p)^(1-x)。所以pdf通常依赖于x,但这张pdf中的内容是它依赖于x和上一张x。我写x_t是为了使它不同于上一张x_t(t-1)。我在上一张回答中犯了一个很大的错误,但我现在已经更正了。请看一看。根据你的公式,不清楚X(t)如何依赖于X(t)。它应该是X(t)是X(t-1)和X(t-2)的函数吗?不,它是类似于伯努利的pdf,即P(X)=P^X。(1-p)^(1-x)。所以pdf通常依赖于x,但这张pdf中的内容是它依赖于x和上一张x。我写x_t是为了使它不同于上一张x_t(t-1)。我在上一张回答中犯了一个很大的错误,但我现在已经更正了。请看一看。
rhany(10, 0.1, 0.7)
[1] 0 1 0 1 1 1 0 1 1 0
library(Rcpp)

cppFunction('NumericVector rhanya(double a, double b, NumericVector zs) {
    int n = zs.size();
    NumericVector sim = zs;
    for (int i = 1; i < n; i++) {
        sim[i] = (sim[i-1] == 0) * ((sim[i] <= 1-a) * 0 + (sim[i] > a) * 1) + (sim[i-1] == 1) * ((sim[i] <= b) * 0 + (sim[i] > 1-b) * 1);
    }
    return(sim);
}')

rhany1 <- function(n, a, b, x0 = 0) {
    sim <- c(x0, runif(n-1))
    rhanya(a, b, sim)
}
set.seed(123); bc <- rhany(1e7, 0.1, 0.7)
set.seed(123); ac <- rhany1(1e7, 0.1, 0.7)
all.equal(ac, bc)
[1] TRUE