0

私はグループ間で一連のベースラインと研究終了時の違いを比較しています. たとえば、次のデータ セットがあるとします。

> baseline.comp
                             cluster 1970_pred 2008_pred  ratio   diff
 9  Many Transitions, Middle Income    0.1156    0.0248 4.6613 0.0908
10     Many Transitions, Low Income    0.1779    0.0389 4.5733 0.1390
 4       Dictatorships, High Income    0.1403    0.0307 4.5700 0.1096
 7    One Transition, Middle Income    0.0801    0.0219 3.6575 0.0582
 1         Democracies, High Income    0.0396    0.0116 3.4138 0.0280
 5     Dictatorships, Middle Income    0.1252    0.0399 3.1378 0.0853
 2       Democracies, Middle Income    0.0811    0.0291 2.7869 0.0520
 8       One Transition, Low Income    0.1912    0.0775 2.4671 0.1137
 3          Democracies, Low Income    0.1612    0.0698 2.3095 0.0914
 6        Dictatorships, Low Income    0.1854    0.0821 2.2582 0.1033

この例では、列pred_1970をそれ自体と比較して、これらのクラスター全体のベースライン条件の違いを示すテーブルを作成できるようにします。これは 10 x 10 のテーブルになりますが、これらのグループの初期条件の違いを反映して、以下の対角セルのみが実際の数値になります。Rそれを行うためにすでに機能的に実装されているものがあるかどうか疑問に思っていました。

ありがとうございました、

アントニオ・ペドロ

4

2 に答える 2

2

次のことを試してください。

# This part is just to create your data:

baseline.comp <- read.table(text="
                             cluster 1970_pred 2008_pred  ratio   diff
 9  'Many Transitions, Middle Income'    0.1156    0.0248 4.6613 0.0908
10     'Many Transitions, Low Income'    0.1779    0.0389 4.5733 0.1390
 4       'Dictatorships, High Income'    0.1403    0.0307 4.5700 0.1096
 7    'One Transition, Middle Income'    0.0801    0.0219 3.6575 0.0582
 1         'Democracies, High Income'    0.0396    0.0116 3.4138 0.0280
 5     'Dictatorships, Middle Income'    0.1252    0.0399 3.1378 0.0853
 2      'Democracies, Middle Income'    0.0811    0.0291 2.7869 0.0520
 8       'One Transition, Low Income'    0.1912    0.0775 2.4671 0.1137
 3          'Democracies, Low Income'    0.1612    0.0698 2.3095 0.0914
 6        'Dictatorships, Low Income'   0.1854    0.0821 2.2582 0.1033")

colnames(baseline.comp) <- c("cluster", "1970_pred", "2008_pred", "ratio", "diff")

# Now, we use outer

diff.1970 <- outer(baseline.comp$`1970_pred`, baseline.comp$`1970_pred`, "-")

# Just renaming the output matrix. I've used A through J to make 
# the output more readable.

#colnames(diff.1970) <- baseline.comp$cluster
colnames(diff.1970) <- LETTERS[1:10]
#rownames(diff.1970) <- baseline.comp$cluster
rownames(diff.1970) <- LETTERS[1:10]

# Make sure only the lower half of the result contains non-zero values

> diff.1970 * lower.tri(diff.1970)
        A       B       C       D      E       F      G       H      I J
A  0.0000  0.0000  0.0000  0.0000 0.0000  0.0000 0.0000  0.0000 0.0000 0
B  0.0623  0.0000  0.0000  0.0000 0.0000  0.0000 0.0000  0.0000 0.0000 0
C  0.0247 -0.0376  0.0000  0.0000 0.0000  0.0000 0.0000  0.0000 0.0000 0
D -0.0355 -0.0978 -0.0602  0.0000 0.0000  0.0000 0.0000  0.0000 0.0000 0
E -0.0760 -0.1383 -0.1007 -0.0405 0.0000  0.0000 0.0000  0.0000 0.0000 0
F  0.0096 -0.0527 -0.0151  0.0451 0.0856  0.0000 0.0000  0.0000 0.0000 0
G -0.0345 -0.0968 -0.0592  0.0010 0.0415 -0.0441 0.0000  0.0000 0.0000 0
H  0.0756  0.0133  0.0509  0.1111 0.1516  0.0660 0.1101  0.0000 0.0000 0
I  0.0456 -0.0167  0.0209  0.0811 0.1216  0.0360 0.0801 -0.0300 0.0000 0
J  0.0698  0.0075  0.0451  0.1053 0.1458  0.0602 0.1043 -0.0058 0.0242 0

これに関する注意事項:

一般に、数字で始まる変数 (または列名) を使用することはあまり良い考えではありません。そのため、使用時に列の名前を変更する必要がありましたread.table。R は自動的に数字の前に「X」を付けます。関数でこれらの列名を参照するときは、ティックを使用する必要があったことに注意してくださいouter。このような事態は避けた方が無難でしょう。

機能についてはouter、少しバリエーションを加えました。通常の呼び出しは のように見えますがx %o% y、これは と同じouter(x, y, "*")です。ただし、この場合、乗算ではなく差に関心があります。

最後のステップは、それを で乗算することlower.triです。これは、対角線より下のすべてが TRUE で、それ以外はすべて FALSE である TRUE/FALSE 行列を返します。パラメータとして使用diag = TRUEした場合、対角線も TRUE になりますが、対角線は常にゼロになるため、ここでは問題になりません。R は TRUE を 1 として、FALSE を 0 として扱うためlower.tri、元の行列を乗算して、関心のある値 (対角線より下の値) を除くすべての値に対して 0 の値を返すことができます。

于 2012-08-16T03:58:25.943 に答える
1

outerあなたが探しているものです。

baseline_diff <- outer(baseline.comp[['1970_pred']],baseline.comp[['1970_pred']], '-')
## if you want to set the dimension names (but they will be very long!)
# dimnames(baseline_diff) <- list(baseline.comp[['cluster']],
#                                  baseline.comp[['cluster']])
 baseline_diff
          [,1]    [,2]    [,3]    [,4]   [,5]    [,6]    [,7]    [,8]    [,9]   [,10]
 [1,]  0.0000 -0.0623 -0.0247  0.0355 0.0760 -0.0096  0.0345 -0.0756 -0.0456 -0.0698
 [2,]  0.0623  0.0000  0.0376  0.0978 0.1383  0.0527  0.0968 -0.0133  0.0167 -0.0075
 [3,]  0.0247 -0.0376  0.0000  0.0602 0.1007  0.0151  0.0592 -0.0509 -0.0209 -0.0451
 [4,] -0.0355 -0.0978 -0.0602  0.0000 0.0405 -0.0451 -0.0010 -0.1111 -0.0811 -0.1053
 [5,] -0.0760 -0.1383 -0.1007 -0.0405 0.0000 -0.0856 -0.0415 -0.1516 -0.1216 -0.1458
 [6,]  0.0096 -0.0527 -0.0151  0.0451 0.0856  0.0000  0.0441 -0.0660 -0.0360 -0.0602
 [7,] -0.0345 -0.0968 -0.0592  0.0010 0.0415 -0.0441  0.0000 -0.1101 -0.0801 -0.1043
 [8,]  0.0756  0.0133  0.0509  0.1111 0.1516  0.0660  0.1101  0.0000  0.0300  0.0058
 [9,]  0.0456 -0.0167  0.0209  0.0811 0.1216  0.0360  0.0801 -0.0300  0.0000 -0.0242
[10,]  0.0698  0.0075  0.0451  0.1053 0.1458  0.0602  0.1043 -0.0058  0.0242  0.0000

下側 (または上側) の三角形のみを表示するには、パッケージ内でtrilorを使用しますtriuMatrix

library(Matrix)

tril(baseline_diff)

10 x 10 Matrix of class "dtrMatrix"
      [,1]    [,2]    [,3]    [,4]    [,5]    [,6]    [,7]    [,8]    [,9]    [,10]  
 [1,]  0.0000       .       .       .       .       .       .       .       .       .
 [2,]  0.0623  0.0000       .       .       .       .       .       .       .       .
 [3,]  0.0247 -0.0376  0.0000       .       .       .       .       .       .       .
 [4,] -0.0355 -0.0978 -0.0602  0.0000       .       .       .       .       .       .
 [5,] -0.0760 -0.1383 -0.1007 -0.0405  0.0000       .       .       .       .       .
 [6,]  0.0096 -0.0527 -0.0151  0.0451  0.0856  0.0000       .       .       .       .
 [7,] -0.0345 -0.0968 -0.0592  0.0010  0.0415 -0.0441  0.0000       .       .       .
 [8,]  0.0756  0.0133  0.0509  0.1111  0.1516  0.0660  0.1101  0.0000       .       .
 [9,]  0.0456 -0.0167  0.0209  0.0811  0.1216  0.0360  0.0801 -0.0300  0.0000       .
[10,]  0.0698  0.0075  0.0451  0.1053  0.1458  0.0602  0.1043 -0.0058  0.0242  0.0000
于 2012-08-16T03:57:57.790 に答える