데이터가 정규 분포를 따르는 지 확인하기 위해 R을 사용하여 테스트를 수행하는 방법


44

다음 구조의 데이터 세트가 있습니다.

a word | number of occurrence of a word in a document | a document id 

R에서 정규 분포 검정을 어떻게 수행 할 수 있습니까? 아마 쉬운 질문이지만 저는 R 초보자입니다.


5
@Skarab 어쩌면 내가 완전히 꺼져 있지만 Zipf의 법칙 ( j.mp/9er2lv ) 에 따라 단어의 빈도가 단어의 빈도 표에서 순위에 반비례 할 것이라고 기대하지 않습니까? 이 경우 zipfR패키지를 확인하십시오 .
chl

1
@chl에 동의합니다. 데이터가 정상적으로 배포되면 사소한 기적 일 것입니다. 아마도 데이터로 무엇을하고 싶은지에 대한 또 다른 질문이 가치가있을 것입니다. 바퀴를 재발 명하지 마십시오!
csgillespie

3
부정 발생 가능성이 0이 아닌 모델에 따라 데이터를 어떻게 분배 할 수 있습니까?
user603

1
이 테스트를 수행 한 이유는 무엇입니까?
whuber

정보 추출의 거대한 결과가 올바른지 추정하고 싶습니다. 텍스트에있는 엔티티의 분포가 내 기대를 따르는 지 확인하고 싶습니다 (도메인과 텍스트 코퍼스를 알고 있습니다).
Skarab

답변:


47

귀하의 질문을 올바르게 이해하면 문서 집합에서 단어 발생이 정규 분포를 따르는 지 테스트하려면 shapiro-Wilk 테스트와 일부 qqplots를 사용할 수 있습니다. 예를 들어

## Generate two data sets
## First Normal, second from a t-distribution
words1 = rnorm(100); words2 = rt(100, df=3)

## Have a look at the densities
plot(density(words1));plot(density(words2))

## Perform the test
shapiro.test(words1); shapiro.test(words2)

## Plot using a qqplot
qqnorm(words1);qqline(words1, col = 2)
qqnorm(words2);qqline(words2, col = 2)

qqplot 명령은 다음을 제공합니다. 대체 텍스트

두꺼운 꼬리로 인해 두 번째 데이터 세트가 분명히 보통이 아님을 알 수 있습니다 ( 추가 정보 ).

Shapiro-Walk 정규성 검정에서 p- 값은 첫 번째 데이터 세트의 경우 (> .9) 두 번째 데이터 세트 (<.01)의 경우 매우 작습니다. 이렇게하면 두 번째 귀무 가설을 기각 할 수 있습니다.


7
왜 분명히 정상이 아닌가?
Herman Toothrot

플롯 된 점은 정규 분포를 그릴 때 I-III 사분면 이등분선에 있어야한다고 생각합니다.
Campa

보다 일반적으로 (평균! = 0), qqline1 개의 기울기와 mu 절편을 가져야한다 .
Campa

@HermanToothrot 테일 값에 매우 큰 차이가 있기 때문에 두 번째 플롯을 볼 때 정상이 아닙니다. QQ 플롯은 이론적 Quantile (정상적인 경우)의 샘플 quantlie (데이터에서)를 구한 그래프입니다. 표본 데이터가 정상이면 관측치가 첫 번째 그림에서와 같이 선에 가까울 것으로 예상합니다. 또한 해당 플롯에 대한 y 축의 차이 스케일에 유의하십시오.
쉘던

15

데이터 세트가 호출 words되고 counts열 이 있다고 가정하면 히스토그램을 플로팅하여 분포를 시각화 할 수 있습니다.

hist(words$counts, 100, col="black")

여기서 100은 구간 수입니다.

다음을 사용하여 일반 QQ 플롯을 수행 할 수도 있습니다.

qqnorm(words$counts)

마지막으로 Shapiro-Wilk 테스트를 사용하여 정규화 할 수도 있습니다.

shapiro.test(word$counts)

그럼에도 불구하고이 토론을보십시오 : 정규성 테스트 : '필수적으로 쓸모 없는가?'


14

어떤 테스트는 데이터가 있음을 표시하지 않습니다 정규 분포를 - 데이터는 널을 거부 할 것이라고 정상에 충분히 일치하지 않는 경우에만 보여줄 수있을 것입니다.

그러나 카운트는 어떤 경우에도 정상이 아니며 양의 정수입니다. 정규 분포의 관측치가 정수가 아닌 값을 취할 확률은 얼마입니까? (... 그것은 확률 1의 사건이다).

이 경우 왜 정규성을 테스트 하시겠습니까? 사실이 아닙니다.

[경우에 따라 데이터가 실제로 정상이 아니라는 것을 반드시 알 수있는 것은 아닙니다. 실제 데이터는 정규 분포에서 실제로 도출되지 않습니다.

실제로 테스트를 수행해야하는 경우 Shapiro-Wilk 테스트 ( ?shapiro.test)는 일반적으로 널리 사용되는 일반적인 정규성 테스트입니다.


9

정규성을 보는보다 공식적인 방법은 첨도와 왜도가 0과 크게 다른지 테스트하는 것입니다.

이렇게하려면 다음을 얻어야합니다.

kurtosis.test <- function (x) {
m4 <- sum((x-mean(x))^4)/length(x)
s4 <- var(x)^2
kurt <- (m4/s4) - 3
sek <- sqrt(24/length(x))
totest <- kurt/sek
pvalue <- pt(totest,(length(x)-1))
pvalue 
}

첨도의 경우 :

skew.test <- function (x) {
m3 <- sum((x-mean(x))^3)/length(x)
s3 <- sqrt(var(x))^3
skew <- m3/s3
ses <- sqrt(6/length(x))
totest <- skew/ses
pt(totest,(length(x)-1))
pval <- pt(totest,(length(x)-1))
pval
}

왜도

이 두 테스트 모두 단측이므로 p- 값에 2를 곱하여 양측이되어야합니다. p- 값이 1보다 커지면 kurtosis.test 대신 1-kurtosis.test ()를 사용해야합니다.

다른 궁금한 점이 있으면 j.bredman@gmail.com으로 이메일을 보내 주시기 바랍니다.


moments 패키지 의 kurtosis()skewness()기능 과 관련하여 위의 두 기능의 차이점은 무엇입니까 ? 샘플을 사용한 결과 가 다릅니다. rnorm()
Nikos Alexandris

5

통계 패키지의 Shapiro-Wilk 테스트 외에도 nortest 패키지 (CRAN에서 사용 가능)는 다른 정규성 테스트를 제공합니다.


4

nortestR 패키지 를 사용하면 다음과 같은 테스트를 수행 할 수 있습니다.

  • Anderson-Darling 정규성 테스트 수행

    ad.test(data1)
  • 정규성에 대한 Cramér-von Mises 테스트 수행

    cvm.test(data1)
  • 정규성을위한 Pearson 카이-제곱 검정 수행

    pearson.test(data1)
  • 정규성에 대한 Shapiro-Francia 테스트 수행

    sf.test(data1)

normtest패키지 를 사용하여 다른 많은 테스트를 수행 할 수 있습니다 . https://cran.r-project.org/web/packages/normtest/normtest.pdf 에서 설명을 참조하십시오


@새긴 금; 여기에있는 'nortest' 패키지 에서 이러한 테스트를 언급 했습니다 : ( cran.r-project.org/web/packages/nortest/nortest.pdf ). 다른 유용한 패키지는 위에서 언급 한 'normtest' 입니다.
Nisha Arora 박사

알았어 고마워. 나는 무지하면서 하나의 이름이 오타라고 가정했습니다.
Nick Cox
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.