ChatGPT がノンパラメトリック検定の候補を提示する

ノンパラメトリック検定についての対話例です。

**ChatGPT も，ときどき，しれっと嘘を言うので，騙されてはいけません。厳しく追求しないとダメダメな結果を受け入れてしまうことになります。**
つまり，**素人が使うには危険な要素を含むということです。要注意!!**

## Q1.
### Anonymous

手元にあるデータについて，検定を行いたいと思います。
データは，いわゆる「順序尺度」です。
データは，2つのグループに別れています。
例えば，
第1グループのデータは (3, 2, 1, 4, 5, 3, 2, 6, 5, 5)
第2グループのデータは (4, 2, 3, 4, 5, 4, 3, 4, 2, 1, 2, 3, 4)
のようになっています。グループ間で同じ対象に対する測定値はありません。グループ内でも同じ対象に対する測定値はありません。
第1グループの母平均と第2グループの母平均が同じではないことを言いたい。
どのような統計解析を行えばよいか，また，実際に R で行うにはどのようなスクリプトを書けばよいか，例示してください。

### ChatGPT

あなたのケースでは、2つの独立したグループの母平均が同じかどうかを検定するために、ウィルコクソンの順位和検定（Wilcoxon rank-sum test）を使用できます。この検定は、順序尺度のデータに対して有効であり、母集団分布に対する仮定が少ないため、非常に柔軟な手法です。

以下に、この検定をRで行うためのスクリプトを示します。Rの統計解析パッケージである「stats」を使用します。

```R
# データの入力
group1 <- c(3, 2, 1, 4, 5, 3, 2, 6, 5, 5)
group2 <- c(4, 2, 3, 4, 5, 4, 3, 4, 2, 1, 2, 3, 4)

# ウィルコクソンの順位和検定
result <- wilcox.test(group1, group2, alternative = "two.sided")

# 結果の表示
print(result)
```

このスクリプトでは、wilcox.test関数を使用してウィルコクソンの順位和検定を実行しています。alternativeパラメータを通じて、対立仮説を指定できます。ここでは「two.sided」を指定していますが、必要に応じて「greater」または「less」に変更できます。

検定結果には統計量（W統計量）とp値が含まれます。p値が有意水準（通常は0.05）よりも小さい場合、帰無仮説（母平均が等しい）を棄却し、対立仮説を採択することができます。

### Anonymous

あなたのスクリプトを実行した以下の結果をサマライズしてください。

```
> # データの入力
> group1 <- c(3, 2, 1, 4, 5, 3, 2, 6, 5, 5)
> group2 <- c(4, 2, 3, 4, 5, 4, 3, 4, 2, 1, 2, 3, 4)
> 
> # ウィルコクソンの順位和検定
> result <- wilcox.test(group1, group2, alternative = "two.sided")
Warning message:
In wilcox.test.default(group1, group2, alternative = "two.sided") :
  cannot compute exact p-value with ties
> 
> # 結果の表示
> print(result)

	Wilcoxon rank sum test with continuity correction

data:  group1 and group2
W = 76.5, p-value = 0.4857
alternative hypothesis: true location shift is not equal to 0
```

### ChatGPT


この結果をサマライズします。

ウィルコクソンの順位和検定の結果は以下の通りです：

```
統計量（W統計量）: 76.5
p値: 0.4857
検定の結果、p値が有意水準（通常は0.05）よりも大きい（0.4857 > 0.05）ため、帰無仮説を棄却できません。したがって、このデータからは、第1グループと第2グループの母平均に有意な差があるとはいえません。順序尺度のデータにおいて、グループ間で母平均に差があるかどうかについては統計的な証拠が得られませんでした。
```

## Q2.
### Anonymous

別のデータで以下の結果になりました。サマライズしてください。

```
Wilcoxon rank sum test with continuity correction

data:  group1 and group2
W = 10, p-value = 0.0004403
alternative hypothesis: true location shift is not equal to 0
```

### ChatGPT


この結果をサマライズします：

```
統計量（W統計量）: 10
p値: 0.0004403
検定の結果、p値が有意水準（通常は0.05）よりも遥かに小さい（0.0004403 < 0.05）ため、帰無仮説を棄却します。したがって、このデータからは、第1グループと第2グループの母平均に有意な差があると言えます。順序尺度のデータにおいて、グループ間で母平均に差があると統計的に有意であると結論づけることができます。
```

## Q3.
### Anonymous

なお，以上のいずれの実行においても，

```
Warning message:
In wilcox.test.default(group1, group2, alternative = "two.sided") :
  cannot compute exact p-value with ties
```
という警告が出ています。これを無視することもできるとは思いますが，ちゃんと対応するためにはどのようにすればよいですか?

### ChatGPT


この警告メッセージは、データに同じ順位が存在する（結びついている）場合に発生します。ウィルコクソンの順位和検定は、同じ順位がある場合に厳密なp値の計算が難しいため、近似的な計算が行われることを警告しています。この場合、近似的なp値が表示され、検定の有効性には問題ありません。

ただし、データに結びつきがある場合、もしくは厳密なp値が必要な場合は、**Rのcoinパッケージなどを使用して厳密なWilcoxonの符号順位検定（exact Wilcoxon signed-rank test）を行うことができます**。以下は、coinパッケージを使用した例です。

注：強調は Anonymous による。

```R
# coinパッケージのインストール
# install.packages("coin")

# coinパッケージの読み込み
library(coin)

# データの入力
group1 <- c(3, 2, 1, 4, 5, 3, 2, 6, 5, 5)
group2 <- c(4, 2, 3, 4, 5, 4, 3, 4, 2, 1, 2, 3, 4)

# coinパッケージを使用した符号順位検定
result <- wilcoxsign_test(group1 ~ group2)

# 結果の表示
print(result)
```

この例では、wilcoxsign_test関数を使用して厳密なWilcoxonの符号順位検定を行っています。この関数はcoinパッケージに含まれています。ただし、注意が必要で、厳密な検定はデータが大きい場合には計算に時間がかかる可能性があります。

### Anonymous

あなたが提示した 厳密なWilcoxonの符号順位検定 は，対応のあるデータの場合ですね?
**今回のデータは対応のない（独立な）データなので，不適切ではないですか?**

### ChatGPT

申し訳ありません。ご指摘いただきありがとうございます。確かに、wilcoxsign_testは対応のあるデータ（ペアのデータ）の場合に使用されるものであり、独立したデータの場合には不適切です。

**独立したデータに対しても厳密なWilcoxonの順位和検定を行うためには、RのexactRankTestsパッケージを使用することができます。**

以下はその例です。

```R
# exactRankTestsパッケージのインストール
# install.packages("exactRankTests")

# exactRankTestsパッケージの読み込み
library(exactRankTests)

# データの入力
group1 <- c(3, 2, 1, 4, 5, 3, 2, 6, 5, 5)
group2 <- c(4, 2, 3, 4, 5, 4, 3, 4, 2, 1, 2, 3, 4)

# exactRankTestsパッケージを使用した厳密なWilcoxonの順位和検定
result <- wilcox.exact(group1, group2)

# 結果の表示
print(result)
```

この例では、wilcox.exact関数を使用して厳密なWilcoxonの順位和検定を実行しています。この関数はexactRankTestsパッケージに含まれています。このパッケージを使えば、データが対応のない場合でも厳密な検定が行えます。お試しいただければと思います。

### Anonymous

提示していただいたスクリプトの結果が以下のようでした。これで問題ないですね?

```
> # exactRankTestsパッケージのインストール
> # install.packages("exactRankTests")
> 
> # exactRankTestsパッケージの読み込み
> library(exactRankTests)
 Package ‘exactRankTests’ is no longer under development.
 Please consider using package ‘coin’ instead.


Attaching package: ‘exactRankTests’

The following objects are masked from ‘package:coin’:

    dperm, pperm, qperm, rperm

> 
> # データの入力
> group1 <- c(3, 2, 1, 4, 5, 3, 2, 6, 5, 5)
> group2 <- c(4, 2, 3, 4, 5, 4, 3, 4, 2, 1, 2, 3, 4)
> 
> # exactRankTestsパッケージを使用した厳密なWilcoxonの順位和検定
> result <- wilcox.exact(group1, group2)
> 
> # 結果の表示
> print(result)

	Exact Wilcoxon rank sum test

data:  group1 and group2
W = 76.5, p-value = 0.5025
alternative hypothesis: true mu is not equal to 0
```

### ChatGPT


はい、提供されたスクリプトの結果を見ると、**exactRankTestsパッケージにおいても独立なデータに対する厳密なWilcoxonの順位和検定が行われ、結果が表示されています。**

結果のサマリーによれば、統計量（W統計量）は76.5であり、p値は0.5025です。このp値が有意水準（通常は0.05）よりも大きいため、帰無仮説を棄却できません。したがって、このデータからは、第1グループと第2グループの母平均に有意な差があるとはいえません。

また、警告メッセージに関しては、**exactRankTestsパッケージが開発中止になっており、代わりにcoinパッケージを使用するように促されています。そのため、将来的な使用を考えるとcoinパッケージを使用するのが良いでしょう。**