2
library(MASS)
example(lda)
plot(z)

z のすべてのポイントにアクセスするにはどうすればよいですか? Sp (c、s、v) に応じて、LD1 と LD2 に沿ったすべてのポイントの値を知りたいです。

4

3 に答える 3

5

探しているものはpredict()、クラスのオブジェクトのメソッドの一部として計算されます"lda"( を参照?predict.lda)。xによって生成されるオブジェクトのコンポーネントとして返されますpredict(z)

## follow example from ?lda
Iris <- data.frame(rbind(iris3[,,1], iris3[,,2], iris3[,,3]),
                   Sp = rep(c("s","c","v"), rep(50,3)))
set.seed(1) ## remove this line if you want it to be pseudo random
train <- sample(1:150, 75)
table(Iris$Sp[train])
## your answer may differ
##  c  s  v
## 22 23 30
z <- lda(Sp ~ ., Iris, prior = c(1,1,1)/3, subset = train)

## get the whole prediction object
pred <- predict(z)
## show first few sample scores on LDs
head(z$x)

最後の行は、線形判別式のオブジェクト スコアの最初の数行を示しています。

> head(pred$x)
          LD1        LD2
40  -8.334664  0.1348578
56   2.462821 -1.5758927
85   2.998319 -0.6648073
134  4.030165 -1.4724530
30  -7.511226 -0.6519301
131  6.779570 -0.8675742

これらのスコアは次のようにプロットできます

plot(LD2 ~ LD1, data = pred$x)

次のプロットを生成します (このトレーニング サンプル用です!)

lda スコア プロット

于 2012-09-19T14:33:10.027 に答える
1

関数を呼び出すときplot(z)、実際には関数を呼び出していますplot.lda- これは S3 メソッドです。基本的に、オブジェクトzにはクラスがありますlda:

class(z)

使用されている実際の関数を確認できます。

getS3method("plot", "lda")

これはかなり関与していることが判明しました。しかし、重要な点は次のとおりです。

x = z
Terms <- x$terms
data <- model.frame(x)
X <- model.matrix(delete.response(Terms), data)
g <- model.response(data)
xint <- match("(Intercept)", colnames(X), nomatch = 0L)
X <- X[, -xint, drop = FALSE]
means <- colMeans(x$means)
X <- scale(X, center = means, scale = FALSE) %*% x$scaling

以前のようにプロットすることはできません:

plot(X[,1], X[,2])

ただし、あなたが望むものを得る簡単な方法があるかもしれません - 私はそのlda機能を知りません。

于 2012-09-19T13:52:19.610 に答える