誰かがRの次の機能を記入するのを手伝ってくれますか?
#data is a single vector of decimal values
normally.distributed <- function(data) {
if(data is normal)
return(TRUE)
else
return(NO)
}
正規性テストは、ほとんどの人が考えていることを行いません。 Shapiroの検定、Anderson Darling、およびその他は、正規性の仮定に対する帰無仮説検定です。これらを使用して、通常の理論統計手順を使用するかどうかを判断しないでください。実際、それらはデータアナリストにとって実質的に価値がありません。どのような条件下で、データが正規分布しているという帰無仮説を拒否することに興味がありますか?通常のテストが正しいことだという状況に出くわしたことはありません。サンプルサイズが小さい場合、正規性からの大きな逸脱も検出されません。また、サンプルサイズが大きい場合、正規性からのわずかな偏差でさえ、nullが拒否されることになります。
例えば:
> set.seed(100)
> x <- rbinom(15,5,.6)
> shapiro.test(x)
Shapiro-Wilk normality test
data: x
W = 0.8816, p-value = 0.0502
> x <- rlnorm(20,0,.4)
> shapiro.test(x)
Shapiro-Wilk normality test
data: x
W = 0.9405, p-value = 0.2453
そのため、これらの両方のケース(二項および対数正規の変量)では、p値は0.05を超えており、nullを拒否できません(データが正常であること)。これは、データが正常であると結論付けることを意味しますか? (ヒント:答えはノーです)。拒否しないことは、受け入れることと同じではありません。これは仮説検定101です。
しかし、より大きなサンプルサイズについてはどうでしょうか。分布がveryほぼ正常である場合を考えてみましょう。
> library(nortest)
> x <- rt(500000,200)
> ad.test(x)
Anderson-Darling normality test
data: x
A = 1.1003, p-value = 0.006975
> qqnorm(x)
ここでは、200自由度のt分布を使用しています。 qqプロットは、分布が実際の世界で見られる可能性のある分布よりも正規分布に近いことを示していますが、テストは非常に高い信頼度で正規性を拒否します。
正規性に対する重要なテストは、この場合、通常の理論統計を使用すべきではないことを意味しますか? (別のヒント:答えはノーです:))
SnowsPenultimateNormalityTest
パッケージのTeachingDemos
も強くお勧めします。ただし、テスト自体よりも 関数のドキュメント の方がはるかに便利です。テストを使用する前によくお読みください。
SnowsPenultimateNormalityTest
には確かにその長所がありますが、qqnorm
もご覧ください。
X <- rlnorm(100)
qqnorm(X)
qqnorm(rnorm(100))
関数 shapiro.test
、正常性のシャピロ-ウィルクス検定を実行します。私はそれに満足しています。
Anderson-Darlingテストも役立ちます。
library(nortest)
ad.test(data)
ライブラリー(DnE)
x <-rnorm(1000,0,1)
is.norm(x、10,0.05)
テストを実行すると、帰無仮説が真である場合に拒否する確率があります。
Nextt Rコードを参照してください。
p=function(n){
x=rnorm(n,0,1)
s=shapiro.test(x)
s$p.value
}
rep1=replicate(1000,p(5))
rep2=replicate(1000,p(100))
plot(density(rep1))
lines(density(rep2),col="blue")
abline(v=0.05,lty=3)
グラフは、サンプルサイズが小さい場合でも大きい場合でも、帰無仮説が真である場合に棄却する可能性が5%あることを示しています(Type-Iエラー)。
QqplotsおよびShapiro-Wilkテストに加えて、次の方法が役立つ場合があります。
定性:
定量的:
質的メソッドは、Rで以下を使用して生成できます。
library("ggpubr")
library("car")
h <- hist(data, breaks = 10, density = 10, col = "darkgray")
xfit <- seq(min(data), max(data), length = 40)
yfit <- dnorm(xfit, mean = mean(data), sd = sd(data))
yfit <- yfit * diff(h$mids[1:2]) * length(data)
lines(xfit, yfit, col = "black", lwd = 2)
plot(ecdf(data), main="CDF")
lines(ecdf(rnorm(10000)),col="red")
ggdensity(data)
ggqqplot(data)
警告-盲目的にテストを適用しないでください。統計をしっかりと理解しておくと、どのテストをいつ使用するか、仮説テストでの仮定の重要性を理解するのに役立ちます。