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]])
}