3

変数のマトリックスがあり、回帰のすべての変数の差を比較するループを実行して、マトリックスが生成され、差が埋められるようにしようとしています。以下は、問題を解決するためのシミュレーション コードです。x_1、x_2、および x_3 を比較して対角線について対称な 3x3 行列を作成する行列を作成したいと考えています。対角線はすべてゼロである必要があります。

y <- sample(seq(1:4), 100, replace = TRUE)
x_1 <- sample(seq(1:2), 100, replace = TRUE)
x_2 <- sample(seq(1:4), 100, replace = TRUE)
x_3 <- sample(seq(1:4), 100, replace = TRUE)

frame <- cbind(x_1, x_2, x_3)
dif <- matrix(NA, ncol = 3, nrow = 3)

for(i in 1:3){
    model_1 <- lm(y ~ frame[,i])
    model_2 <- lm(y ~ frame[,i])
    dif[i]<- (model_2$coef[2] - model_1$coef[2])
}

ループにインデックスを付け、x のマトリックスを参照して結果を含む 3x3 テーブルを生成する方法について混乱しています。

4

5 に答える 5

2
 vcoef <- numeric(3)
 for(i in 1:3) { 
     vcoef[i] <- coef( lm(y~frame[,i]))[2]
               }

outer(vcoef, vcoef, "-")
#----------
          [,1]        [,2]        [,3]
[1,] 0.0000000 -0.15208933 -0.17302592
[2,] 0.1520893  0.00000000 -0.02093659
[3,] 0.1730259  0.02093659  0.00000000

冗長な情報が必要ない場合は、次のようにしてすべてのペアごとの違いを取得できますcombn

> combcos  <- combn(vcoef,2)
> combcos[1, ] -combcos[2, ]
[1] -0.15208933 -0.17302592 -0.02093659
于 2013-07-01T23:01:43.733 に答える
0

あなたが何を求めているのか理解できないかもしれませんが、outer複数のベクトルを取る のバージョンを使用したクラックがあります。

library(qdap)
FUN <- function(x1, x2, y)lm(y ~ x1)$coef[2] - lm(y ~ x2)$coef[2]
v_outer(list(x_1, x_2, x_3), FUN, y = y)

##       X1     X2     X3
## X1 0.000 -0.311 -0.079
## X2 0.311  0.000  0.232
## X3 0.079 -0.232  0.000
于 2013-07-01T22:45:06.380 に答える