1

私は 5 種類の看護ケアの長さを観察しましたが、タイプ 1 のケアがより頻繁に行われたという理由だけで、現在では異なるサンプル サイズの 5 つのグループがあります。

だから私が走るとき[P,ANOVATAB,STATS]=kruskalwallis([rand(10,1) rand(30,1)])

エラー: horzcat CAT 引数のディメンションを使用するとエラーが発生し、一貫性がありません。

サンプルサイズが等しくないことが問題になるのはなぜですか?代わりに何をすべきですか?

4

1 に答える 1

4

kruskalwallisドキュメントによると、同じ長さの 2 つのベクトルを渡す必要があります。1 つはすべてのデータを含み、もう 1 つは各データ ポイントのグループ インデックスを含む同じ長さです。したがって、例のグループ 1 と 2 で 2 つのデータ セットを呼び出す場合は、次のようにすることができます。

data1 = rand(10,1);
data2 = rand(30,1);
% Concatenation with a ; in between because these are **column** vectors
allData = [data1; data2]; 
groups = [ones(size(data1)); 2 * ones(size(data2))];
[P,ANOVATAB,STATS] = kruskalwallis(allData, groups);

行列の作成と連結に関するドキュメントもお読みください。

もう少し凝った、もう少し一般的なものにしたい場合 (たとえば、実行時までグループの数がわからない場合)、セル配列を使用して最初にデータ グループを次のように格納できます。それで:

% Initialise cell array with differently dimensioned data
xc{1} = rand(100, 1);
xc{2} = rand(1, 30);

% Reshape it all to column vectors and concatenate
allData = cellfun(@(x)x(:), xc, 'UniformOutput', false);
allData = vertcat(allData{:});

% Generate group indices for each set of data as column vectors and
% concatenate
groups = arrayfun(@(x, y)y * ones(numel(x{:}), 1), xc, 1:length(xc), 'UniformOutput', false);
groups = vertcat(groups{:});

コメントで述べたように、これは各データ セットの次元が異なる場合にも機能します (つまり、この例では 1 つは行ベクトルで、もう 1 つは列ベクトルです)。

于 2013-03-30T10:20:27.273 に答える