1

全て

いくつかの変数に線形モデルを当てはめ、すべての R 二乗値を報告しようとしています。

ただし、ペアで行うのではなく、一度に行う方法はありますか?

たとえば、次のように 2 つの変数を使用してそれを行う方法を知っています。

data(mtcats)
fit<-lm(formula = mtcars[,1] ~ mtcars[,2])
summary(fit)$r.squared

mtcars には 11 個の数値変数がありますが、すべての変数に対してそれをドンする方法はありますか? つまり、11 個の変数があるので、すべての r-2 乗値を記録したいということですか? 対称で 0 の対角線である 11 x 11 の行列が必要ですか?

4

2 に答える 2

2

使用できますouter

 res1 <- outer(colnames(mtcars), colnames(mtcars), FUN= function(x,y) {
          sapply(as.list(paste(x,y, sep="~")), function(z) {
               form1 <- as.formula(z)
               fit <- lm(form1, data=mtcars)
               summary(fit)$r.squared})
               })

またexpand.grid

indx <- expand.grid(colnames(mtcars), colnames(mtcars), stringsAsFactors=FALSE)
res2 <- sapply(seq_len(nrow(indx)),function(i) {i1 <- indx[i,]
                       form1 <-as.formula(paste(i1[,1], i1[,2], sep="~"))
                       fit <- lm(formula=form1, data=mtcars)
                       summary(fit)$r.squared})

 dim(res2) <- c(11,11)
 res2[1:3,1:3]
 #         [,1]      [,2]      [,3]
 #[1,] 0.0000000 0.7261800 0.7183433
 #[2,] 0.7261800 0.0000000 0.8136633
 #[3,] 0.7183433 0.8136633 0.0000000

 identical(res1,res2)
 #[1] TRUE
于 2014-11-01T17:53:39.710 に答える
2

これらは単一変数の回帰モデルであるため、r-2 乗は変数の各ペア間の相関係数の 2 乗にすぎないため、次のようにすることができます。

rsq = cor(mtcars)^2
diag(rsq) = 0  # To get zeros on the diagonals

最初の 3 つの行と列は次のとおりです。

> rsq[1:3, 1:3]
           mpg       cyl      disp
mpg  0.0000000 0.7261800 0.7183433
cyl  0.7261800 0.0000000 0.8136633
disp 0.7183433 0.8136633 0.0000000

ところで、このcorrplotパッケージは r-2 乗値を視覚化するのに役立つ場合があります。このパッケージは、相関の 2 乗ではなく、実際には相関を目的としていますが、どの変数のペアが最も強い関係を持っているかをすばやく簡単に知ることができます。より一般的なヒートマップも使用できますがcorrplot、相関のためのより焦点を絞ったツールがいくつか提供されます。

library(corrplot)

corrplot.mixed(cor(mtcars)^2) 

# Or, to sort the column order by clustering
corrplot.mixed(cor(mtcars)^2, order="hclust")

詳細については、ビネットを参照してください。

于 2014-11-01T18:14:04.557 に答える