R의 lm과 biglm이 동일한 데이터에 대해 다른 p- 값을 제공하는 이유는 무엇입니까?


12

다음은 작은 예입니다.

MyDf<-data.frame(x=c(1,2,3,4), y=c(1.2, .7, -.5, -3))

이제 base::lm:

> lm(y~x, data=MyDf) %>% summary

Call:
lm(formula = y ~ x, data = MyDf)

Residuals:
    1     2     3     4 
-0.47  0.41  0.59 -0.53 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept)   3.0500     0.8738   3.491   0.0732 .
x            -1.3800     0.3191  -4.325   0.0495 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

Residual standard error: 0.7134 on 2 degrees of freedom
Multiple R-squared:  0.9034,    Adjusted R-squared:  0.8551 
F-statistic: 18.71 on 1 and 2 DF,  p-value: 0.04952

이제 패키지 biglm에서 같은 것을 시도하십시오 biglm.

XX<-biglm(y~x, data=MyDf) 
print(summary(XX), digits=5)

Large data regression model: biglm(y ~ x, data = MyDf)
Sample size =  4 
             Coef     (95%      CI)      SE       p
(Intercept)  3.05  1.30243  4.79757 0.87378 0.00048
x           -1.38 -2.01812 -0.74188 0.31906 0.00002

우리가 필요하다는 주 printdigitsP 값을 볼 수 있습니다. 계수와 표준 오차는 동일하지만 p- 값은 매우 다릅니다. 왜 그렇습니까?


5
+1 힌트 : 비교 pt(-3.491, 2)*2pnorm(-3.491)*2예를 들어,.
whuber

@ whuber 감사합니다. 따라서 본질적으로 t- 분포 대 정규 분포 문제입니다. biglm의 전형적인 큰 데이터 세트에 대해 정규 분포가 더 의미가 있다는 생각입니까?
John Paul

1
생각은 정상이 높은 값을 가진 t와 다르지 않다고 생각 합니다. 첫 번째 주석에서 예제를 시도하지만 pt (-3.491, 2) * 2를 pt (-3.491, 2e3) * 2로 변경하십시오. ν
Andrey Kolyadin

답변:


9

어떤 p- 값이 올바른지 확인하려면 귀무 가설이 참인 시뮬레이션 된 데이터에 대해 계산을 반복합니다. 현재 설정에서 계산은 (x, y) 데이터에 가장 적합한 제곱이며, 귀무 가설은 기울기가 0입니다. 문제에는 4 개의 x 값 1,2,3,4가 있고 추정 오차는 약 0.7이므로 시뮬레이션에이를 통합 해 봅시다.

다음은 모든 사람이 이해할 수 있도록 작성된 설정입니다 R.

beta <- c(intercept=0, slope=0)
sigma <- 0.7
x <- 1:4
y.expected <-  beta["intercept"] + beta["slope"] * x

시뮬레이션은 독립적 인 오류를 생성하고에 추가하고 , 적합하게 만들고 p- 값을 계산 하기 위해 y.expected호출 합니다. 비효율적이지만 사용 된 실제 코드를 테스트하고 있습니다. 우리는 여전히 몇 초 안에 수천 번의 반복을 할 수 있습니다.lmsummary

n.sim <- 1e3
set.seed(17)
data.simulated <- matrix(rnorm(n.sim*length(y.expected), y.expected, sigma), ncol=n.sim)
slope.p.value <- function(e) coef(summary(lm(y.expected + e ~ x)))["x", "Pr(>|t|)"]
p.values <- apply(data.simulated, 2, slope.p.value)

101귀무 가설이 참이면 올바르게 계산 된 p- 값은 사이의 균일 한 난수처럼 작동 합니다. 이러한 p- 값의 히스토그램을 통해 시각적으로 확인할 수 있습니다 (거의 수평으로 보임). 카이 제곱 균일 성 테스트를 통해보다 공식적인 평가를 수행 할 수 있습니다. 히스토그램은 다음과 같습니다.

h <- hist(p.values, breaks=seq(0, 1, length.out=20))

그림

그리고 이것이 충분히 균일하지 않다고 생각하는 사람들을 위해 여기 카이 제곱 테스트가 있습니다.

chisq.test(h$counts)

X 제곱 = 13.042, df = 18, p- 값 = 0.7891

이 테스트에서 큰 p- 값은 이러한 결과가 예상 균일 성과 일치 함을 보여줍니다. 즉, lm맞습니다.

그렇다면 p- 값의 차이는 어디에서 오는가? p- 값을 계산하기 위해 호출 될 가능성이있는 공식을 확인합시다. 어쨌든 검정 통계량은

|t|=|β^0se(β^)|,

추정 된 계수 와 가정 된 (및 정확한 값) 사이의 불일치와 동일하며, 계수 추정치의 표준 오차의 배수로 표현됩니다. 문제 에서이 값은 β=0β^β=0

|t|=|3.050.87378|=3.491

절편 추정과

|t|=|1.380.31906|=4.321

경사 추정치입니다. 일반적으로 이들은 자유도 매개 변수가 (데이터 양)에서 (예상 계수 수 )를 뺀 Student 분포 와 비교됩니다 . 절편에 대해 계산해 봅시다 :4 2t42

pt(-abs(3.05/0.87378), 4-2) * 2

[1] 0.0732

(이 계산 곱셈 왼쪽 꼬리 학생 의해 확률 이 한 실험이기 때문에 에 대해 양면 대안 ). 이것은 동의 출력.2 H 0 : β = 0 H A : β 0t2H0:β=0HA:β0lm

대체 계산은 표준 정규 분포를 사용하여 학생 분포 를 근사화합니다 . 그것이 무엇을 생산하는지 봅시다 :t

pnorm(-abs(3.05/0.87378)) * 2

[1] 0.000482

충분하다 : 통계량 biglm의 null 분포 가 표준 Normal 이라고 가정합니다 . 이것은 얼마나 많은 오류입니까? 대신에 이전 시뮬레이션을 다시 실행 하면 다음과 같은 p- 값의 히스토그램이 제공됩니다.tbiglmlm

그림 2

이 p- 값의 거의 18 % 는 "의미"의 표준 임계 값 인 미만 입니다. 엄청난 오류입니다.0.05


이 작은 조사에서 배울 수있는 교훈은 다음과 같습니다.

  1. 작은 데이터 세트에 대해 점근 분석 (표준 정규 분포와 같은)에서 파생 된 근사값을 사용하지 마십시오.

  2. 소프트웨어를 알고 있어야합니다.


2
좋은 답변입니다 (+1). 그러나 당신은 실제로 큰 데이터가 아닌 를 취하고 있습니다 ... 패키지 작성자 는 일반적인 빅 데이터 사례를 선호 하여 작은 사례를 무시했다고 생각합니다 . 그러나 이러한 혼란을 피하는 데 도움이 될만한 가치가 있습니다. , Nn=4n
epsilone
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.