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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

304閲覧

p値を下げている配列を知りたい

kaitotokai

総合スコア59

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/04/21 02:43

前提・実現したいこと

p値を下げている配列を知りたい。

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

特にエラーは発生していない。

該当のソースコード

#coding:utf-8 import scipy as sp import scipy.stats import pandas as pd import numpy as np data = [[23. 45. 78. 23. 48.][36. 94. 34. 10. 40.][46. 85. 39. 62. 81.][1. 1. 1. 1. 1.]] result= sp.stats.bartlett(*data) print(result)

とコードを書いて実行したところ、
BartlettResult(statistic=4.3945586749853556, pvalue=0.009338345709)
のように出力された。今回の場合だと、data の[1. 1. 1. 1. 1.]がp値を下げている配列である。それを検出したい。

試したこと

for文を書いて一つ一つ検出する方法を思いついたが、しかしどのようにp値を下げているかいなかを判定すればいいのかわからなかった。

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

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

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

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

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

guest

回答3

0

雑な発想ですが、素直に各配列の分散を求めて外れ値除去的な方法(分散の分布を見て2シグマ、とか)でハジけば、それなりに行けるんじゃないかなぁ、とか思ったり。あまり厳密な方法ではないかもしれませんが、参考までに。

投稿2018/04/21 11:51

hayataka2049

総合スコア30933

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

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

R.Shigemori

2018/04/22 23:46

候補選びはこれでいけると思います。 確定できるかというと、barlett検定はカイ二乗分布を使っている関係で自由度が変わるとp値にも影響するので、計算して確定する処理が必要です
hayataka2049

2018/04/23 02:32

勉強になりました。確かに計算してみないことには最終的なp値は・・・か
guest

0

ベストアンサー

おそらく、配列を順番に除いてbartlettに入力するのが近道のように思います。1番目の配列を除いて残りだけで実施した場合、2番目を除外して実施した場合、などを順番に行い、最も期待するP値に近くなるケースを探索すればいいかと思います。

投稿2018/04/21 10:34

R.Shigemori

総合スコア3376

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

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

kaitotokai

2018/04/21 11:23

ありがとうございます。そのような考え方があるのですね! 一つ質問なのですが、もしデータが、 data = [[23. 45. 78. 23. 48.][36. 94. 34. 10. 40.][46. 85. 39. 62. 81.][50. 74. 63. 83. 71.][1. 1. 1. 1. 1.][58. 73. 27. 47. 66.][71. 77. 33. 42. 47.]×100・・・[2. 2. 2. 2. 2.]]のように、20〜80までの数字が100ほどあり、その中に[1. 1. 1. 1. 1.]と[2. 2. 2. 2. 2.]の配列が混ざっていて、これらがp値を下げている原因で、この2つの配列を取り除きたいとしたらどうしたらいいでしょうか?僕がお聞きしたいのは、p値を下げている配列が何個かわからなくて、その場合でもp値を下げている配列をpick upしたい時、という意図なのですが。
R.Shigemori

2018/04/21 12:45

探索的なアプローチなので、1つを取り除いたのちにさらに1つを取り除くこと探索を繰り返せばいいのかなぁとそもそも思っていました。探索のゴールはどれを取り除いても結果にほとんど変化がない状態です。あるいは、目標とするp値になったときというのもアリでしょう。いずれにも合致しない、つまりすべての探索が終わった場合も終了条件です。 ちなみに、bartlett法でp値を下げている配列を除外したい意図はどこにあるのでしょうか? 私の理解だと、bartlett法で帰無仮説が採択されても棄却されても大勢に影響はないと思っています。理由は、その結果は二元配置分散分析や一元配置分散分析が使えるかどうかというだけで、使えない(つまり分散が不均一)場合は、他の方法が適用できるので深刻な問題にならないと思っていました。 おそらく、別の用途があってのことかと思うので後学のため、教えていただけるとありがたく思います。
kaitotokai

2018/04/22 04:24

すみません、言葉足らずでした。kruskal-wallis検定でもp値(pvalue=0.009338345709などのように)が出ると思いますが、その時p値を下げている配列を知りたかったので、p値を下げている配列が何かを知りたかったです。もしご存知でしたら教えていただきたいです。
R.Shigemori

2018/04/22 23:34

kruskal-wallisでも同じアプローチ方法でいけると思います。 配列ひとつを除外してp値を計算する処理を複数回実施してp値に大きな影響を与える配列を特定するという処理を所定の条件を満たすまで行えばいいことになります。
kaitotokai

2018/04/23 02:05

承知しました!ありがとうございます。
guest

0

数理計画法的に考えてみる(解決したい課題を定義する)のはいかがでしょうか?

投稿2018/04/21 06:08

編集2018/04/21 06:10
YouheiSakurai

総合スコア6142

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問