>

정규 분포를 가정 할 때 신뢰 구간을 계산하려는 표본 데이터가 있습니다.

numpy 및 scipy 패키지를 찾아서 설치했으며 평균 및 표준 편차 (numpy.mean (data)와 데이터가 목록으로 표시됨)를 반환하도록 numpy를 받았습니다. 샘플 신뢰 구간을 얻는 것에 대한 조언은 대단히 감사하겠습니다.

  • 답변 # 1

    import numpy as np
    import scipy.stats
    
    def mean_confidence_interval(data, confidence=0.95):
        a = 1.0 * np.array(data)
        n = len(a)
        m, se = np.mean(a), scipy.stats.sem(a)
        h = se * scipy.stats.t.ppf((1 + confidence) / 2., n-1)
        return m, m-h, m+h
    
    
    이런 식으로 계산할 수 있습니다.

  • 답변 # 2

    여기서 배열 a 의 평균의 95 % 신뢰 구간을 계산하는 단축 된 버전의 shasan 코드 :

    import numpy as np, scipy.stats as st
    st.t.interval(0.95, len(a)-1, loc=np.mean(a), scale=st.sem(a))
    
    

    하지만 StatsModels의 tconfint_mean을 사용하는 것이 더 좋을 것입니다.

    import statsmodels.stats.api as sms
    sms.DescrStatsW(a).tconfint_mean()
    
    

    둘 다의 기본 가정은 표본 (배열 a )은 표준 편차를 알 수없는 정규 분포와 독립적으로 도출되었습니다 (MathWorld 또는 Wikipedia 참조). 큰 표본 크기 n의 경우 표본 평균이 정규 분포를 따르고 st.norm.interval() 를 사용하여 신뢰 구간을 계산할 수 있습니다.  (Jaime의 의견에서 제안한 바와 같이). 그러나 위의 솔루션은 st.norm.interval() 의 작은 n에도 맞습니다.  너무 좁은 신뢰 구간을 제공합니다 (예 : "가짜 신뢰"). 자세한 내용 및 여기에 Russ의 의견 중 하나는 비슷한 질문에 대한 내 대답을 참조하십시오.

    올바른 옵션이 (필수적으로) 동일한 신뢰 구간을 제공하는 예 :

    In [9]: a = range(10,14)
    In [10]: mean_confidence_interval(a)
    Out[10]: (11.5, 9.4457397432391215, 13.554260256760879)
    In [11]: st.t.interval(0.95, len(a)-1, loc=np.mean(a), scale=st.sem(a))
    Out[11]: (9.4457397432391215, 13.554260256760879)
    In [12]: sms.DescrStatsW(a).tconfint_mean()
    Out[12]: (9.4457397432391197, 13.55426025676088)
    
    
    마지막으로 st.norm.interval() 를 사용한 잘못된 결과 :

    In [13]: st.norm.interval(0.95, loc=np.mean(a), scale=st.sem(a))
    Out[13]: (10.23484868811834, 12.76515131188166)
    
    

  • 답변 # 3

    조회 테이블에서 원하는 신뢰 구간에 대한 z- 값을 찾는 것으로 시작하십시오. 신뢰 구간은 mean +/- z*sigma 입니다. 여기서 sigma   sigma = s / sqrt(n) 가 제공 한 표본 평균의 추정 표준 편차입니다. 여기서 s  표본 데이터와 n 에서 계산 된 표준 편차입니다.  샘플 크기입니다.

  • 답변 # 4

    Python 3.8 시작 표준 라이브러리는 NormalDist 를 제공합니다.   statistics 의 일부로 객체  모듈 :

    from statistics import NormalDist
    def confidence_interval(data, confidence=0.95):
      dist = NormalDist.from_samples(data)
      z = NormalDist().inv_cdf((1 + confidence) / 2.)
      h = dist.stdev * z / ((len(data) - 1) ** .5)
      return dist.mean - h, dist.mean + h
    
    

    이것 :

    와이즈 비즈를 만듭니다  데이터 샘플의 객체 ( NormalDist NormalDist.from_samples(data) 를 통해 표본의 평균 및 표준 편차에 액세스 할 수 있습니다.  그리고 NormalDist.mean .

    와이즈 비즈 계산  표준 정규 분포 ( NormalDist.stdev 로 표시) ) 누적 분포 함수의 역수를 사용하여 주어진 신뢰도 ( Z-score ) ).

    샘플의 표준 편차 및 평균을 기반으로 신뢰 구간을 생성합니다.

    <시간> 이것은 표본 크기가 NormalDist() 를 계산하기 위해 학생의 t 분포 대신 표준 정규 분포를 사용하기에 충분히 크다고 가정합니다 (약 100 포인트 이상이라고 가정).  가치.

    inv_cdf

관련 자료

  • 이전 python-docx의 실행 수준 내용은 무엇입니까?
  • 다음 c# - 명령 줄에서 목록 상자 선택을 기반으로 별도의 스크립트를 실행하는 방법은 무엇입니까?