繁体   English   中英

R的帮助。 我正在使用信息性非共轭先验为mu和sig ^ 2运行用于普通数据的Simple Gibbs采样器

[英]R help. I'm running a Simple Gibbs Sampler for mu and sig^2 for normal data using informative non-conjugate priors

Mu的分布为N(0,1),sig ^ 2的分布为IGamma(a,b),其中a = 1,b =2。我正在尝试创建几个图(直方图,散点图,ACF,PACF ),但始终收到错误消息“ xy.coords(x,y,xlabel,ylabel,log)中的错误:'x'和'y'的长度不同”

这可能是一个愚蠢的问题,但我是r的新手。 这是我到目前为止运行的程序

# Gibbs sampler, MODEL 2: semi-conjugate normal model

#
#  Density of inverse gamma distribution
#dinvgamma = function( x, shape, rate ) 
{
   exp( shape * log( rate ) - lgamma( shape ) -( shape+1)*log(x) - rate/x )
}

nn = 200
yy = rnorm( nn, 1, 4 )

mu.0 = 1.0

sig2.0 = 4^2

a = 2

b = 1

M = 10000

mu   = rep( 0, 10000 )
sig2 = rep( 1, 10000 )

mean.y = mean( yy )
var.y = var( yy )

mu[1]   = mean.y
sig2[1] = var.y 


for( ii in 2:M ) {

   mu.star <- ((1/sig2.0)*mu.0 + (nn/sig2 [ii-1])*mean(yy))/((1/sig2.0)+(nn/sig2 [ii-          1]))

   sig2.star <- 1/((1/sig2.0)+(nn/sig2[ii-1]))


   # sample mu from its full cond.
   #
   mu[ii] = rnorm( 1, mu.star, sqrt( sig2.star ))

   a.star <-  a + (nn/2)

   b.star <- (sum((yy-mu [ii])^2)/2) + b

   # sample sig2 from its full cond.
   #
   sig2[ii] = 1 / rgamma( 1, a.star, rate = b.star )

## print( c( mu[ii], sig2[ii] ))
}

mu <- mu[9001:length(mu)]
sig2  <-  sig2[9001:length(mu)]

#
# Time series
#
 par(mfrow=c(2,2))

 plot( 1:M, mu, type="l", xlab="Iteration", xlim=c(0, 50), ylim=c(0, 100),
       main= "Mu" )

 hist( mu, prob = T )
 x = seq( min(mu), max( mu ), len=200 )
 lines( x, dnorm( x, mean=mu.0, sd=sqrt(sig2.0) ), col=2, lwd=2)

 acf( mu )

 pacf( mu )

#++++++++++++++++++++++++++++++++++
par(new=TRUE)
 par(mfrow=c(2,2))

 plot( 1:M, sig2, type="l", xlab="Iteration", ylab="sig^2",xlim=c(0, 50), ylim=c(0,      100), main= "sig^2" )

 hist( sig2, prob = T )
 x = seq( 0, max( sig2 ), len=200 )
 lines( x, dinvgamma( x,  shape=a, rate=b ), col=2, lwd=2)

 acf( sig2 )

 pacf( sig2 )
 par(new=TRUE)
plot(mu, sig2, main="Scatterplot Example", xlim=c(0, 50), ylim=c(0, 100),xlab="mu ",     ylab="sig2 ", pch=19)

任何帮助将不胜感激。 我绝不幻想我的代码是有效的甚至是接近它的代码,因此,您认为必要的任何更改,请随时告诉我

您的问题似乎来自重新定义以下两个变量:

mu <- mu[9001:length(mu)]
sig2  <-  sig2[9001:length(mu)]

我将它们注释掉,脚本运行良好,可以根据需要生成图(大概)。 也许看看您如何重新定义musig2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM