(Library) 共分散・相関解析・t検定
作成者:西本絵梨子
概要
(母・標本)共分散,相関解析,t検定を行なうライブラリ. NArray,Ruby/GSL が必要です.
ソースファイル
- ライブラリ : statistic.rb.
使い方
- ライブラリをパスの通っているディレクトリに置く.
require する場合は,
require "statistic" include Statistic
でモジュールを読み込めます.
依存ライブラリ
- NArray
- Ruby/GSL
ソースコード
=begin = Statistic ==Index * ((<module Statistic>)) * ((<rcov_population>)) * ((<rcov>)) * ((<rcor>)) * ((<student_test>)) * ((<significance_level>)) =module Statistic statistic functions made by eriko. in /home/eriko/lib/ruby/1.8 ==Module Functions ---rcov_population(fx, fy) => cov 母共分散を返す ARGUMENTS * fx : Array or NArray * fy : Array or NArray * cov: Real, 共分散 ---rcov(fx, fy) => cov 標本共分散を返す ARGUMENTS * fx : Array or NArray * fy : Array or NArray * cov: Real, 共分散 ---rcor(fx, fy) => a,b,r 相関解析を行なう. ARGUMENTS * fx : Array or NArray * fy : Array or NArray * a : Real * b : Real * y = a*x + b * r : Real, 相関係数 ---student_test(rcor,n,p=0.05) => t0,st,state t検定を行なう. ARGUMENTS * rcor : 相関係数 * n : データ数 * p : 有意水準(default 0.05) * t0 : 相関係数rcor, データ数nでのt値 * st : 自由度n-2, 危険率pでのt値 * state : |t0|>=st で有意だった場合true, |t0|<st で有意ではなかった場合false ---significance_level(n,p=0.05) => rcor ある標本数において有意水準を満す相関係数を求める ARGUMENTS * n : データ数 * p : 有意水準(default 0.05) * rcor : 相関係数 =end require 'narray' require 'gsl' module Statistic module_function #<<< population covariance >>> def rcov_population(x,y) if !x.is_a?(NArray) if !x.is_a?(Array) raise 'array must be NArray or Array' end end if !y.is_a?(NArray) if !y.is_a?(Array) raise 'array must be NArray or Array' end end if x.length != y.length raise 'Must be same length' end cov = (x*y).mean - (x.mean)*(y.mean) return cov end #<<< sample covariance >>> def rcov(x,y) if !x.is_a?(NArray) if !x.is_a?(Array) raise 'array must be NArray or Array' end end if !y.is_a?(NArray) if !y.is_a?(Array) raise 'array must be NArray or Array' end end if x.length != y.length raise 'Must be same length' end cov = NMath::covariance(x,y) return cov end #<<< linear regression analysis >>> def rcor(x,y) if !x.is_a?(NArray) if !x.is_a?(Array) raise 'array must be NArray or Array' end end if !y.is_a?(NArray) if !y.is_a?(Array) raise 'array must be NArray or Array' end end sxy = NMath::covariance(x,y) sx2 = NMath::covariance(x,x) sy2 = NMath::covariance(y,y) #-- y = a*x + b a = sxy/sx2 b = y.mean - a * x.mean r = sxy/(sqrt(sx2) * sqrt(sy2)) return a,b,r end #<<< student t test >>> # t検定を行なう def student_test(rcor,n,p=0.05) nu=n-2 t0 = (rcor*Math::sqrt(nu/(1.0-rcor*rcor))).abs st = GSL::Cdf.tdist_Qinv(p/2.0,nu) if t0>=st state = true else state = false end return t0,st,state end #<<< significance level >>> # 標本数nに対して有意水準pを満す相関係数を求める def significance_level(n,p=0.05) nu=n-2 st = GSL::Cdf.tdist_Qinv(p/2.0,nu) r = st/Math::sqrt(nu+st**2) return r end end
キーワード:[解析]
参照: