33

シャピロ-ウィルク正規性検定を実行したい。私のデータは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が正しい列を選択しないのはなぜですか?どうすればよいですか?

4

4 に答える 4

131

shapiro.testは何をしますか?

shapiro.test「サンプルは正規分布からのものである」という帰無仮説を、対立仮説「サンプルは正規分布からのものではない」に対してテストします。

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

ギブのRヘルプページ?shapiro.test

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の結果の解釈:

まず、 IanFellowsからのこの優れた回答を読むことを強くお勧めします。testing for normality

上に示したように、shapiro.test検定は、サンプルが正規分布からのものであるという帰無仮説を検定します。これは、p値<= 0.05の場合、サンプルが正規分布からのものであるという帰無仮説を棄却することを意味します。Ian Fellowsがうまく言っているように、あなたは正規性の仮定に対してテストしています」。言い換えると(私が間違っている場合は訂正してください)、サンプルが正規分布から来ていないという帰無仮説をテストするとはるかに良いでしょう。 。なぜですか?帰無仮説を棄却することは、対立仮説を受け入れることと同じではないからです。

の帰無仮説の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)が満たされない場合が多く、ほとんどの場合「帰無仮説」が受け入れられ、誤解を招く可能性があるということです。

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

Shapiro-Wilkの検定の追加の問題は、より多くのデータをフィードすると、帰無仮説が棄却される可能性が高くなることです。したがって、大量のデータの場合、正規性からのごくわずかな逸脱でも検出でき、実際の目的ではデータは十分に正常であるにもかかわらず、帰無仮説イベントの棄却につながります。

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

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

帰無仮説が反対である場合、つまり、サンプルが正規分布からのものではなく、 p値が0.05未満である場合、これらのサンプルが正規分布からのものではないことは非常にまれであると結論付けます(拒否帰無仮説)。これは大まかに次のように解釈されます。サンプルが正規分布している可能性が高いです(ただし、一部の統計家はこの解釈方法を好まない場合があります)。これは、イアンフェローも彼の投稿で説明しようとしたことだと思います。何かおかしいことがあったら訂正してください!

@PaulHiemstraは、正規性の検定のこの問題に遭遇したときの実際の状況(回帰の例)についてもコメントしています。

実際には、分析が正常性を前提としている場合、たとえばlmの場合、このシャピロ-ウィルク検定は行いませんが、分析を行い、分析結果の診断プロットを調べて、分析の前提が過度に違反していないかどうかを判断します。lmを使用した線形回帰の場合、これは、plot(lm())を使用して取得した診断プロットのいくつかを調べることによって行われます。統計は、いくつかの数値を咳き込む一連のステップではありませんが(p <0.05!)、データを正しく分析する方法を判断するには、多くの経験とスキルが必要です。

ここで、IanFellowsからBenBolkerのコメントへの返信が、上記と同じように(それ以上ではないにしても)すでにリンクされている同じ質問の下にあります。

線形回帰の場合、

  1. 正常性についてはあまり心配しないでください。CLTはすぐに引き継ぎます。最小のサンプルサイズと、リモートで妥当な外観のヒストグラムを除いてすべてがあれば問題ありません。

  2. 不均一分散(不均一分散)について心配します。私はこれについて、(ほぼ)デフォルトでHCCMテストを使用するところまで心配しています。スケール位置プロットは、これが壊れているかどうかのいくつかのアイデアを提供しますが、常にではありません。また、ほとんどの場合、等しい分散を仮定する先験的な理由はありません。

  3. 外れ値。1を超えるクックの距離は、懸念の合理的な原因です。

それが私の考えです(FWIW)。

これで少し問題が解決することを願っています。

于 2013-03-15T08:28:43.010 に答える
10

列の代わりに適用shapiro.test()しています。data.frame次のことを試してください。

shapiro.test(heisenberg$HWWIchg)
于 2014-11-23T21:53:32.050 に答える
1

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

shapiro.test(heisenberg$HWWIchg)
于 2017-08-29T06:24:45.503 に答える
-2

データをベクトルとして設定し、関数に配置します。

于 2019-03-09T21:03:29.403 に答える