跳到内容
主人
交换分支/标签
代码

最新提交

2acf2fd公司

Git统计

文件夹

永磁
未能加载最新提交信息。
类型
姓名
最新提交消息
提交时间
R
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

反思

这个R包附带了一个关于贝叶斯数据分析的课程和书籍:McElreath 2020。统计反思,第2版,CRC出版社。如果你在这本书的第一版中使用它,请参阅这个文件底部的注释。

它包含了进行后验分布的快速二次近似和哈密顿蒙特卡罗(通过RStan或cmdstanr-mc stan.org)的工具。很多软件包都这样做。这个包的特征区别在于它强制用户将模型指定为显式分布假设的列表。这比典型的基于公式的工具更乏味,但它也更灵活、更强大,而且——最重要的是——对教学有用。当学生必须写出模型的每一个细节时,他们实际上是在学习模型。

例如,可以使用以下公式列表指定一个简单的高斯模型:

f<-列表(y~dnorm(μ,sigma),μ~dnorm(0,10),西格玛~dexp(1))

列表中的第一个公式是结果的概率(可能性);第二个是prior for; 第三个是优先于西格玛.

快速安装

您可以在此处找到包含扩展安装和使用说明的手册:http://xcelab.net/rm/software/

这是简短的验证。

你需要安装rstan公司第一。http://mc-stan.org并按照平台说明操作。最大的挑战是如何配置一个C++编译器来处理R的安装。在的说明https://github.com/stan-dev/rstan/wiki/rstan-Getting-Started比较彻底。服从他们,你很可能会成功。

通过访问Stan有一些优点司令官而不是rstan。这些优点包括更新速度更快,因此可以更快地访问新功能。如果您想使用司令官而不是打包,那么您也可以使用

devtools::install\github(“stan dev/cmdstanr”)

如果以前未安装cmdstan,则还需要使用cmdstanr::安装\u cmdstan(). 然后你需要补充cmdstan=真对任何人乌兰姆使用cmdstan而不是rstan的代码。要将cmdstan用作默认接口,请执行以下操作:设置\u ulam_cmdstan(TRUE).

一旦安装了rstan和cmdstan(几乎就在那里),那么就可以安装了反思从R内部使用:

install.packages(c(“coda”,“mvtnorm”,“devtools”,“loo”,“dagitty”))devtools::install\github(“rmcelreath/rething”)

如果有任何问题,可能会在尝试安装时出现rstan公司,所以反思包裹和它没什么关系。有关获取的一些提示,请参阅上面链接的手册rstan公司安装。但请随时咨询网站的RStan部分:mc-stan.org网站有关RStan的最新信息。

二次逼近夸普

几乎任何普通的广义线性模型都可以用夸普. 要使用二次近似:

图书馆(反思)f<-列表(y~dnorm(μ,sigma),μ~dnorm(0,10),西格玛~dexp(1))适合<-quap(f,数据=列表(y=c(-1,1)),开始=列表(mu=0,sigma=1))

对象适合保存结果。对于边缘后验分布的总结,请使用摘要(适合)普瑞斯(fit):

平均标准差5.5%94.5%μ0.00 0.59-0.95 0.95西格玛0.84 0.33 0.31 1.36

它还支持矢量化参数,这对于分类非常方便。参见示例?呱呱.

在第一版教科书中,这个函数被称为地图. 它仍然可以与该别名一起使用。它被重新命名,因为地图是误导。这个函数产生后验分布的二次近似值,而不仅仅是最大后验概率(MAP)估计值。

哈密顿蒙特卡罗乌兰姆(和map2stan公司)

可以使用以下两种工具之一将相同的公式列表编译为Stan(mc Stan.org)模型:乌兰姆map2stan公司. 对于简单模型,它们是相同的。乌兰姆是一个新的工具,允许更大的灵活性,包括显式变量类型和自定义分布。map2stan公司是从第一版的原始工具包和教科书。未来,新功能将添加到乌兰姆.

乌兰姆是以Stanisław Ulam命名的,他是蒙特卡罗方法的创始人之一,也是斯坦项目的名字。它的发音像[哦拉姆],而不是[你拉姆]。

这两种工具的输入类型与夸普:

拟合公式(f,数据=列表(y=c(-1,1)))

链条自动运行,前提是rstan公司已安装。链诊断显示在普瑞斯(fit-tan)输出:

平均标准差5.5%94.5%n有效Rhat西格玛1.45 0.72 0.67 2.84 145 1穆0.12 1.04-1.46 1.59 163 1

乌兰姆模型,情节显示的信息与普利斯轨迹图显示链。

提取物.样品返回列表中的示例。节选前上一个的示例,并返回列表中的示例。

这个支柱对象本身在@支柱狭槽。任何你想用斯坦模型做的事都可以直接用这个槽来做。

可以使用标准规范(fit-tan):

数据{实y[2];}参数{实<lower=0>西格玛;实木;}型号{西格玛指数(1);mu~正态(0,10);y~正态(mu,sigma);}

请注意乌兰姆不关心R分布名。您可以改为使用Stan样式名称:

安装\u stan<-ulam(列表(y~正态(mu,sigma),μ~正态(0,10),西格玛指数(1)),数据=列表(y=c(-1,1)))

后验预测

全部夸普,乌兰姆,和map2stan公司对象可以进行后处理以产生后验预测分布。

链接用于计算后验分布样本上任何线性模型的值。

sim卡用于模拟后验预测分布,从参数的后验分布模拟样本的结果。sim卡也可以用来模拟先前的预测。

看到了吗?链接?sim卡了解详情。

后检查自动计算后验预测(追溯?)检查。它只是使用链接sim卡.

多级模型公式

同时夸普大多数情况下只限于固定效应模型,乌兰姆可以指定多级模型,甚至相当复杂的模型。例如,一个简单的可变截获模型如下所示:

#准备数据数据(UCBadmit)UCBadmit$male<-as.integer(UCBadmit$applicator.gender==“男”)UCBadmit$部门<-rep(1:6,每个=2)UCBadmit$applicator.gender<-NULL#可变截获模型m_glmm1<-乌兰(列表(承认~二项式(应用,p),logit(p)<-a[部门]+b*男,a【部门】~正常(abar,sigma),abar~正常(0,4),西格玛~半正规(0,1),b~正态(0,1)),数据=UCBadmit)

类似的变斜率模型是:

m_glmm2<-乌拉姆(列表(承认~二项式(应用,p),logit(p)<-a[部门]+b[部门]*男性,c(a,b)[dept]~多重正态(c(abar,bbar),Rho,sigma),abar~正常(0,4),bbar~正常(0,1),西格玛~半正规(0,1),Rho~lkjcorr(2)),数据=UCBadmit)

另一种表达变斜率模型的方法是用一个变化效应向量。这可以通过在公式中使用显式向量声明来实现:

m_glmm3<-乌兰(列表(承认~二项式(应用,p),logit(p)<-v[部门,1]+v[部门,2]*男性,向量[2]:v[dept]~多重正态(c(abar,bbar),Rho,sigma),abar~正常(0,4),bbar~正常(0,1),西格玛~半正规(0,1),Rho~lkjcorr(2)),数据=UCBadmit)

那个向量[2]:v[dept]意思是“为每个唯一的部门声明一个长度为2的向量”。为了访问这些向量的元素,线性模型在括号内使用多个索引:[部门1].

这种策略可以再进一步,方法也可以声明为向量:

m_glmm4<-乌兰(列表(承认~二项式(应用,p),logit(p)<-v[部门,1]+v[部门,2]*男性,向量[2]:v[dept]~多重正规(v_mu,Rho,sigma),向量[2]:v峎mu~法向(0,1),西格玛[1]~半正规(0,1),西格玛[2]~半正规(0,2),Rho~lkjcorr(2)),数据=UCBadmit)

完全无中心的参数化也可以直接编码:

m_glmm5<-乌兰(列表(承认~二项式(应用,p),logit(p)<-v_mu[1]+v[dept,1]+(v_mu[2]+v[dept,2])*男,矩阵[dept,2]:v<-t(diag_pre_multiply(sigma,L_Rho)*z),矩阵[2,dept]:z~法线(0,1),向量[2]:v峎mu[[1]]~法线(0,4),向量[2]:v峎mu[[2]]~法线(0,1),向量[2]:西格玛~半正规(0,1),cholesky_factor_corr[2]:L_Rho ~ lkj_corr_cholesky(2)),数据=UCBadmit)

在上面,可变效应矩阵由z分数矩阵构成z以及包含在西格玛还有一个胆小鬼吕罗. 注意双括号符号乌木[[1]]允许向量的每个索引有不同的优先级。

Wailocv和Wailocv计算的可能性

乌兰姆可以选择返回逐点日志似然值。这些是计算WAIC和PSIS-LOO所需的。这个原木参数打开此选项:

m_glmm1<-乌兰(列表(承认~二项式(应用,p),logit(p)<-a[部门]+b*男,a【部门】~正常(abar,sigma),abar~正常(0,4),西格玛~半正规(0,1),b~正态(0,1)),数据=UCBadmit,log\u lik=TRUE)WAIC(m_glmm1)

附加代码已添加到Stan模型的generated quantities块中(请参见标准规范(m_glmm1)):

产生量{矢量[12]log_-lik;向量[12]p;对于(1:12中的i){p[i]=a[dept[i]]+b*男[i];p[i]=库存物流(p[i]);}对于(1:12中的i)log_lik[i]=二项式_lpmf(允许[i]|应用程序[i],p[i]);}

条件语句、自定义分布和混合模型

乌兰姆还支持if-then语句和自定义分发分配。这些对于编码混合模型(如零膨胀泊松模型和离散缺失值模型)非常有用。

下面是一个零膨胀泊松模型的例子。

#零膨胀泊松#先生成数据-文本示例probŠ饮料<-0.2#20%的天数费率<-1#平均每天1份手稿N<-365饮料y<-as.integer((1杯)*rpois(N,费率)虚拟协变量#现在是乌兰姆密码m_-zip<-ulam(列表(y | y==0~自定义(对数混合(p,0,泊松| lpmf(0 |λ)),y | y>0~自定义(log1m(p)+泊松| lpmf(y | lambda)),物流(p)<-ap,对数(λ)<-al+bl*x,ap~dnorm(0,1),al~dnorm(0,10),bl~正态(0,1)) ,数据=列表(y=y,x=x))

上式前两行对应的Stan码为:

对于(1:365中的i)如果(y[i]>0)目标+=log1m(p)+泊松| lpmf(y[i]| lambda[i]);对于(1:365中的i)如果(y[i]==0)目标+=log_mix(p,0,poisson_lpmf(0 |λ[i]);

什么习俗是定义自定义吗目标更新。以及|运算符使行有条件。请注意对数1百万,对数混合,和泊松函数是斯坦函数。

相同的习俗分布方法允许在离散缺失值上边缘化。让我们介绍一些缺少的值乌巴德米特以前的数据。

UCBadmit$male2<-UCBadmit$男UCBadmit$male2[1:2]<-(-1)#缺失代码UCBadmit$male2<-as.integer(UCBadmit$male2)

现在模型需要检测何时马来2缺少(-1),然后计算未知状态下的混合物。

mímix<-ulam(列表(允许| male2==-1~自定义(log\u mix(马累,二项式|申请,p|m1),二项式| lpmf(录取申请,p|m0)),承认| male2>-1~二项式(应用,p),物流(p)<-a[部门]+b*male2,物流(p_m1)<-a[部门]+b*1,物流(p_m0)<-a[部门]+b*0,male2 | male2>-1~伯努利(phi|u-male),phi峎雄~β(2,2),a[dept]~正常(0,4),b~正态(0,1)),数据=UCBadmit)

注意phiéu男对未知状态求平均值。

连续缺失数据插补

原则上,缺失实值数据的插补很简单:只需用一个参数替换每个缺失的值。实际上,这涉及到一大堆烦人的簿记。乌兰姆有一个名为缺少合并为了简化这一点。

UCBadmit$x<-rnorm(12)UCBadmit$x[1:2]<-NA穆小姐(列表(承认~二项式(应用,p),logit(p)<-a+b*外螺纹+bx*x\u合并,x\u merge~正常(0,1),x_merge<-merge_缺失(x,x_插补),a~正常(0,4),b~正常(0,1),bx~正常(0,1)),数据=UCBadmit)

什么缺少合并是不是找到了不适用中的值(无论哪个符号是第一个参数),构建一个名为x\u插补(不管你怎么称呼第二个参数)长度合适,然后拼凑一个向量x\U合并在正确的地方包含了这两个。然后,可以在该向量之前指定一个previor,并像往常一样在线性模型中使用它。

合并是在Stan模型运行时使用自定义功能块完成的。请参阅Stan代码stancode(小姐)所有可爱的细节。

缺少合并是一个宏的示例,它是乌兰姆使用函数名来触发特殊编译。在这种情况下,缺少合并这两种方法都在Stan模型中插入一个函数,并构建必要的索引,以便在运行时期间找到丢失的值。系统完成后,宏将获得完整的文档。

高斯过程

一个简单的高斯过程,如本书第13章中的海洋岛屿示例,其作用如下:

数据(Kline2)d<-克林2数据(islandsDistMatrix)d$社会<-1:10dat<-列表(y=d$total U工具,社会=d$社会,log_pop=log(d$人口),Dmat=islandsDistMatrix)m_GP1<-乌兰姆(列表(y~泊松(μ),log(mu)<-a+aj[社会]+b*log\u pop,a~正常(0,10),b~正常(0,1),向量[10]:aj~多重正态(0,SIGMA),矩阵[10,10]:西格玛<-cov_GPL2(Dmat,etasq,rhosq,0.01),etasq~指数(1),指数(Rho1)),数据=dat)

这只是一个普通的可变截获模型,但所有10次截获都是从一个单一的高斯分布中提取的。协方差矩阵西格玛在通常的L2规范中定义。再一次,cov_GPL2是一个宏,它在Stan代码中插入一个函数,以便在模型运行时计算协方差矩阵。

更奇特的高斯过程需要不同的参数化。这些也可以建造。下面是一个使用151种灵长类物种和系统发育距离矩阵的例子。首先,准备数据:

数据(灵长类301)数据(灵长类301_距离_矩阵)d<-灵长类301d$name<-as.字符(d$name)dstan<-d[完成案例(d$社会学习,d$研究工作,d$身体,d$大脑),]#dstan中spp的剪枝距离矩阵spp_obs<-dstan$名称灵长类动物301距离矩阵y2<-y[公共广播,公共广播]#缩放距离y3<-y2/最大值(y2)

现在,这个模型是一个非中心L2范数高斯过程:

m_GP2<-乌兰(列表(社会学~泊松(lambda),对数(lambda)<-a+g[spp_id]+b_ef*log_research_ef+b_body*log_body+b_eq*log_brain,a~正常(0,1),向量[N_spp]:g<<-L\u SIGMA*eta,向量[N_spp]:eta ~正常(0,1),矩阵[N_spp,N_spp]:L_SIGMA<<<-cholesky_分解(SIGMA),矩阵[N_spp,N_spp]:西格玛<-cov_GPL2(Dmat,etasq,rhosq,0.01),b逖体~正常(0,1),b_eq~正常(0,1),正常(1,1),etasq~指数(1),rhosq~指数(1)),数据=列表(N_spp=nrow(dstan),社交学习=dstan$社交学习,spp_id=1:nrow(dstan),log_research_efforce=log(dstan$研究工作),log_body=log(dstan$body),log_brain=log(dstan$大脑),Dmat=y3) , 控制=列表(max_treedepth=15,adapt_delta=0.95),样本=假)

这个型号的样品取样不快,所以我设置了样本=假. 你仍然可以用标准码(m_GP2).

注意协方差西格玛它的构建方式与之前相同,但是我们会立即将其分解为Cholesky因子并构建不同的截获g通过矩阵乘法。这个<<-接线员说乌兰姆不是循环,而是直接赋值。所以g<<<-L棼西格玛*预计到达时间做正确的线性代数。

链内多线程

使用司令官而不是rstan公司是当前使用链内多线程的唯一方法反思. 它还倾向于更快地编译模型,并且在何时需要重新编译模型方面更加智能,因此使用司令官即使不需要多线程,也建议使用。

如果你想的话乌兰姆使用司令官软件包,那么您也可以使用

devtools::install\github(“stan dev/cmdstanr”)

如果以前没有安装CMD,也需要安装安装\u cmdstan().

然后你需要补充cmdstan=真乌兰姆代码。这个螺纹参数控制每个链的线程数。例子:

N<-1e4x<-rnorm(N)m<-1+rpois(N,2)y<-rbinom(N,size=m,prob=inv_logit(-3+x))dat<-列表(y=y,x=x,m=m)#两条线m1<-乌兰姆(列表(y~二项式逻辑(m,logit),物流<-a+b*x,a~正常(0,1.5),b~正常(0,0.5)),数据=dat,cmdstan=TRUE,线程数=2,刷新=1000)

由于代码的复杂性,有些模型不能以这种方式自动执行多线程。在这些情况下,可以直接用Stan编写代码。看到了吗本指南. 直接在Stan中编写多线程模型也可以更高效,因为您可以详细地选择要传递哪些变量以及将模型的哪些部分传递给多线程。

进行中的工作

乌兰姆仍在开发中,但大部分功能已完成。它仍然主要是一个教学工具,公开模型的统计细节,同时隐藏Stan中需要的一些编程细节。

map2stan公司语法和特点

年长的map2stan公司函数对它将看到的公式作出了更强有力的假设。这使得is能够提供一些额外的自动化,因此它有一些特殊的语法。乌兰姆相反,通过它的宏库支持这些特性。

非中心参数化

以下是一个非中心参数化,它在线性模型之前移动不同效果中的比例参数,这对于采样通常更有效:

f4u<-列表(y~dnorm(μ,sigma),mu<-a+zaj[组]*sigma_组[1]+(b+zbj[组]*sigma_群[2])*x,c(zaj,zbj)[群]~dmvnorm(0,Rho_群),a~dnorm(0,10),b~dnorm(0,1),西格玛~dcauchy(0,1),sigma_群~dcauchy(0,1),Rho峎u群~ dlkjcorr(2))

这本书的第13章提供了更多关于这个问题的细节。

我们可以把这个策略再进一步去掉相关矩阵,罗赫集团,也是以前的。map2stan公司通过DMV挪威密度,它使用相关矩阵的内部Cholesky分解来构建变化的效果。这是之前的可变坡度模型,现在使用了非中心符号:

f4nc<-列表(y~dnorm(μ,sigma),mu<-a+aj[组]+(b+bj[组])*x,c(aj,bj)[组]~dmvnormNC(西格玛集团,Rho_集团),a~dnorm(0,10),b~dnorm(0,1),西格玛~dcauchy(0,1),sigma_群~dcauchy(0,1),Rho峎u群~ dlkjcorr(2))

从内部看,这是一个可耻的因素吕罗湖组用于执行采样。它将出现在返回的样本中,除了罗赫集团,由它构造而成。

半自动贝叶斯插补

可以编写简单的贝叶斯插补。例如,让我们模拟一个缺少预测值的简单回归:

N<-100未命中10个x<-rnorm(N)y<-rnorm(N,2*x,1)x[样本(1:N,大小=N个未命中)]<-NA

减去10价值观。然后map2stan公司公式列表只定义了:

f5列表(y~dnorm(μ,sigma),μ<-a+b*x,x~dnorm(mu_x,sigma_x),a~dnorm(0,100),b~dnorm(0,10),μx~dnorm(0,100),sigma_x~dcauchy(0,2),西格玛~dcauchy(0,2))m5<-map2stan(f5,数据=列表(y=y,x=x))

什么map2stan公司注意丢失的值,查看分配给带有缺失值的变量的分布,构建使用观察值和估计值混合使用的Stan代码回归中的值。标准代码(m5)执行的细节。

二元离散缺失值的半自动边缘化

缺少值的二进制(0/1)变量存在特殊障碍,因为Stan无法对离散参数进行采样。所以不需要输入二进制缺失值,map2stan公司比他们平均(边缘化)。在上述情况下,什么时候map2stan公司检测预测器变量中缺少的值,它将尝试查找包含这些值的变量的分布。如果这个变量是二进制(0/1),那么它将构造一个混合模型,其中每个项都是对数似然条件,这些变量采用0/1值的特定组合。

按照上一节中的示例,我们可以模拟二进制预测器中的丢失:

N<-100未命中<-10x<-rbinom(N,大小=1,prob=0.5)y<-rnorm(N,2*x,1)x[样本(1:N,大小=N个未命中)]<-NA

模型定义类似于前面的定义,但是在为定义分布的超参数指定约束时也需要一些小心:

f6表(y~dnorm(μ,sigma),μ<-a+b*x,x~伯努利(phi),a~dnorm(0,100),b~dnorm(0,10),φ~β(1,1),西格玛~dcauchy(0,2))m6<-map2stan(f6,数据=列表(y=y,x=x),约束=列表(phi=“下=0,上=1”))

理论上,该算法适用于任何数量的缺失值二进制预测器。例如,对于两个预测值,每个预测值都有缺失:

N<-100未命中<-10x1<-rbinom(N,大小=1,prob=0.5)x2<-rbinom(N,大小=1,prob=0.1)y<-rnorm(N,2*x1-x2,1)x1[样本(1:N,大小=未命中)]<-NAx2[样本(1:N,大小=N峎未命中)]<-NAf7表(y~dnorm(μ,sigma),mu<-a+b1*x1+b2*x2,x1~伯努利(phi1),x2~伯努利(φ2),a~dnorm(0,100),c(b1,b2)~dnorm(0,10),φ1~β(1,1),φ2~β(1,1),西格玛~dcauchy(0,2))m7<-map2stan(f7,数据=列表(y=y,x1=x1,x2=x2),约束=列表(phi1=“下限=0,上限=1”,φ2=“下限=0,上限=1”)

虽然二元预测值的未观测值通常不感兴趣,但它们可以从后验分布中计算出来。添加参数离散插补=真指示map2stan公司自动执行这些计算。例子:

m6<-map2stan(f6,数据=列表(y=y,x=x),约束=列表(phi=“下=0,上=1”),离散插补=真)精度(m6,深度=2)

输出包含每个案例的样本,这些样本具有取值1。

该算法通过构造混合项列表来工作,这些混合项是计算每个观测到的概率所必需的是的价值观。在最简单的情况下,只有一个预测值缺失,隐含混合似然包含两个项:

Pr(y[i])=Pr(x[i]=1)Pr(y[i]| x[i]=1)+Pr(x[i]=0)Pr(y[i]| x[i]=0)

在我们的示例模型的参数中m6上面是:

Pr(y[i])=φ*N(y[i]| a+b,sigma)+(1-φ)*N(y[i]| a,西格玛)

现在只需对案件进行循环然后分别计算上述各项。同样的后验概率x[i]==1表示为:

Pr(x[i]==1 | y[i])=φ*N(y[i]| a+b,sigma)/Pr(y[i])

当只有一个预测因子缺失时,这很简单。如果有两个或更多呢?在这种情况下,所有可能的失踪组合都必须考虑在内。例如,假设有两个预测因子,x1型x2个,两个案子都有遗漏. 现在隐含的混合可能性是:

Pr(y[i])=Pr(x1=1)Pr(x2=1)*Pr(y[i]| x1=1,x2=1)+Pr(x1=1)Pr(x2=0)Pr(y[i]| x1=1,x2=0)+Pr(x1=0)Pr(x2=0)Pr(y[i]| x1=0,x2=0)

有四个未观测值的组合,因此混合可能性中有四个项。什么时候?x2个相反,我们可以将观测值代入上述值,然后混合物很容易简化为我们前两项的可能性:

Pr(y[i]| x2[i]=1)=Pr(x1=1)Pr(x2=1)Pr(y[i]| x1=1,x2=1)+Pr(x1=1)Pr(x2=0)Pr(y[i]| x1=0,x2=1)+Pr(x1=0)Pr(x2=0)Pr(y[i]| x1=0,x2=1)=[Pr(x1=1)Pr(x2=1)+Pr(x1=1)Pr(x2=0)]Pr(y[i]| x1=1,x2=1)+[Pr(x1=0)Pr(x2=1)+Pr(x1=0)Pr(x2=0)]Pr(y[i]| x1=0,x2=1)=Pr(x1=1)Pr(y[i]| x1=1,x2=1)+Pr(x1=0)Pr(y[i]| x1=0,x2=1)

这意味着如果我们循环检查案例并将任何观测值插入到一般混合似然中,我们就可以计算出每种情况下具体的缺失组合的相关混合. 那是什么map2stan公司做。一般的混合项可以通过算法生成。下面的代码为n丢失的二进制变量。

n组合<-2^nd<-矩阵(NA,nrow=ncombinations,ncol=n)for(col_var in 1:n)d[,col_var]<-rep(0:1,每个=2^(col_var-1),length.out=n组合)

d包含术语,列包含变量,每列中的值是每个变量的相应值。该算法对矩阵中的每一行建立线性模型,将混合似然作为这些行的和,并对观测值进行适当的替换。为了精确起见,所有计算都是在对数刻度上进行的。

高斯过程

基本高斯过程可以用GPL2分发标签。这意味着多元高斯函数的协方差矩阵由普通L2范数距离函数定义:

k(i,j)=预计到达时间^2*经验(-rho^2*D(i,j)^2)+如果其他(i==j,西格玛^2,0)

哪里D是成对距离的矩阵。例如,要在空间自相关模型中使用此约定:

图书馆(反思)数据(Kline2)d<-克林2数据(islandsDistMatrix)d$社会<-1:10mGP<-map2stan(列表(刀具总数~dpois(mu),原木(mu)<-a+aj[社会],a~dnorm(0,10),aj[社会]~GPL2(Dmat,etasq,rhosq,0.01),etasq~dcauchy(0,1),rhosq~dcauchy(0,1)),数据=列表(total U tools=d$total U工具,社会=d$社会,Dmat=islandsDistMatrix),约束=列表(etasq=“下=0”,rhosq=“下=0”),链,MUITER=5000=预热)

注意限制条件向Stan传递自定义参数约束的列表。书中对这个例子作了更详细的探讨。

信息标准

两者兼而有之地图map2stan公司提供DIC和WAIC。好吧,在大多数情况下是这样的。实际上,这两种工具都足够灵活,您可以指定既不能正确计算DIC也不能正确计算WAIC的模型。但对于普通的GLMs和glmm来说,它是有效的。请参阅R帮助?WAIC公司. 方便函数比较总结信息标准比较,包括WAIC的标准误差。

乌兰姆支持WAIC计算log_lik=真参数,它返回厕所包裹。

合奏计算链接sim卡一组模型的输出,每一个模型都由其Akaike权重加权,由WAIC计算。

第1版《统计反思》的代码问题

一点零钱链接在第七章的第一版中,已经打破了两个例子。

R代码7.10

mu.Africa.mean<-应用(mu.Africa,2,mean)应用错误(mu.Africa,2,mean):dim(X)的长度必须为正

这是因为link()现在返回所有线性模型。所以mu。非洲是一个包含mu和gamma的列表。要修复,请使用:

mu.Africa.mean<-应用(mu.Africa$mu,2,mean)

在同一节中的其他apply()调用中使用类似的修复。

R代码7.17

类似于R代码7.10的问题。使用mu.ruggedlo$mu代替mu.ruggedlo。