S 자형 곡선의 직선 부분의 기울기 추정


11

나는이 임무를 받았으며 그에 걸렸다. 동료가 다음 차트 의 및 x_ {lower} 를 추정하도록 요청 했습니다.엑스이자형아르 자형엑스영형이자형아르 자형

여기에 이미지 설명을 입력하십시오

곡선은 실제로 누적 분포이며 x는 일종의 측정입니다. 그는 누적 함수가 직선화되고 직선화에서 벗어날 때 x의 해당 값이 무엇인지 알고 싶어합니다.

우리는 점에서 경사를 찾기 위해 미분을 사용할 수 있음을 이해하지만 언제 직선을 호출 할 수 있는지 결정하는 방법을 잘 모르겠습니다. 이미 존재하는 접근법 / 문학에 대한 모든 관심은 크게 감사하겠습니다.

이런 종류의 조사에 관한 패키지 나 예제를 알고 있다면 R도 알고 있습니다.

고마워


최신 정보

Flounderer 덕분에 작업을 더 확장하고 프레임 워크를 설정하며 여기저기서 매개 변수를 조정할 수있었습니다. 학습 목적으로 여기에 현재 코드와 그래픽 출력이 있습니다.

library(ESPRESSO)

x <- skew.rnorm(800, 150, 5, 3)
x <- sort(x)
meanX <- mean(x)
sdX <- sd(x)
stdX <- (x-meanX)/sdX
y <- pnorm(stdX)

par(mfrow=c(2,2), mai=c(1,1,0.3,0.3))
hist(x, col="#03718750", border="white", main="")

nq <- diff(y)/diff(x)
plot.ts(nq, col="#6dc03480")

log.nq <- log(nq)
low <- lowess(log.nq)
cutoff <- .7
q <- quantile(low$y, cutoff)
plot.ts(log.nq, col="#6dc03480")
abline(h=q, col="#348d9e")

x.lower <- x[min(which(low$y > q))]
x.upper <- x[max(which(low$y > q))]
plot(x,y,pch=16,col="#03718750", axes=F)
axis(side=1)
axis(side=2)
abline(v=c(x.lower, x.upper),col="red")
text(x.lower, 1.0, round(x.lower,0))
text(x.upper, 1.0, round(x.upper,0))

여기에 이미지 설명을 입력하십시오


2
이차 미분 값이 0인지 또는 0에 가까워 졌는지 확인할 수 있습니까?
alex

3
공식화의 문제는 아마도 "똑 바른"절단이 존재하지 않을 수 있다는 것입니다. 강한 렌즈를 사용하여 해당 영역을 검사하면 렌즈가 여전히 부드럽게 S 자 모양임을 알 수 있습니다.
ttnphns 2016 년

@alex이 팁에 감사드립니다. 저는 소매를 감아 서 몇 가지 생각과 시도를하겠습니다.
Penguin_Knight

2
커널 밀도 추정, 로그-스플라인 밀도 추정 또는 일부 파라 메트릭 모델에 의해 일부 밀도에 맞추는 경우, 피크에서 밀도의 높이는 CDF의 최대 기울기의 추정치입니다. 피크의 '폭'은 x 값의 범위가 얼마나 넓은 지에 대해 무언가를 알려줍니다.
Glen_b-복지 주 모니카

2
@Glen_b의 의견을 추적하기 위해, 요점은 당신이 요구하는 것이 충분히 엄격하게 정의되지 않았다는 것입니다. "어깨"x_lower 및 x_upper가 PDF의 최대 값보다 얼마나 아래에 위치해야합니까? 일부 정량적 기준이 필요합니다.
whuber

답변:


9

@ alex의 제안을 바탕으로 한 빠르고 더러운 아이디어가 있습니다.

#simulated data
set.seed(100)
x <- sort(exp(rnorm(1000, sd=0.6)))
y <- ecdf(x)(x)

데이터와 약간 비슷합니다. 아이디어는 이제 미분을보고 그것이 가장 큰 곳을 보려고합니다. 이것은 S 자형이기 때문에 가장 직선 인 커브 부분이어야합니다.

NQ <- diff(y)/diff(x)
plot.ts(NQ)

값 중 일부가 서로 매우 가깝기 때문에 흔들 립니다. 그러나 로그를 작성하면 도움이되며 매끄러운 버전을 사용할 수 있습니다.엑스

log.NQ <- log(NQ)
low <- lowess(log.NQ)
cutoff <- 0.75
q <- quantile(low$y, cutoff)
plot.ts(log.NQ)
abline(h=q)

이제 다음과 같이 찾으십시오 .엑스

x.lower <- x[min(which(low$y > q))]
x.upper <- x[max(which(low$y > q))]
plot(x,y)
abline(v=c(x.lower, x.upper))

여기에 이미지 설명을 입력하십시오

cutoff와이


이것은 굉장하다! 예제와 코드에 감사드립니다! 내 데이터로 시도했지만 꽤 잘 작동하는 것 같습니다. :)
Penguin_Knight

감사! 나도 그것을 기쁘게 생각합니다. 재밌게 통나무를 가져가는 방법이 재미 있습니다.
Flounderer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.