부드러운 스플라인 / 황토 회귀의 p- 값을 어떻게 찾습니까?


10

나는 몇 가지 변수를 가지고 있으며 그들 사이의 비선형 관계를 찾고 싶습니다. 그래서 스플라인이나 황토를 맞추고 멋진 음모를 인쇄하기로 결정했습니다 (아래 코드 참조). 그러나, 나는 또한 관계가 무작위의 문제 일 가능성이 어느 정도인지를 알려주는 통계를 원합니다. 예를 들어 선형 회귀와 같이 전체 p- 값이 필요합니다. 즉, 코드가 데이터에 곡선을 맞추기 때문에 적합 곡선이 의미가 있는지 알아야합니다.

x <- rnorm(1000)
y <- sin(x) + rnorm(1000, 0, 0.5)

cor.test(x,y)
plot(x, y, xlab = xlab, ylab = ylab)
spl1 <- smooth.spline(x, y, tol = 1e-6, df = 8)
lines(spl1, col = "green", lwd = 2)

spl2 <- loess(y ~ x)
x.pr <- seq(min(x), max(x), length.out = 100)
lines(x.pr, predict(spl2, x.pr), col = "blue", lwd = 2)

답변:


8

스플라인 라이브러리에는 함수가 있으며 함수 bsns함께 사용할 스플라인 기준을 lm만든 다음 스플라인을 포함하여 선형 모델과 모델을 맞추고 anova함수를 사용 하여 전체 및 축소 모델 테스트를 수행하여 스플라인 모델이 훨씬 더 잘 맞는지 확인할 수 있습니다 선형 모델보다.

예제 코드는 다음과 같습니다.

x <- rnorm(1000)
y <- sin(x) + rnorm(1000, 0, 0.5)

library(splines)

fit1 <- lm(y~x)
fit0 <- lm(y~1)
fit2 <- lm(y~bs(x,5))

anova(fit1,fit2)
anova(fit0,fit2)

plot(x,y, pch='.')
abline(fit1, col='red')
xx <- seq(min(x),max(x), length.out=250)
yy <- predict(fit2, data.frame(x=xx))
lines(xx,yy, col='blue')

poly함수를 사용하여 다항식 피팅을 수행하고 비선형 항을 곡률 테스트로 테스트 할 수 있습니다.

황토 적합을 위해 조금 더 복잡합니다. 선형 및 황토 모델에 대한 값 과 함께 사용 하여 F 테스트 를 수행 할 수있는 황토 평활화 매개 변수에 대한 동등한 자유도 추정치가 있습니다 . 부트 스트랩 및 순열 테스트를 기반으로 한 방법이 더 직관적이라고 생각합니다.아르 자형2

loess fit에 대한 신뢰 구간을 계산하고 플로팅하는 기술이 있습니다 (ggplot2 패키지에 내장 된 방법이 있다고 생각합니다). p- 값이 아니지만 여전히 예 / 아니오를 제공합니다.

선형 모형을 적합하고 잔차를 취하고 반응으로 잔차에 황토 모형을 적합 (및 예측 변수로 관심 변수) 할 수 있습니다. 실제 모형이 선형 인 경우이 적합은 평평한 선에 가깝고 점을 다시 정렬해야합니다. 예측 자와 관련하여 아무런 차이가 없어야합니다. 이를 사용하여 순열 테스트를 만들 수 있습니다. 황토를 맞추고, 0에서 가장 먼 예측 값을 찾은 다음, 무작위로 점을 퍼머 팅하고 새로운 황토를 맞추고 0에서 가장 먼 예측 된 점을 찾고, 여러 번 반복하며, p- 값은 추가 된 치환 된 값의 비율입니다. 원래 값보다 0부터

황토 대역폭을 선택하는 방법으로 교차 유효성 검사를보고 싶을 수도 있습니다. 이것은 p- 값을 제공하지 않지만, 무한대 대역폭이 완벽한 선형 모델에 해당합니다. 교차 검증이 매우 큰 대역폭을 제안하면 더 높은 대역폭이 명확하게 열등한 경우 선형 모델이 합리적 일 수 있습니다 더 작은 대역폭은 명확한 곡률을 나타내며 선형으로는 충분하지 않습니다.


그렉 감사합니다! 나는 스플라인이 그것을 설명하는지 아닌지를보기 위해 선형 모델과 비교하는 데 관심이 없다는 것을 제외하고는 첫 번째 단락이 갈 길이라고 생각합니다. anova로 스플라인을 테스트하는 방법에 대한 코드 또는 더 구체적인 포인터를 제공해 주시겠습니까? 나는 bs와 ns 함수를 살펴 보았지만 직접 발명 할 수있는 통계는 좋지 않습니다.
Curious

그리고 그렇습니다. loess ( fibosworld.wordpress.com/2012/11/04/loess-regression-with-r 참조 )에 대해 를 계산하는 방법을 찾았 지만 를 p-로 변환하는 방법을 모릅니다 value ...아르 자형2아르 자형2
Curious

anovawith splines 접근법에 대한 예제 코드를 추가했습니다 . 중 F 시험 이 고려 SSR은 SST에 의해 분할된다 SSE이 비도록, SST에 의해 분할된다 그냥 SSR을 SSE로 나눈 값 (SST의 두 경우 취소). 자유 도와 약간의 대수를 포함 시키면 전체 회귀에 대한 F 통계량이 있습니다. 아르 자형2아르 자형21아르 자형2아르 자형21아르 자형2
Greg Snow

그렉, 고마워! 1) 무엇을 lm(y~bs(x,5))하고 있고 왜 그렇지 않은지 설명해 주 lm(y~I(bs(x,5)))시겠습니까? bs (x, 5)의 결과가 변수가 아니기 때문에이 호출에 상당히 혼란 스럽습니다 ... 2) 내가 찾고있는 p- 값이 결과라는 것을 올바르게 이해하고 anova(fit0,fit2)있습니까?
Curious

1
그것은 선형 회귀를하고 있습니다. , 및 을 사용하여 다항식을 기반으로 곡선에 맞추기 위해 선형 회귀를 수행 할 수있는 것처럼 함수는 변수의 변환을 만들어 선형 회귀를 수행하는 함수에 전달합니다 . 엑스엑스2엑스bs엑스lm
Greg Snow
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.