2016-07-31 2 views
0

저는 양쪽 끝에서 자르고 싶은 이항 비대칭 분포를가집니다. 그 중 특정 부분은 각 종의 적절한면에서 대칭 경계를 계산하고 싶다는 것입니다. 이 그림은 단순화를 위해 종간 분리의 극단적 인 경우를 보여줍니다. 적색 상처는 눈 양쪽에 사용되는 1,550 청색 선으로 선택되며이 때 바이 모달 데이터의 대칭 특정 커트 설정

enter image description here

잠재적으로 트림하는 기능을 통해 전달 될 수있는 임의의 값을 나타낸다. 내 목표는 파란색 선 사이의 모든 부분 집합입니다.

hist(p3_cut$x,50) 
abline(v=c(6200,7600),col='red') 
abline(v=c(6200-1500,7600+1500),col='blue') 

내 생각에 여기 문제는 기본적으로 각 곡선의 '가장자리'를 찾습니다. 나는 평균값 사이의 반 거리를 사용할 수 없으며, 0 (또는 매우 낮은 값)에서 상대적으로 높은 주파수로 주파수 변화를 인식하는 것이 필요합니다.

+0

할 수 있습니다'binned_x <와 변수의 비닝 버전을 얻을 - 컷 (p3_cut의 $의 X, 50) ', 그리고 (차이'로 연속 쓰레기통 사이의 카운트의 차이를 얻을 테이블 (binned_x))'. 그런 다음 차등 벡터의 최대/최소값을 찾아 주파수의 가장 큰 변화를 찾을 수 있습니다. –

+0

나는 접근법을 좋아하지만 bin = 50이 알려졌다. 알려진 '완벽한'binning없이 그것을 해결하는 방법은 무엇입니까? 또한, 최대 변화가 제로 주파수와 첫 번째 절단 대신 첫 번째 절단과 두 번째 절단 사이에 있다면 어떻게해야합니까 ?? –

+0

@PhilippeMarchand 예를 들어 bin = 50을 변경하면 최대 (diff (table (binned_x))) = 103이되고 bin = 10을 사용하면 같은 결과가 나에게 243이됩니다. 또한 그래프에서 볼 수 있듯이 두 번째 커브의 변경은 첫 번째 빈과 두 번째 빈 사이에서 최대가 될 것이며 0과 첫 번째 빈 사이가 아님 –

답변

1

다소 일반적인 답변입니다. 문제에 따라서는 밀도 함수의 binwidth을 조정해야 할 수도 있습니다 :

# get density of x and normalize so max is one 
dens <- density(x,adjust=0.1) 
dens$y <- dens$y/max(dens$y) 

# keep all x where density is higher than some fraction of max (here 1%) 
min_frac <- 0.01 
x_keep <- dens$x[dens$y > 0.01] 

# find position of gap in x, and get x just before and after gap 
gap_pos <- which.max(diff(x_keep)) 
left_cut <- x_keep[gap_pos] 
right_cut <- x_keep[gap_pos + 1] 

이 코드를 사용하고, 내가이 사건에 대해 적어도 거의 완벽한 컷을 계산할 수 있었다 density 기능의 매개 변수를 조정 변경. 이 접근법은이 상황과 비슷한 대부분의 상황에서 충분히 유연하다는 점이 긍정적입니다. 나는 제안 된 삭감 결과를 보여준다.

enter image description here

enter image description here

+0

이 점을 찾는 데 충분하다고 생각합니다. 문제에 대한 $ y> 임계 값을 변경해야하지만 좋습니다. 유연성도 있기 때문에 충분하다. –