質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

4293閲覧

pythonを用いたサンプル数の異なる群間での多重比較(Tukey法)入力方法。

ZJXestGVdjaPalt

総合スコア3

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/05/10 04:17

前提・実現したいこと

プログラム超初心者です。
ANACONDAをインストールしjupyter Notebookを用いて解析しています。
4群(A~D)での多重比較を行っています。
各群で4~6のサンプルがあります。

各群の正規性、分散までは求めることができました。
post-hocとして多重比較(Tukey法)を試みたところエラーがでました。

群間のサンプル数を同じにした場合プログラムは実行できましたが、サンプル数が異なる場合はエラーが生じるようです。

下記、各群のサンプル数が異なる場合でのプログラムについてご教授お願いします。
※下記にサンプルコードを記載してございますが、値については適当でかまいませんので、プログラムが実行できるコードをご教授お願い申し上げます。

例1:A~Cのサンプル数は5、Dのサンプル数は6の場合
例2:A、Bはサンプル数は5、Cは4、Dは6の場合

発生している問題・エラーメッセージ

ValueError Traceback (most recent call last)
<ipython-input-16-aa8fb74b10ff> in <module>
11 D = np.array([10,7,3,5,7,2])
12
---> 13 tukey_hsd( (A,B,C,D), list('ABCD'), 6)

<ipython-input-16-aa8fb74b10ff> in tukey_hsd(lst, ind, n)
4 data_arr = np.hstack( lst )
5 ind_arr = np.repeat(ind, n)
----> 6 print(pairwise_tukeyhsd(data_arr,ind_arr))
7
8 A = np.array([15,9,18,14])

~\Anaconda3\lib\site-packages\statsmodels\stats\multicomp.py in pairwise_tukeyhsd(endog, groups, alpha)
42 """
43
---> 44 return MultiComparison(endog, groups).tukeyhsd(alpha=alpha)

~\Anaconda3\lib\site-packages\statsmodels\sandbox\stats\multicomp.py in init(self, data, groups, group_order)
818
819 if len(data) != len(groups):
--> 820 raise ValueError('data has %d elements and groups has %d' % (len(data), len(groups)))
821 self.data = np.asarray(data)
822 self.groups = groups = np.asarray(groups)

ValueError: data has 22 elements and groups has 24

該当のソースコード

from statsmodels.stats.multicomp import pairwise_tukeyhsd
import numpy as np
def tukey_hsd( lst, ind, n ):
data_arr = np.hstack( lst )
ind_arr = np.repeat(ind, n)
print(pairwise_tukeyhsd(data_arr,ind_arr))

A = np.array([15,9,18,14]) B = np.array([13,8,8,12,7,1]) C = np.array([10,6,11,7,12,3]) D = np.array([10,7,3,5,7,2]) tukey_hsd( (A,B,C,D), list('ABCD'), 6)

試したこと

●うまくいくコード
from statsmodels.stats.multicomp import pairwise_tukeyhsd
import numpy as np
def tukey_hsd( lst, ind, n ):
data_arr = np.hstack( lst )
ind_arr = np.repeat(ind, n)
print(pairwise_tukeyhsd(data_arr,ind_arr))

A = np.array([15,9,18,14,18])
B = np.array([13,8,8,12,7])
C = np.array([10,6,11,7,12])
D = np.array([10,7,3,5,7])

tukey_hsd( (A,B,C,D), list('ABCD'), 5)

サンプル数とプログラム最後の数字の数を一致させる(太字)と結果はでます。しかし、不一致である場合は上記のようなエラーがでてしまいます。

補足情報(FW/ツールのバージョンなど)

jupyter Notebook (ver.6.0.1)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

関数tukey_hsdのなかのdata_arrとind_arrの対応が取れていないことがエラーの原因です。
pairwise_tukeyhsd()に設定する引数は、ABCDの要素数が4,6,6,6なのであれば、ind_arrのABCDの数も4,6,6,6となっている必要があります。質問に記載のコードだと、6,6,6,6なのでエラーになっています。

とりあえず、以下であれば望む結果が得られます。

def tukey_hsd( lst, ind ): data_arr = np.hstack( lst ) ###ind_arr = np.repeat(ind, n) print(pairwise_tukeyhsd(data_arr,ind)) A = np.array([15,9,18,14]) B = np.array([13,8,8,12,7,1]) C = np.array([10,6,11,7,12,3]) D = np.array([10,7,3,5,7,2]) ind_arr = np.array(list('A'*4+'B'*6+'C'*6+'D'*6)) tukey_hsd( (A,B,C,D), ind_arr)

投稿2020/05/10 09:04

R.Shigemori

総合スコア3376

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問