1

在 R 脚本Fit12_for_stack.R中,我调用rstan包的stan()函数。当我Fit12_for_stack.R在交互式 R 会话中运行代码时,我从以下位置收到这些警告消息stan()

警告信息: 1:预热后有 13 个不同的转换。将 adapt_delta 增加到 0.8 以上可能会有所帮助。2:检查pairs()图以诊断抽样问题

Fit12_for_stack.R当我使用以下命令在命令行上运行脚本时:

Rscript Fit12_for_stack.R 

我得到输出,但没有警告消息。运行在命令行上调用的 R 脚本时,如何捕获警告消息?stan()stan()

从帖子如何将所有控制台输出保存到 R 中的文件?,我尝试添加

con <- file("test.log")
sink(con, append=TRUE)
sink(con, append=TRUE, type="message")

到脚本的顶部,但test.log再次显示输出,没有stan()警告消息。

Fit12_for_stack.R看起来像:

con <- file("test.log")
sink(con, append=TRUE)
sink(con, append=TRUE, type="message")

library("rstan")

J <- 2
L <- 3

X <- matrix(c(98, 22, 42, 99, 68, 61), nrow = L, ncol = J)
N <- matrix(100, nrow = L, ncol = J)

fit <- stan(file="try8.stan",
            data=list(J, L, X, N),
            iter=100, chains=4, seed = 1)

try8.stan看起来像:

data{

   int<lower=0> J;
   int<lower=0> L;

   // Declare arrays with integer entries.

   int X[L,J];
   int N[L,J];

}

parameters {

   // Add parameters:
   // - pi_vec = [pi_1, ..., pi_L]
   // - C_vec = [C_11, ..., C_JJ]

   vector<lower=0,upper=1>[L] pi_vec;

   vector<lower=0,upper=1>[J] C_vec;

   matrix<lower=0,upper=1>[L,J] Alpha;

}

transformed parameters {

}

model {

    for (i in 1:L) {
        pi_vec[i] ~ uniform(0,1);
    }

    for (j in 1:J) {
        C_vec[j] ~ uniform(0,1);
    }

    for (i in 1:L) {
        for (j in 1:J) {

            Alpha[i,j] ~ normal(pi_vec[i], sqrt(C_vec[j]*(pi_vec[i])*(1 - pi_vec[i]))) T[0,1];

            // For the (Like = 1) test, have X[i,j] ~ U(0,1),
            // i.e. set the likelihood's density to 1 so that posterior density = prior density.

            X[i,j] ~ uniform(0,1);

        }
    }

}
4

2 回答 2

1

我尝试添加stan(..., cores = 2)并记录了警告消息。我浏览了source,我的猜测(我可能是错的)是当 时cores = 1,只有在交互模式下才会引发警告R(就在脚本的最后)。

cores大于 1 时,sink()似乎不会记录工作人员的输出,但重定向输出似乎有效,例如

Rscript Fit12_for_stack.R  > test.Rout
于 2016-08-25T03:30:45.513 回答
0

所以我删除了这些线条

con <- file("test.log")
sink(con, append=TRUE)
sink(con, append=TRUE, type="message")

Fit12_for_stack.R

并使用命令运行程序

R CMD BATCH Fit12_for_stack.R

这产生了一个输出文件

Fit12_for_stack.Rout

包含 stan() 警告。

于 2016-08-25T23:25:43.997 回答