R 中通过泊松分布的函数?
Functions through Poisson distribution in R?
我正在尝试 运行 一项试验,该试验 运行 通过泊松分布对几个变化的变量进行试验并给出输出。历时三年,有十二丛。所有 1-6 组均为对照组,7 至 12 组均为干预组。
第一年会有 1-12 组。有6个控制和6个干预。第二年和第三年也一样。所以在第一年你得到一个 v 并且 v 对于每个集群都是相同的但是每个集群都有不同的 lambda。
这是基本代码和等式。
mu=3.4
lambda=rnorm(1,0,.27)
v=rnorm(1,0,.53)
e=rnorm(1,0,.74)
x=rpois(1, exp(mu+lambda+v+e))
Lambda 和 v 与那些 st 正态分布。每个组的偏差。我想在第 1 年让它通过等式取 v=rnorm(1,0,.53) 和 运行。同时,我希望它采用 lambda=rnorm(1,0,.27) 和 运行,对于从第一年开始具有相同 v 的 12 个集群中的每一个。所以基本上每年有一个 v 和 12 个 lambda。我相信这可以通过功能来完成,但我很难做到。我尝试使用 for 循环,但我不认为它完全符合我的要求。这是带有 for 循环的代码:
mu=3.4
lambda=numeric(length=12)
v=numeric(length=3)
for (i in 1:120{
lambda[i]=rnorm(1,0,.27)
}
for (j in 1:3){
v[j]=rnorm(1,0,.53)
}
e=rnorm(1,0,.74)
x=rpois(1, exp(mu+lambda+v+e))
我不太确定这样做是否正确,所以如果有更多经验的人可以解释我的代码在做什么以及如何使用 lambda 和 v 的函数让它做我想做的事,我会非常高兴欣赏它。感谢您的帮助。
听起来你有 12 个组和 3 年总共 36 个数据点。对于每一年 i,您都有一个值 v[i] 和 12 个组特定值 lambda[1]、lambda[2]、...、lambda[12]。您并没有真正指定每个 e 的绘制方式,所以我们假设有一个全局 e 值。
您可以为每个组和年份建立一个包含相关参数的数据框:
dat <- expand.grid(group=1:12, year=1:3)
然后您可以在数据框中指定每个参数:
set.seed(144)
dat$lambda <- rnorm(36, 0, .27)
dat$v <- ave(dat$year, dat$year, FUN=function(x) rnorm(1, 0, .53))
dat$e <- rnorm(1, 0, .74)
dat$mu <- 3.4
最后,您可以根据所有其他指定参数计算泊松分布的 x 值。
dat$x <- apply(dat, 1, function(x) rpois(1, exp(sum(x[3:5]))))
dat
# group year lambda e v x
# 1 1 1 -0.445650165 0.4905398 -0.68348553 0
# 2 2 1 0.162758849 0.4905398 -0.68348553 0
# 3 3 1 -0.127948650 0.4905398 -0.68348553 0
# 4 4 1 -0.485355518 0.4905398 -0.68348553 0
# 5 5 1 -0.383702670 0.4905398 -0.68348553 1
# 6 6 1 0.042899625 0.4905398 -0.68348553 1
# 7 7 1 0.035036875 0.4905398 -0.68348553 3
# 8 8 1 -0.339165570 0.4905398 -0.68348553 0
# 9 9 1 0.039870111 0.4905398 -0.68348553 0
# 10 10 1 0.264376944 0.4905398 -0.68348553 2
# 11 11 1 -0.158722934 0.4905398 -0.68348553 2
# 12 12 1 0.065626713 0.4905398 -0.68348553 0
# 13 1 2 -0.119740653 0.4905398 -0.94943812 1
# 14 2 2 -0.273056956 0.4905398 -0.94943812 0
# 15 3 2 0.082479733 0.4905398 -0.94943812 1
# 16 4 2 0.004055817 0.4905398 -0.94943812 3
# 17 5 2 -0.136651972 0.4905398 -0.94943812 0
# 18 6 2 -0.379565000 0.4905398 -0.94943812 1
# 19 7 2 -0.347022844 0.4905398 -0.94943812 0
# 20 8 2 -0.025990597 0.4905398 -0.94943812 0
# 21 9 2 0.136014382 0.4905398 -0.94943812 3
# 22 10 2 0.063815822 0.4905398 -0.94943812 0
# 23 11 2 0.067932957 0.4905398 -0.94943812 1
# 24 12 2 0.099834989 0.4905398 -0.94943812 0
# 25 1 3 -0.135519422 0.4905398 -0.04616012 3
# 26 2 3 -0.226890654 0.4905398 -0.04616012 2
# 27 3 3 -0.024936233 0.4905398 -0.04616012 1
# 28 4 3 -0.182543225 0.4905398 -0.04616012 2
# 29 5 3 0.537843637 0.4905398 -0.04616012 2
# 30 6 3 0.291349032 0.4905398 -0.04616012 3
# 31 7 3 0.255455171 0.4905398 -0.04616012 0
# 32 8 3 -0.053874069 0.4905398 -0.04616012 5
# 33 9 3 0.052474650 0.4905398 -0.04616012 0
# 34 10 3 -0.317645288 0.4905398 -0.04616012 0
# 35 11 3 0.162754030 0.4905398 -0.04616012 1
# 36 12 3 0.337018922 0.4905398 -0.04616012 8
我正在尝试 运行 一项试验,该试验 运行 通过泊松分布对几个变化的变量进行试验并给出输出。历时三年,有十二丛。所有 1-6 组均为对照组,7 至 12 组均为干预组。
第一年会有 1-12 组。有6个控制和6个干预。第二年和第三年也一样。所以在第一年你得到一个 v 并且 v 对于每个集群都是相同的但是每个集群都有不同的 lambda。
这是基本代码和等式。
mu=3.4
lambda=rnorm(1,0,.27)
v=rnorm(1,0,.53)
e=rnorm(1,0,.74)
x=rpois(1, exp(mu+lambda+v+e))
Lambda 和 v 与那些 st 正态分布。每个组的偏差。我想在第 1 年让它通过等式取 v=rnorm(1,0,.53) 和 运行。同时,我希望它采用 lambda=rnorm(1,0,.27) 和 运行,对于从第一年开始具有相同 v 的 12 个集群中的每一个。所以基本上每年有一个 v 和 12 个 lambda。我相信这可以通过功能来完成,但我很难做到。我尝试使用 for 循环,但我不认为它完全符合我的要求。这是带有 for 循环的代码:
mu=3.4
lambda=numeric(length=12)
v=numeric(length=3)
for (i in 1:120{
lambda[i]=rnorm(1,0,.27)
}
for (j in 1:3){
v[j]=rnorm(1,0,.53)
}
e=rnorm(1,0,.74)
x=rpois(1, exp(mu+lambda+v+e))
我不太确定这样做是否正确,所以如果有更多经验的人可以解释我的代码在做什么以及如何使用 lambda 和 v 的函数让它做我想做的事,我会非常高兴欣赏它。感谢您的帮助。
听起来你有 12 个组和 3 年总共 36 个数据点。对于每一年 i,您都有一个值 v[i] 和 12 个组特定值 lambda[1]、lambda[2]、...、lambda[12]。您并没有真正指定每个 e 的绘制方式,所以我们假设有一个全局 e 值。
您可以为每个组和年份建立一个包含相关参数的数据框:
dat <- expand.grid(group=1:12, year=1:3)
然后您可以在数据框中指定每个参数:
set.seed(144)
dat$lambda <- rnorm(36, 0, .27)
dat$v <- ave(dat$year, dat$year, FUN=function(x) rnorm(1, 0, .53))
dat$e <- rnorm(1, 0, .74)
dat$mu <- 3.4
最后,您可以根据所有其他指定参数计算泊松分布的 x 值。
dat$x <- apply(dat, 1, function(x) rpois(1, exp(sum(x[3:5]))))
dat
# group year lambda e v x
# 1 1 1 -0.445650165 0.4905398 -0.68348553 0
# 2 2 1 0.162758849 0.4905398 -0.68348553 0
# 3 3 1 -0.127948650 0.4905398 -0.68348553 0
# 4 4 1 -0.485355518 0.4905398 -0.68348553 0
# 5 5 1 -0.383702670 0.4905398 -0.68348553 1
# 6 6 1 0.042899625 0.4905398 -0.68348553 1
# 7 7 1 0.035036875 0.4905398 -0.68348553 3
# 8 8 1 -0.339165570 0.4905398 -0.68348553 0
# 9 9 1 0.039870111 0.4905398 -0.68348553 0
# 10 10 1 0.264376944 0.4905398 -0.68348553 2
# 11 11 1 -0.158722934 0.4905398 -0.68348553 2
# 12 12 1 0.065626713 0.4905398 -0.68348553 0
# 13 1 2 -0.119740653 0.4905398 -0.94943812 1
# 14 2 2 -0.273056956 0.4905398 -0.94943812 0
# 15 3 2 0.082479733 0.4905398 -0.94943812 1
# 16 4 2 0.004055817 0.4905398 -0.94943812 3
# 17 5 2 -0.136651972 0.4905398 -0.94943812 0
# 18 6 2 -0.379565000 0.4905398 -0.94943812 1
# 19 7 2 -0.347022844 0.4905398 -0.94943812 0
# 20 8 2 -0.025990597 0.4905398 -0.94943812 0
# 21 9 2 0.136014382 0.4905398 -0.94943812 3
# 22 10 2 0.063815822 0.4905398 -0.94943812 0
# 23 11 2 0.067932957 0.4905398 -0.94943812 1
# 24 12 2 0.099834989 0.4905398 -0.94943812 0
# 25 1 3 -0.135519422 0.4905398 -0.04616012 3
# 26 2 3 -0.226890654 0.4905398 -0.04616012 2
# 27 3 3 -0.024936233 0.4905398 -0.04616012 1
# 28 4 3 -0.182543225 0.4905398 -0.04616012 2
# 29 5 3 0.537843637 0.4905398 -0.04616012 2
# 30 6 3 0.291349032 0.4905398 -0.04616012 3
# 31 7 3 0.255455171 0.4905398 -0.04616012 0
# 32 8 3 -0.053874069 0.4905398 -0.04616012 5
# 33 9 3 0.052474650 0.4905398 -0.04616012 0
# 34 10 3 -0.317645288 0.4905398 -0.04616012 0
# 35 11 3 0.162754030 0.4905398 -0.04616012 1
# 36 12 3 0.337018922 0.4905398 -0.04616012 8