データ型

  • [: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))
#stan.out <- stan(file="SNPcovariate.stan",data=dat)
.fit1 = sampling(MODEL1, data=.data1)


EXT1 = extract(.fit1)
```