SPSS でこれにアプローチする方法の例として、まずサンプル データを SPSS に読み込みます。
data list list (",") / case group val1 val2 val3 val4 (6F1.0).
begin data
1,1,3,5,6,8
2,1,2,7,5,4
3,2,1,3,6,8
4,2,5,4,3,7
5,1,8,6,5,3
end data.
dataset name orig.
次に、 と を使用SPLIT FILE
しPROXIMITIES
て、グループごとに距離行列を取得できます。flodelの回答へのコメントで述べたように、これにより、作業する必要がある別のデータセットが生成されることに注意してください(SPSS構文では大文字と小文字が実際には関係ないことにも注意してください。たとえばsplit file
、SPLIT FILE
同等です)。
sort cases by group.
split file by group.
dataset declare dist.
PROXIMITIES val1, val2, val3, val4
/STANDARDIZE = Z
/MEASURE = EUCLID
/PRINT = NONE
/MATRIX = OUT('dist').
R とは異なり、基本的に SPSS データ マトリックス内のすべてが Rdata.frame
に似ているため、SPLIT ファイルはほぼ機能*ply
的に R のさまざまな機能をすべて置き換えます。非常に便利ですが、一般的に柔軟性が低くなります。dist
そのため、結果を保存したファイルに距離を集約する必要があります。最初に行全体を合計し、次にAGGREGATE
コマンドを使用してグループごとに合計します。
dataset activate dist.
compute dist_sum = SUM(VAR1 to VAR3).
*it appears SPSS keeps empty cases - we dont want them in the aggregation.
select if MISSING(dist_sum) = 0.
dataset activate dist.
DATASET DECLARE dist_agg.
AGGREGATE
/OUTFILE='dist_agg'
/BREAK=group
/dist_sum = SUM(dist_sum)
/N_Cases=N.
dataset activate dist_agg.
compute mean_dist = dist_sum /(N_Cases*(N_Cases - 1)).
ここで、集計結果を という名前の別のデータセットに保存しますdist_agg
。SPSS は (厄介なことに) 全距離行列を保存するため、平均はn*(n-1)/2
(同等の R 構文のように) ではなくn*(n-1)
、対角要素を平均にカウントしたくないと仮定します。orig
次に、match files コマンドを使用してこれらをデータ ファイルにマージします。
*merge back into the original dataset.
dataset activate orig.
match files file = *
/table = 'dist_agg'
/by group.
exe.
*clean out old datasets if you like.
dataset close dist.
dataset close dist_agg.
matrix
オブジェクト間を行ったり来たりする R の柔軟性によりdata.frame
、SPSS はこの仕事には少し扱いにくくなっています。MATRIX
SPSS の言語でこれを行うためのはるかに簡潔なプログラムを作成することもできますがMATRIX
、(R の*ply
構文と比較して) 複数のグループにわたってこれを行うのは面倒です。