Rで統計(メモ)

難しいことはわからないけど、とにかくRでやってみようというページ

2群の平均値の差の検討(t検定,ベイズ推定)

2群の平均値の差の検討(性差の検討を例に)

データの格納

x<-SNFC_1$theta[SNFC_1$sex=="2"] #第1群の指定
y<-SNFC_1$theta[SNFC_1$sex=="1"] #第2群の指定
#平均値の高い方をyにしておくと後で解釈しやすい
nx <- length(x)
ny <- length(y)
data <- list(N1=nx,N2=ny,x1=x,x2=y,c=0)

対応のないt検定

var.test(x, y) #等分散性の検定.p < 0.05 => 等分散でない.p >= 0.05 => 等分散である
t.test(x,y,var.equal=T) #t検定.等分散でない時はvar.equal=F(Welch検定)

対応のないt検定 ver.ベイズ

stanコード格納
pairedF <- '
data{
  int<lower=0> N1;
  int<lower=0> N2;
  real x1[N1];
  real x2[N2];
  real c;
}
parameters{
  real mu1;
  real mu2;
  real<lower=0> sigma1;
  real<lower=0> sigma2;
}
model{
  x1 ~ normal(mu1,sigma1);
  x2 ~ normal(mu2,sigma2);
}
generated quantities{
  real delta;
  real d_overC;
  real cohen_d;
  delta = mu2 - mu1;
  d_overC = (delta>c? 1:0);
  cohen_d = delta /((sigma1^2*(N1-1)+sigma2^2*(N2-1)) /((N1-1)+(N2-1)))^0.5;
}
'
require(rstan)
rstan_options(auto_write = TRUE)
options(mc.cores = parallel::detectCores())

fit<-stan(model_code=pairedF,data=data,chains=5,warmup=1000,iter=21000)
print(fit,digits_summary=3)