이 표본에 대해 (log-) 정규성을 가정 할 수 있습니까?


11

다음은 샘플에 대한 QQ 플롯입니다 (로그 Y 축에 주목). :n=1000

여기에 이미지 설명을 입력하십시오
whuber가 지적했듯이 이것은 기본 분포가 왼쪽으로 치우쳐 있음을 나타냅니다 (오른쪽 꼬리가 짧음).

shapiro.testW=0.97185.1721013H0:the sample is normal distributed

내 질문은 : (log-) 정상 성을 가정하여 추가 분석을 위해 실제로 충분합니까? 특히 Cox and Land의 근사법 (Zou, GY, cindy Yan Huo 및 Taleban, J. (2009)에 기술 된 방법을 사용하여 유사한 표본 평균에 대한 신뢰 구간을 계산하려고합니다. 대수적 평균 및 환경 응용 프로그램과의 차이점 Environmetrics 20, 172–180) :

ci <- function (x) {
        y <- log(x)
        n <- length(y)
        s2 <- var(y)
        m <- mean(y) + s2 / 2
        z <- qnorm(1 - 0.05 / 2) # 95%
        #z <- qnorm(1 - 0.10 / 2) # 90%
        d <- z * sqrt(s2 / n + s2 * s2 / (2 * (n - 1)))

        return(c(exp(m - d), exp(m + d)))
}

신뢰 구간이 실제 표본 평균보다 약간 높은 지점을 중심으로하는 경향이 있음을 알게되었습니다. 예를 들면 다음과 같습니다.

> mean(x)
[1] 82.3076
> y <- log(x)
> exp(mean(y) + var(y) / 2)
[1] 91.22831

H0


1
분포는 확실히 오른쪽 꼬리에 잘 맞지 않습니다.
Michael R. Chernick 21

1
이 QQ 플롯 쇼 데이터가 훨씬이 짧은 로그 정규 분포를보다 바로 꼬리를 :이되어 왼쪽 로그 정규에 비해 왜곡. 따라서 로그 정규 기반 프로 시저를 사용하는 것이 불편합니다.
whuber

@ whuber 예, 오른쪽으로 치우 치지 않고 비뚤어져 있습니다. 질문을 업데이트해야합니까?
Vegard

물론 : 개선 된 질문에 감사드립니다.
whuber

2
NB : "왼쪽으로 치우친"이란 왼쪽 꼬리가 길지 않고 오른쪽 꼬리가 짧다는 것을 명시 적으로 나타냅니다 . 이것은 플롯 의 오른쪽 에있는 점이 기준선 아래로 떨어지는 방식에 의해 분명 합니다. 그림의 왼쪽에있는 점이 기준선에 상대적으로 가깝기 때문에이 분포를 "왼쪽 더 긴 꼬리"를 갖는 것으로 잘못 정의하는 것은 올바르지 않습니다. 오른쪽 꼬리 는 왼쪽 꼬리보다 추정 평균에 훨씬 더 큰 영향을 주어야 하기 때문에 구별이 중요합니다 ( 꼬리가 신뢰 구간에 영향을주는 반면 ).
whuber

답변:


12

이 데이터는 감마 분포와 달리 로그 정규 분포에 비해 꼬리가 짧습니다.

set.seed(17)
par(mfcol=c(1,1))
x <- rgamma(500, 1.9)
qqnorm(log(x), pch=20, cex=.8, asp=1)
abline(mean(log(x)) + .1,1.2*sd(log(x)), col="Gray", lwd=2)

QQPlot

그럼에도 불구하고, 데이터 크게 왜곡되었으므로 평균과 신뢰 구간을 추정하는 데 가장 큰 값이 중요한 역할을 할 것으로 예상 할 수 있습니다. 따라서 로그 정규 (LN) 추정값이 평균과 두 신뢰 한계 를 과대 평가 하는 경향이있을 것으로 예상해야 합니다 .

일반적인 추정량, 즉 표본 평균과 정규 이론 신뢰 구간을 확인하고 비교해 봅시다. 일반적인 추정량은 데이터가 아니라 표본 평균 의 대략적인 정규성에만 의존하며 , 이러한 대규모 데이터 집합을 사용하면 효과가있을 것으로 예상 할 수 있습니다. 이렇게하려면 ci함수를 약간 수정해야 합니다.

ci <- function (x, alpha=.05) {
  z <- -qnorm(alpha / 2)
  y <- log(x); n <- length(y); s2 <- var(y)
  m <- mean(y) + s2 / 2
  d <- z * sqrt(s2 / n + s2 * s2 / (2 * (n - 1)))
  exp(c(mean=m, lcl=m-d, ucl=m+d))
}

다음은 정규 이론 추정치에 대한 병렬 함수입니다.

ci.u <- function(x, alpha=.05) {
 mean(x) + sd(x) * c(mean=0, lcl=1, ucl=-1) / sqrt(length(x)) * qnorm(alpha/2)
}

이 시뮬레이션 된 데이터 셋에 적용하면 출력은

> ci(x)
   mean     lcl     ucl 
2.03965 1.87712 2.21626 
> ci.u(x)
   mean     lcl     ucl 
1.94301 1.81382 2.07219 

ci.u1.9

trial <- function(n=500, k=1.9) {
  x <- rgamma(n, k)
  cbind(ci(x), ci.u(x))
}
set.seed(17)
sim <- replicate(5000, trial())

1.9

xmin <- min(sim)
xmax <- max(sim)
h <- function(i, ...) {
  b <- seq(from=floor(xmin*10)/10, to=ceiling(xmax*10)/10, by=0.1)
  hist(sim[i,], freq=TRUE, breaks=b, col="#a0a0FF", xlab="x", xlim=c(xmin, xmax), ...)
  hist(sim[i,sim[i,] >= 1.9], add=TRUE,freq=TRUE, breaks=b, col="#FFa0a0",
                              xlab="x", xlim=c(xmin, xmax), ...)
}
par(mfcol=c(2,3))
h(1, main="LN Estimate of Mean")
h(4, main="Sample Mean")
h(2, main="LN LCL")
h(5, main="LCL")
h(3, main="LN UCL")
h(6, main="UCL")

히스토그램

로그 정규 프로 시저가 평균 및 신뢰 한계를 과대 평가하는 경향이있는 반면, 일반적인 프로시 저는 제대로 작동합니다. 신뢰 구간 절차의 적용 범위를 추정 할 수 있습니다.

> sapply(c(LNLCL=2, LCL=5, LNUCL=3, UCL=6), function(i) sum(sim[i,] > 1.9)/dim(sim)[2])
 LNLCL    LCL  LNUCL    UCL 
0.2230 0.0234 1.0000 0.9648 

이 계산은 말합니다 :

  • LN 하한은 의도 된 2.5 % 대신에 시간의 약 22.3 %를 참는 데 실패합니다.

  • 일반적인 하한은 의도 된 2.5 %에 가까운 시간의 실제 평균 약 2.3 %를 커버하지 못합니다.

  • LN 상한 은 의도 한대로 시간의 2.5 % 아래로 떨어지지 않고 항상 실제 평균을 초과합니다. 이로 인해 95 % 신뢰 구간 대신 양면 100 %-(22.3 % + 0 %) = 77.7 % 신뢰 구간이됩니다.

  • 일반적인 상한선은 시간의 약 100-96.5 = 3.5 %에 해당하는 실제 평균을 커버하지 못합니다. 이는 의도 된 값 2.5 %보다 약간 큽니다. 따라서 일반적인 한계는 95 % 신뢰 구간 대신 양측 100 %-(2.3 % + 3.5 %) = 94.2 % 신뢰 구간으로 구성됩니다.

로그 정규 구간에 대한 공칭 범위의 95 %에서 77.7 % 로의 감소는 끔찍합니다. 일반적인 간격 동안 94.2 % 로의 감소는 전혀 나쁘지 않으며 왜곡 (원시 데이터의 로그가 아닌)의 영향으로 인한 것일 수 있습니다.

우리는 결론해야 더 분석 평균의이 해야 하지 lognormality을 가정합니다.

조심해! 예측 한계와 같은 일부 절차는 평균에 대한 이러한 신뢰 한계보다 왜곡에 더 민감하므로 왜곡 된 분포를 고려해야합니다. 그러나 로그 정규 절차가 실제로 의도 된 분석을 위해 이러한 데이터로 잘 수행되지는 않을 것 같습니다.


와우,이 대답은 나를 날려 버립니다. 정말 고맙습니다! 어떻게 사용 오는 abline()대신 qqline()첫 번째 예에서 (다른 라인을 생산하는)?
Vegard

당신의 trial()함수는 인수를 사용하지 않습니다.
Vegard


1
좋은 작업! 부트 스트랩의 경우 다음을 수정 trial하십시오 trial <- function(y) { x <- sample(y, length(y), TRUE); cbind(ci(x), ci.u(x)) }.. 그런 다음 하나의 명령 만 실행하십시오 sim <- sapply(1:5000, function(i) trial(x)). sim나중에 6 줄의 히스토그램을 살펴볼 수 있습니다 .
whuber

1
+1, 특히 예측 구간이 평균에 대한 신뢰 구간보다 분포 형태에 더 민감하다는 미묘한 점이 좋습니다.
gung-복직 모니카
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.