R中的概率函数

R中的概率函数,r,function,probability,distribution,R,Function,Probability,Distribution,我试图在R中编写函数s_I=p(X+X+Y=I)。我有以下分布: 我写这个代码 a_i <- function(k){ if (k == 0) return (3/4) if (k == 1) return (1/8) if (k == 2) return (1/8) else return(0) } b_i <- function(k){ if (k == 0) return (1/10) if (k == 1) return (8/10) if (

我试图在R中编写函数
s_I=p(X+X+Y=I)
。我有以下分布:

我写这个代码

a_i <- function(k){
  if (k == 0) return (3/4)
  if (k == 1) return (1/8)
  if (k == 2) return (1/8)
  else return(0)
}

b_i <- function(k){
  if (k == 0) return (1/10)
  if (k == 1) return (8/10)
  if (k == 2) return (1/10)
  else return(0)
}

s_i<-function(i){
  sas<-0
  for (x1 in 0:2){
    for(x2 in 0:2){ 
      for(y in 0:2){
        if(x1+x2+y==i){
        sum=a_i(x1)*a_i(x2)*b_i(y)
        sas=sas+sum
        }
      }
    }
  }
  return(sas)
}

首先,你的函数是正确的


您的方法

应用您的函数,您可以看到
data.frame
格式的分布,如下所示

v <- 0:6
res1 <- data.frame(s = v, prob = sapply(0:6, s_i))

交叉核对

在下面的内容中,我生成整个样本空间来验证您获得的分布

space <- setNames(expand.grid(replicate(3,0:2,simplify = F)),c("X1","X2","Y"))
space$s <- rowSums(space)
space <- within(space, prob <- Vectorize(a_i)(X1)*Vectorize(a_i)(X2)*Vectorize(b_i)(Y))
然后,分布可以概括为

res2 <- aggregate(prob ~ s, space,sum)

这与res1相同首先,您的功能是正确的


您的方法

应用您的函数,您可以看到
data.frame
格式的分布,如下所示

v <- 0:6
res1 <- data.frame(s = v, prob = sapply(0:6, s_i))

交叉核对

在下面的内容中,我生成整个样本空间来验证您获得的分布

space <- setNames(expand.grid(replicate(3,0:2,simplify = F)),c("X1","X2","Y"))
space$s <- rowSums(space)
space <- within(space, prob <- Vectorize(a_i)(X1)*Vectorize(a_i)(X2)*Vectorize(b_i)(Y))
然后,分布可以概括为

res2 <- aggregate(prob ~ s, space,sum)

这与一般反馈相同,我要改变的第一件事就是你的代码名。我将
a_I
重命名为
p_x
,并将
b_I
重命名为
p_y
。从概念上讲,将代码与问题陈述联系起来会更容易。作为一般反馈,我要更改的第一件事是代码的名称。我将
a_I
重命名为
p_x
,并将
b_I
重命名为
p_y
。从概念上讲,将代码与问题语句联系起来会更容易。