태그 보관물: probability

probability

평균 및 표준 편차가 주어진 정규 분포에서 확률을 계산하는 방법은 무엇입니까? 무엇입니까? 이 질문의

파이썬에서 평균, 표준이 주어진 정규 분포에서 확률을 계산하는 방법은 무엇입니까? 이 질문의 OP와 같은 정의에 따라 항상 내 자신의 함수를 명시 적으로 코딩 할 수 있습니다. Python의 분포에서 랜덤 변수의 확률 계산

라이브러리 함수 호출이 있는지 궁금하면이를 수행 할 수 있습니다. 내 상상으로는 다음과 같습니다.

nd = NormalDistribution(mu=100, std=12)
p = nd.prob(98)

Perl에도 비슷한 질문이 있습니다. Perl 의 정규 분포가 주어진 지점에서 확률을 어떻게 계산할 수 있습니까? . 하지만 파이썬에서는 보지 못했습니다.

Numpyrandom.normal기능을하지만, 내가 원하는 정확히 무엇을, 샘플링 같다.



답변

하나 있습니다 scipy.stats에 있습니다 .

>>> import scipy.stats
>>> scipy.stats.norm(0, 1)
<scipy.stats.distributions.rv_frozen object at 0x928352c>
>>> scipy.stats.norm(0, 1).pdf(0)
0.3989422804014327
>>> scipy.stats.norm(0, 1).cdf(0)
0.5
>>> scipy.stats.norm(100, 12)
<scipy.stats.distributions.rv_frozen object at 0x928352c>
>>> scipy.stats.norm(100, 12).pdf(98)
0.032786643008494994
>>> scipy.stats.norm(100, 12).cdf(98)
0.43381616738909634
>>> scipy.stats.norm(100, 12).cdf(100)
0.5

[주의해야 할 한 가지-단지 팁-매개 변수 전달이 약간 광범위하다는 것입니다. 코드가 설정되는 방식 때문에 또는 scipy.stats.norm(mean=100, std=12)대신 실수로 작성 하면이를 수락하지만 추가 키워드 인수를 자동으로 삭제하고 기본값 (0,1)을 제공합니다.]scipy.stats.norm(100, 12)scipy.stats.norm(loc=100, scale=12)


답변

Scipy.stats는 훌륭한 모듈입니다. 다른 접근 방식을 제공하기 위해 다음을 사용하여 직접 계산할 수 있습니다.

import math
def normpdf(x, mean, sd):
    var = float(sd)**2
    denom = (2*math.pi*var)**.5
    num = math.exp(-(float(x)-float(mean))**2/(2*var))
    return num/denom

이것은 여기에있는 공식을 사용합니다 : http://en.wikipedia.org/wiki/Normal_distribution#Probability_density_function

테스트하려면 :

>>> normpdf(7,5,5)
0.07365402806066466
>>> norm(5,5).pdf(7)
0.073654028060664664

답변

여기에 더 많은 정보가 있습니다. 먼저 고정 분포를 처리합니다 (이 경우 고정은 매개 변수가 특정 값으로 설정됨을 의미 함). 고정 배포를 생성하려면

import scipy.stats
scipy.stats.norm(loc=100, scale=12)
#where loc is the mean and scale is the std dev
#if you wish to pull out a random number from your distribution
scipy.stats.norm.rvs(loc=100, scale=12)

#To find the probability that the variable has a value LESS than or equal
#let's say 113, you'd use CDF cumulative Density Function
scipy.stats.norm.cdf(113,100,12)
Output: 0.86066975255037792
#or 86.07% probability

#To find the probability that the variable has a value GREATER than or
#equal to let's say 125, you'd use SF Survival Function 
scipy.stats.norm.sf(125,100,12)
Output: 0.018610425189886332
#or 1.86%

#To find the variate for which the probability is given, let's say the 
#value which needed to provide a 98% probability, you'd use the 
#PPF Percent Point Function
scipy.stats.norm.ppf(.98,100,12)
Output: 124.64498692758187

답변

시작 Python 3.8하면 표준 라이브러리가 NormalDist객체를statistics 모듈의 .

주어진 평균 ( ) 및 표준 편차 ( )에 대해 확률 밀도 함수 ( pdf-무작위 샘플 X가 주어진 값 x에 근접 할 가능성) 를 얻는 데 사용할 수 있습니다 .musigma

from statistics import NormalDist

NormalDist(mu=100, sigma=12).pdf(98)
# 0.032786643008494994

또한 NormalDist객체는 누적 분포 함수 ( cdf-임의 표본 X가 x보다 작거나 같을 확률) 도 제공합니다 .

NormalDist(mu=100, sigma=12).cdf(98)
# 0.43381616738909634

답변

x 평균 = 1의 두 값 사이의 영역을 찾고 싶다면; 표준 편차 = 2; [0.5,2] 사이의 x 확률

import scipy.stats
scipy.stats.norm(1, 2).cdf(2) - scipy.stats.norm(1,2).cdf(0.5)

답변

답변에 언급 된 위키피디아에서 인용 한 공식은 정상적인 확률을 계산하는 데 사용할 수 없습니다. 확률을 계산하려면 해당 공식을 사용하여 수치 적분 근사 함수를 작성해야합니다.

이 공식은 확률 밀도 함수의 값을 계산합니다. 정규 분포는 연속적이므로 확률을 얻으려면 적분을 계산해야합니다. 위키피디아 사이트는 CDF를 언급하는데, 이것은 정규 분포를위한 폐쇄 형이 아닙니다.


답변

나는 당신을 위해 수학을하기 위해이 프로그램을 썼습니다. 요약 통계를 입력하기 만하면됩니다. 어레이를 제공 할 필요가 없습니다.

모집단 비율에 대한 일 표본 Z- 검정 :

비율이 아닌 평균에 대해 이렇게하려면 z에 대한 공식을 적절하게 변경하십시오.

편집 :
링크의 내용은 다음과 같습니다.

import scipy.stats as stats
import math

def one_sample_ztest_pop_proportion(tail, p, pbar, n, alpha):
    #Calculate test stat

    sigma = math.sqrt((p*(1-p))/(n))
    z = round((pbar - p) / sigma, 2)

    if tail == 'lower':
        pval = round(stats.norm(p, sigma).cdf(pbar),4)
        print("Results for a lower tailed z-test: ")


    elif tail == 'upper':
        pval = round(1 - stats.norm(p, sigma).cdf(pbar),4)
        print("Results for an upper tailed z-test: ")


    elif tail == 'two':
        pval = round(stats.norm(p, sigma).cdf(pbar)*2,4)
        print("Results for a two tailed z-test: ")


    #Print test results
    print("Test statistic = {}".format(z))
    print("P-value = {}".format(pval))
    print("Confidence = {}".format(alpha))

    #Compare p-value to confidence level
    if pval <= alpha:
        print("{} <=  {}. Reject the null hypothesis.".format(pval, alpha))
    else:
        print("{} > {}. Do not reject the null hypothesis.".format(pval, alpha))


#one_sample_ztest_pop_proportion('upper', .20, .25, 400, .05)

#one_sample_ztest_pop_proportion('two', .64, .52, 100, .05)