R 코드를 제공해 주시겠습니까?
여기서 문제는 y
을 boot.ci로 전달한다는 것이지만, my_function을 실행할 때마다 원래의 x
을 사용한다는 점이 문제입니다. my_function에 x 입력이 없음을 주목하십시오.) 부트 스트랩은 재 샘플링 된 데이터에 통계 함수를 적용하므로 원래 x
및 y
의 샘플을 사용하여 통계 함수를 적용하는 경우 무의미한 결과가 발생합니다. 이것이 BCA 메소드가 전혀 작동하지 않는 이유입니다. 즉, 동일한 수의 요소가없는 잭 나이프 샘플에는 통계 함수를 적용 할 수 없습니다.
샘플은 축 0 (행)을 따라 취해 지므로 여러 1D 배열을 통계 함수에 전달하려면 xy = vstack((x,y)).T
여러 열을 사용할 수 있으며 해당 열의 데이터를 가져 오는 statfunction을 사용하십시오. 당신의 모든 데이터와 장난 방지하기 위해 원하는 경우
def my_function(xysample):
return stats.linregress(xysample[:,0], xysample[:,1])[2]
또는, 당신은 인덱스에 작동하는 함수를 정의 할 수 있고, 그럼 그냥 boot.ci하는 인덱스를 전달합니다
def my_function2(i):
return stats.linregress(x[i], y[i])[2]
boot.ci(np.arange(len(x)), statfunction=my_function2, alpha=0.05, n_samples=1000, method='pi')
주를이 이 경우 BCA 작동하므로, 백분율 간격을 실제로 사용하지 않는 한 method = 'bca'를 사용할 수도 있습니다. BCA는 거의 항상 더 좋습니다.
나는이 두 가지 방법 모두 이상적이지 않다는 것을 알고 있습니다. 솔직히, 나는 이런 식으로 여러 배열을 내 statfunction에 전달할 필요가 없었으며, 대다수의 사람들은 자신의 statfunction으로 mean
을 사용했을 가능성이 높습니다. 여기에 가장 좋은 생각은 동일한 크기의 [0] 배열리스트가 전달되도록 허용하는 것일 수도 있습니다 (예 : boot.ci([x,y],...)
). 그런 다음 이들 모두를 동시에 샘플링하여 statfunction에 별도의 인수로 전달하십시오. 이 경우 my_function(x,y)
일 수 있습니다. 내가이 일을 할 수 있는지 알 겠어.하지만 R 코드를 보여 주면 좋을 것 같아. 이걸 다루는 더 좋은 방법이 있는지 알고 싶다.
업데이트 :
scikits.bootstrap (v0.3.1)의 최신 버전에서
는, 배열의 튜플 제공 할 수 있으며, 그들로부터 샘플 statfunction에 별도의 인수로 전달됩니다. 또한, statfunction은 배열 출력을 제공 할 수 있으며 출력의 각 지점에 대한 신뢰 구간이 계산됩니다.따라서, 이것은 이제 매우 쉽게 할 수 있습니다. 다음은 linregress마다 출력 신뢰 구간을 제공한다 :이 경우
cis = boot.ci((x,y), statfunction=stats.linregress)
cis[:,2]
원하는 신뢰 구간 것이다.
훌륭한 반응을 보내 주셔서 감사합니다. R에서는 전체 데이터 구조 (심지어는 명시 적 모델)를 통계 계산 기능에 전달하여 비슷한 방식으로 구현 된 것으로 보입니다. http://www.statmethods.net/advstats/bootstrapping.html – ToddP
감사합니다. 이것을 가져온다. 그건 그렇고, 당신이 스택 오버플로가 새로 생길 수도있는 것처럼 보입니다. 그래서 왼쪽에있는 체크 표시로 좋은 대답을 받아 들여 다른 사람들이 그 질문에 답을 얻었음을 알리는 것이 도움이된다고 언급해야한다고 생각했습니다. – cge
@ user2269232 대답을 수락 할 수 있습니다. 한두 번의 클릭으로 아무도 죽이지 않을 것입니다 .... – rll