데이터가 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
'development' 카테고리의 다른 글
안드로이드의 편집 텍스트에서 신용 카드 포맷 (0) | 2020.12.31 |
---|---|
Html.TextBoxFor를 사용할 때 텍스트 상자를 읽기 전용으로 설정할 수 있습니까? (0) | 2020.12.31 |
이전 편집 위치로 돌아가는 방법 (0) | 2020.12.31 |
/ sdcard에 디렉토리 생성 실패 (0) | 2020.12.31 |
데이터 테이블 날짜 정렬 dd / mm / yyyy 문제 (0) | 2020.12.31 |