線形判別関数における説明変数の有意性検定     Last modified: Aug 03, 2009

目的
プログラムソフトにおいては,線形判別関数の説明変数の有意性検定を行わないものがある(MASS ライブラリで 2 群判別する場合など),そのような場合に,線形判別関数における説明変数の有意性検定を行う。

注:MASS ライブラリの lda は,3 群以上の判別は正準判別分析を行うので,その場合にはこの関数で検定をすることはできない。2 群の判別の場合には適用できる。

使用法

PartialF(data, group, use)

引数

data  説明変数のデータ行列(データフレーム)
group 各行がどの群に属するかを表す変数
use   分析に使用する変数番号のベクトル

ソース

インストールは,以下の 1 行をコピーし,R コンソールにペーストする
source("http://aoki2.si.gunma-u.ac.jp/R/src/PartialF.R", encoding="euc-jp")

# 線形判別関数における説明変数の有意性検定
PartialF <- function(        data,                                   # 説明変数のデータ行列(データフレーム)
                        group,                                  # 各行がどの群に属するかを表す変数
                        use)                                    # 分析に使用する変数番号のベクトル
{
        data <- data[, use, drop=FALSE]
        p <- ncol(data)
        ng <- nlevels(group)
        ncase <- length(group)
        split.data <- split(data, group)
        num <- sapply(split.data, nrow)
        t <- var(data)*(ncase-1)
        w <- matrix(colSums(t(matrix(sapply(split.data, var), ncol=ng))*(num-1)), p)
        f <- diag(solve(t))/diag(solve(w))
        ni <- length(use)
        idf1 <- ng-1
        idf2 <- ncase-(ng-1)-ni
        f <- idf2 / idf1 * (1-f) / f
        p <- pf(f, idf1, idf2, lower.tail=FALSE)
        result <- cbind(f, p)
        dimnames(result) <- list(colnames(data), c("Partial F", "p-value"))
        return(result)
}


使用例

> PartialF(iris[,1:4], iris[,5], 1:4) # 1 〜 4 の,すべての変数を使うとき

             Partial F      p-value
Sepal.Length  4.721152 1.032884e-02
Sepal.Width  21.935928 4.831201e-09
Petal.Length 35.590175 2.756205e-13
Petal.Width  24.904333 5.143154e-10

> PartialF(iris[,1:4], iris[,5], c(2,4)) # 2,4 番目の変数だけを使うとき

             Partial F      p-value
Sepal.Width   62.49383 2.468558e-20
Petal.Width 1068.64192 6.650978e-88
 


・ 直前のページへ戻る  ・ E-mail to Shigenobu AOKI

Made with Macintosh