- [:title=参考]
- それぞれの型にRリストでデータを渡す
- データを渡すだけで、Stan処理としては、ただの1次元正規分布のパラメタ推定
- stanでは、ベクトルを要素とする行列、とか、行列を要素とするベクトルとかがあるが、それは、Rのアレイで渡せばよいようだ
---
title: "StanDataType"
author: "ryamada"
date: "2017年6月10日"
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(rstan)
```
```{r}
.stan_code1 = '
data {
# スカラー
real r;
int n;
int m;
# ベクトル、行列
vector[n] vc;
row_vector[m] vr;
matrix[n,m] M;
# アレイ
real x[n];
int y[n];
# 要素がベクトル・行列である配列
vector[m] v[n];
matrix[n,m] K[n];
# 次元一般化アレイ
real A[n,m];
real B[n,n,m];
# 要素が行列である行列
matrix[n,m] C[n,m];
}
parameters {
real mu;
real<lower=0> sigma;
}
model {
x ~ normal(mu, sigma);
}'
```
```{r,echo=FALSE}
#Compiling
MODEL1 = stan_model(model_code = .stan_code1)
```
```{r,echo=FALSE}
n <- 10
m <- 5
.data1 = list(x=rnorm(n, 10, 3))
.data1$n = n
.data1$m = m
# スカラー
r = 0.4
.data1$r = r
.data1$vc = rnorm(n)
.data1$vr = rnorm(m)
.data1$M = matrix(rnorm(n*m),ncol=m);
.data1$y = rpois(n,r)
.data1$v = matrix(rnorm(n*m),ncol=m)
.data1$K = array(rnorm(n*n*m),c(n,n,m))
.data1$A = matrix(rnorm(n*m),ncol=m);
.data1$B= array(rnorm(n*n*m),c(n,n,m))
.data1$C = array(rnorm(n*m*n*m),c(n,m,n,m))
.fit1 = sampling(MODEL1, data=.data1)
EXT1 = extract(.fit1)
```