LoginSignup
0
0

More than 5 years have passed since last update.

t検定

Last updated at Posted at 2017-05-06

t検定(分散が等しい場合)

分散の推定量$U_{e}$

U_{e}=\frac{(m-1)U_{x}+(n-1)U_{y}}{m+n-2}

t検定量の算出

t = \frac{|\bar{X}-\bar{Y}|}{\sqrt{U_{e}(\frac{1}{m}+\frac{1}{n})}}
t_test <- function(x,y){
  n.x <- length(x)
  n.y <- length(y)
  m.x <- mean(x)
  m.y <- mean(y)
  s <- ((n.x-1)*sum((x-m.x)^2)/(n.x-1) + (n.y-1)*sum((y-m.y)^2)/(n.y-1))/(n.x+n.y-2)
  t <- abs(m.x-m.y)/sqrt(s*(1/n.x + 1/n.y))
  return(t)
}

t検定(分散が等しくない場合)

不偏分散

U_{x} =\frac{1}{m-1}\sum_{n=1}^{m}(x_{i}-\bar{x})^2

t検定量の算出

t = \frac{|\bar{X}-\bar{Y}|}{(\frac{U_{x}}{m}+\frac{U_{y}}{n})}
t_test_welch <- function(x,y){
  m.x <- mean(x)
  m.y <- mean(y)
  n.x <- length(x)
  n.y <- length(y)
  s.x <- sum((x-m.x)^2)/(n.x-1)
  s.y <- sum((y-m.y)^2)/(n.y-1)
  t <- abs(m.x - m.y) / sqrt(s.x/n.x + s.y/n.y)
  df <- (s.x/n.x+s.y/n.y)^2 / (s.x^2/(n.x^2*(n.x-1)) + s.y^2/(n.y^2*(n.y-1)))
  return(c(t, df))
}

自由度vの確率密度関数

f(t|v)= \frac{\Gamma(\frac{v+1}{2})}{\sqrt{v\pi}\Gamma(\frac{v}{2})}(1+\frac{t^2}{v})^{-\frac{v+1}{2}}
dt <- function(t,v){
  gamma((v+1)/2)/(sqrt(v*pi)*gamma(v/2))*(1+t^2/v)^(-(v+1)/2)
}

自由度vの累積確率関数

F(t|v)= \int_{-\infty}^{t}\frac{\Gamma(\frac{v+1}{2})}{\Gamma(\frac{v}{2})}\frac{1}{\sqrt{v\pi}}\frac{1}{(1+\frac{t^2}{v})^{\frac{v+1}{2}}}dt
cdf_t <- function(t, v){
  tmp <- function(x){
    gamma((v+1)/2) / gamma(v/2) / sqrt(v*pi) * (1+x^2/v)^(-(v+1)/2)
  }
  return(integrate(tmp, lower=Inf, upper=t)[[1]])
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0