development

데이터가 R에 정규 분포되어 있는지 확인

big-blog 2020. 12. 31. 23:19
반응형

데이터가 R에 정규 분포되어 있는지 확인


누군가 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입니다.

그러나 더 큰 표본 크기는 어떻습니까? 의는 분포가있는 경우하자 매우 거의 정상을.

> 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정규성에 대해 Shapiro-Wilks 검정을 수행 하는 함수 사용을 고려하십시오 . 나는 그것에 만족했습니다.


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)

The graph shows that whether you have a sample size small or big a 5% of the times you have a chance to reject the null hypothesis when it s true (a Type-I error)


In addition to qqplots and the Shapiro-Wilk test, the following methods may be useful.

Qualitative:

  • histogram compared to the normal
  • cdf compared to the normal
  • ggdensity plot
  • ggqqplot

Quantitative:

The qualitive methods can be produced using the following in 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)

A word of caution - don't blindly apply tests. Having a solid understanding of stats will help you understand when to use which tests and the importance of assumptions in hypothesis testing.

ReferenceURL : https://stackoverflow.com/questions/7781798/seeing-if-data-is-normally-distributed-in-r

반응형