web-dev-qa-db-ja.com

シャピロウィルク正規性テストを実行する

Shapiro-Wilk Normality Testテストを実行したい。私のデータはcsv形式です。次のようになります。

 heisenberg
    HWWIchg
1    -15.60
2    -21.60
3    -19.50
4    -19.10
5    -20.90
6    -20.70
7    -19.30
8    -18.30
9    -15.10

ただし、テストを実行すると、次の結果が得られます。

 shapiro.test(heisenberg)

[.data.frame(x、complete.cases(x))のエラー:未定義の列が選択されています

Rが正しい列を選択しないのはなぜですか?

29
maximus

shapiro.testは何をしますか?

_shapiro.test_は、「サンプルが正規分布に由来する」というNull仮説をテストしますagainst対立仮説「標本は正規分布に由来しません」。

Rでshapiro.testを実行する方法は?

_?shapiro.test_のRヘルプページでは、

_x - a numeric vector of data values. Missing values are allowed, 
    but the number of non-missing values must be between 3 and 5000.
_

つまり、_shapiro.test_は入力として数値ベクトルを期待します。これは、テストするサンプルに対応し、必要な唯一の入力です。 data.frameがあるため、次のように関数への入力として目的の列を渡す必要があります。

_> shapiro.test(heisenberg$HWWIchg)
#   Shapiro-Wilk normality test

# data:  heisenberg$HWWIchg 
# W = 0.9001, p-value = 0.2528
_

shapiro.testからの結果の解釈:

まず、私は強くあなたに提案する この素晴らしい答えを読んでください _testing for normality_のIan Fellowsから。

上記のように、_shapiro.test_は、サンプルが正規分布に由来するというNULL仮説をテストします。これは、p-value <= 0.05の場合、rejectがサンプルが正規分布に由来するというNULL仮説になることを意味します。 Ian Fellowsがうまく言っているように、あなたはテストしていますagainstNormalityの仮定 "。間違っている)、それははるかに良い NULL仮説をテストする場合、サンプルが正規分布に由来するしないである場合、なぜ?NULL仮説を拒否するのは- not the same対立仮説を受け入れます。

_shapiro.test_の帰無仮説の場合、p値<= 0.05は、標本が正規分布に由来するという帰無仮説を拒否します。大まかに言うと、サンプルが正規分布からのものであるというまれな可能性があります。この仮説テストの副作用は、このまれな機会が発生することです非常にまれ。例として、例を挙げます。

_set.seed(450)
x <- runif(50, min=2, max=4)
shapiro.test(x)
#   Shapiro-Wilk normality test
# data:  runif(50, min = 2, max = 4) 
# W = 0.9601, p-value = 0.08995
_

したがって、この(特定の)サンプルrunif(50, min=2, max=4)は、このテストによる正規分布に由来します。私が言いたいのは、「極端な」要件(p <0.05)が満たされない多くの場合があり、それがほとんどの場合「NULL仮説」の受け入れにつながり、誤解を招く可能性があることです。

大きなサンプルサイズへの影響についてのコメントの下にある@PaulHiemstraから、ここで引用したい別の問題:

Shapiro-Wilkのテストに関する追加の問題は、より多くのデータをフィードすると、帰無仮説が拒否される可能性が大きくなることです。そのため、大量のデータの場合、正常からの非常に小さな偏差でも検出でき、帰無仮説イベントの拒否につながりますが、実際の目的ではデータは通常よりも十分です。

彼は、Rのデータサイズ制限がこれを少し保護することも指摘していますが、

幸いなことに、shapiro.testは、データサイズを5000に制限することで、上記の影響からユーザーを保護します。

NULL仮説が正反対、つまり、サンプルdo notが正規分布に由来し、p-value <0.05を取得した場合、それは次のように結論付けられます。 非常にまれこれらのサンプルしないは正規分布からのものです(NULL仮説を拒否します)。これは大まかに次のように変換されます。サンプルが正規分布している可能性が高いです(ただし、一部の統計学者はこの解釈方法を好まないかもしれません)。これは、Ian Fellowsが彼の投稿で説明しようとしたものだと思います。何かおかしくなったら訂正してください!

@PaulHiemstraは、正規性をテストするこの問題に遭遇した場合の実際的な状況(回帰の例)についてもコメントしています。

実際には、分析が正規性を仮定している場合、例えばlm、私はこのシャピロ・ウィルクのテストはしませんが、分析を行い、分析結果の診断プロットを見て、分析の仮定が過度に違反したかどうかを判断します。 lmを使用した線形回帰の場合、これは、plot(lm())を使用して取得する診断プロットの一部を調べることで実行されます。統計は、いくつかの数字を吐き出す一連のステップではありません(ちょっとp <0.05!)が、データを正しく分析する方法を判断するには、多くの経験とスキルが必要です。

ここで、上記のリンクと同じ質問の下で、イアン・フェローズからベン・ボルカーのコメントへの返信を見つけました。

線形回帰の場合、

  1. 正常性についてはあまり心配しないでください。 CLTが迅速に処理を引き継ぎます。最小のサンプルサイズと、遠隔から見ても妥当なヒストグラム以外のすべてを持っている場合は問題ありません。

  2. 不平等な分散(不均衡分散性)を心配します。デフォルトでHCCMテストを(ほぼ)使用するまで、これについて心配しています。縮尺位置プロットは、これが壊れているかどうかをある程度示しますが、常にそうではありません。また、ほとんどの場合、等しい分散を仮定する先験的な理由はありません。

  3. 外れ値。クック距離が1より大きい場合は、懸念される合理的な原因です。

これらは私の考えです(FWIW)。

これが少し物事をクリアすることを願っています。

124
Arun

shapiro.test()を列ではなくdata.frameに適用しています。以下を試してください:

shapiro.test(heisenberg$HWWIchg)

正規性をテストするための正確な列(データ)の指定に失敗しました。代わりにこれを使用してください

shapiro.test(heisenberg$HWWIchg)