私は 5 種類の看護ケアの長さを観察しましたが、タイプ 1 のケアがより頻繁に行われたという理由だけで、現在では異なるサンプル サイズの 5 つのグループがあります。
だから私が走るとき[P,ANOVATAB,STATS]=kruskalwallis([rand(10,1) rand(30,1)])
エラー: horzcat CAT 引数のディメンションを使用するとエラーが発生し、一貫性がありません。
サンプルサイズが等しくないことが問題になるのはなぜですか?代わりに何をすべきですか?
私は 5 種類の看護ケアの長さを観察しましたが、タイプ 1 のケアがより頻繁に行われたという理由だけで、現在では異なるサンプル サイズの 5 つのグループがあります。
だから私が走るとき[P,ANOVATAB,STATS]=kruskalwallis([rand(10,1) rand(30,1)])
エラー: horzcat CAT 引数のディメンションを使用するとエラーが発生し、一貫性がありません。
サンプルサイズが等しくないことが問題になるのはなぜですか?代わりに何をすべきですか?
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 つは列ベクトルです)。