기본 콘텐츠로 건너뛰기

라벨이 sympy인 게시물 표시

통계관련 함수와 메서드 사전

A B C d E F G H I K L M N O P Q R S T U V W Z A statsmodels.ap.stats.anova_lm(x) statsmodels.formula.api.ols 에 의해 생성되는 모형 즉, 클래스 인스턴스(x)를 인수로 받아 anova를 실행합니다. np.argsort(x, axis=-1, kind=None) 객체 x를 정렬할 경우 각 값에 대응하는 인덱스를 반환합니다. Axis는 기준 축을 지정하기 위한 매개변수로서 정렬의 방향을 조정할 수 있음(-1은 기본값으로 마지막 축) pandas.Series.autocorr(lag=1) lag에 전달한 지연수에 따른 값들 사이의 자기상관을 계산 B scipy.stats.bernoulli(x, p) 베르누이분포에 관련된 통계량을 계산하기 위한 클래스를 생성합니다. x: 랜덤변수 p: 단일 시행에서의 확률 scipy.stats.binom(x, n, p) 이항분포에 관련된 통계량을 계산하기 위한 클래스를 생성합니다. x: 랜덤변수 n: 총 시행횟수 p: 단일 시행에서의 확률 C scipy.stats.chi2.pdf(x, df, loc=0, scale=1) 카이제곱분포의 확률밀도함수를 계산 $$f(x, k) =\frac{1}{2^{\frac{k}{2}−1}Γ(\frac{k}{2})}x^{k−1}\exp\left(−\frac{x^2}{2}\right)$$ x: 확률변수 df: 자유도 pd.concat(objs, axis=0, join=’outer’, …) 두 개이상의 객체를 결합한 새로운 객체를 반환. objs: Series, DataFrame 객체. Axis=0은 행단위 즉, 열 방향으로 결합, Axis=1은 열단위 즉, 행 방향으

sympy 식과 연산

내용 symbols 등호 기호 ^, &, 그리고 / 기본 연산 대체(substitution) 문자열을 sympy 식으로 전환 evalf, N lambdify sympy operation symbols sympy에서 문자를 심벌로 사용하기 위해서는 사용전에 반드시 정의되어야 합니다. 심벌을 정의하기 위해 symbols() 를 사용하는데 여러개의 심벌들을 동시에 정의할 수 있습니다. from sympy import * x=symbols('x') x+1 x + 1 y, z=symbols('y z') type(y) sympy.core.symbol.Symbol 심벌은 문자열로 지정이 가능합니다. crazy =symbols('unrelated') crazy+1 unrelated + 1 symbols() 함수에 의해 정의한 일반 객체의 이름으로 사용된 문자와는 구분됩니다. 다음 코드에서 symbol로 정의된 x 즉, sympy 식에 사용된 심벌 x와 2가 할당된 객체 이름의 x와는 구분됨을 나타내고 있습니다. x= symbols('x') #심벌로 x expr=x+1 expr x + 1 x=2 #객체이름으로 x x + 3 5 sympy에서 생성한 식의 심벌에 특정한 수를 대입하기 위해서는 .subs() 메소드를 적용합니다. x=symbols('x') expr=x+1 expr x + 1 expr.subs(x, 4) 5 등호 기호 python에서 ' = '는 이 기호를 기준으로 오른쪽의 값을 왼쪽으로 할당함을 의미합니다. sympy 역시 동일한 의미로 작동됩니다. ' 같다 '의 의미로는 ‘ == ’를 사용하고 bool형 즉, True, False의 결과를 반환합니다. x=symbols('x') expr = x+1 expr==3 False expr1=expr.sub

적분의 일반 규칙과 부정적분(Indefinite Integral)

내용 적분의 일반 규칙 함수들의 합에 대한 적분 함수의 상수항 특별한 함수의 적분 특별한 함수의 적분공식 삼각함수의 적분 편적분 적분 규칙 적분의 일반 규칙 함수 y에 대한 미분은 $\displaystyle \frac{dy}{dx}$를 계산하는 것입니다. 많은 수학적 계산과 같이 미분 과정 역시 역산될 수 있습니다. 예를 들어 $\displaystyle y = x^4$의 미분은 $\displaystyle \frac{dy}{dx} = 4x^3$이 되며 그 과정을 반대로 실행하면 원 함수인 $\displaystyle y = x^4$이 되어야 합니다. 그러나 미분계수가 $\displaystyle 4x^3$이 되는 함수는 위에서 언급한 함수 외에 $\displaystyle x^4 + C$와 같이 상수를 첨가된 다양한 함수의 미분 결과일 수 있습니다. 상수는 미분의 결과에 영향을 주지 않기 때문입니다. 이러한 점을 적분에 고려하여 미분의 역과정인 적분 결과에 상수 C를 더해 줍니다. $$\begin{align} \frac{dy}{dx}&=x^{n-1}\\ \int nx^{n-1}\; dx&= x^n+C\\ & C: 상수 \end{align}$$ 식 1과 같이 위의 관계에서 독립변수 x의 거듭제곱에 대한 미분과 적분의 일정한 관계가 성립됩니다. 적분일반규칙 $$\begin{align}\tag{1} \frac{dy}{dx}&=x^{n}\\ \int nx^{n}\; dx&= \frac{1}{n+1}x^{n+1}+C\\ & C: 상수,\; n \neq -1 \end{align}$$ 적분 계산은 sympy의 integrate() 함수를 적용합니다. 이 함수의 결과에는 상수가 고려되지 않습니다. 그러나 적분 결과로 대상인 함수에서의 상수의 존재 여부를 결정할 수 없기 때문에 상수가 존재한다고 간주해야 합니다. 그러므로 intergrate()함수에 의한 계

편미분(Partial differential)

내용 편미분 결합함수의 편미분 편미분에 의한 극대와 극소 편미분 편미분 다음과 같이 하나 이상의 독립변수가 존재하는 경우의 종속변수는 모든 독립변수들 각각에 영향을 받습니다. 이러한 함수에서 종속변수의 변화는 각 독립변수의 변화에 대한 합으로 나타냅니다. 두 변수에 의한 함수의 경우 식 1과 같이 표현합니다. $$\begin{equation}\tag{1}y = f(u, v) \end{equation}$$ 식 1과 같이 두 독립변수로 구성된 함수의 미분은 각 독립변수에 대한 종속변수의 미분(변화율)으로 구성되며 이러한 미분을 편미분(partial differentiation) 이라 합니다. 편미분은 특정한 독립변수에 대해 실행할 경우 다른 독립변수를 상수로 간주하는 방식으로 이루어집니다. 그러므로 식1의 미분은 식 2와 같습니다. $$\begin{align}\tag{2} dy_v = v \cdot du\\ dy_u = u \cdot dv \end{align}$$ 식 2의 각 결과에서 아래첨자는 그 시행에서 상수로 간주되는 변수를 의미합니다. 이러한 편미분은 식 3과 같이 그리스 문자 $\partial$를 사용하여 다음과 같이 나타냅니다. $$\begin{align}\tag{3} \frac{\partial y}{\partial u}=v& \rightarrow dy_v = \frac{\partial y}{\partial u} \cdot du\\ \frac{\partial y}{\partial v}=u& \rightarrow dy_u = \frac{\partial y}{\partial v} \cdot dv \end{align}$$ 함수 y의 전체적인 미분은 각 편미분의 합으로 나타냅니다.(식 4) $$\begin{align}\tag{4} dy &= \frac{\partial y}{\partial u}du + \frac{\partial y}{\partial v} dv\\ &a

감마분포(Gamma Distribution)

내용 감마함수 감마함수 감마분포 평균과 분산 감마분포(Gamma Distribution) 확률은 전체 경우의 수 중에서 대상 경우의 비율이므로 확률을 계산하는데 있어 전체 경우의 수를 산정하는 것이 중요합니다. 이산변수의 경우 전체 경우의 수를 계승(factorial) 을 사용하여 계산합니다. 연속변수의 경우에서 랜덤변수는 셀수 있는 수가 아니므로 계승을 직접적으로 사용할 수 없습니다. 대신에 계승에 대응하는 적분식을 사용하는데 이 부분을 감마함수 로 대체할 수 있습니다. 그러므로 감마함수를 기본으로 하는 감마분포는 지수 분포, 정규분포와 관련된 분포로 다양한 부문에서 사용되는 분포입니다. 감마함수 감마함수는 Γ(x)로 나타내며 자연수의 영역에서 factorial 함수의 형태를 가지며 식 1과 같이 정의됩니다. 감마함수 $$\begin{align}\tag{1} \Gamma(n)&=(n-1)! , \quad\quad n \in \{1,2,3, \cdots \}\\ &=(n-1)\Gamma(n-1)\\ &=\int^n_0 x^{n-1}e^{-x} ,\quad n > 0 \end{align}$$ 예)   n=10인 이산변수와 연속변수의 factorial과 감마함수를 계산합니다. factorial은 numpy 또는 scipy의 math 모듈의 factorial() 함수로 계산할 수 있으며 위의 감마함수는 scipy.special의 gamma() 함수로 계산할 수 있습니다. 또한 이 계산은 sympy 패키지의 symbol() 함수와 intergrate() 함수를 사용하여 수행할 수 있습니다. import numpy as np import pandas as pd import matplotlib.pyplot as plt from scipy import stats from sympy import * np.math.factorial(10-1) 362880 from scipy

지수분포(Exponential Distribution)

내용 지수분포의 PDF 평균과 분산 지수분포와 기하분포 지수분포(Exponential Distribution) 지수분포의 PDF 지수분포는 가장 많이 사용되는 연속분포 중의 하나로 어떤 사건들 사이에 시간의 경과를 모형화 하는데 많이 사용됩니다. 식 1과 같은 확률밀도함수(PDF)를 가지는 연속확률변수 X의 분포를 지수분포라고 하며 모수 λ는 평균빈도를 의미합니다. $$\begin{align}\tag{1} &X \sim \text{Exponential}(\lambda)\\ &f(x)=\begin{cases} \lambda e^{-\lambda x}&\quad x>0\\ 0 & \quad \text{otherwise} \end{cases}\\ & \quad \lambda >0 \end{align}$$ 지수분포의 누적분포함수는 확률밀도함수의 적분에 의해 계산됩니다. sympy.integrate() 함수를 사용합니다. import numpy as np import pandas as pd import matplotlib.pyplot as plt from scipy import stats from sympy import * x, l=symbols("x lambda", positive=True) f=l*exp(-l*x) f $\quad \small \color{navy}{\lambda e^{- \lambda x}}$ F=integrate(f, (x, 0, x)) F $\quad \small \color{navy} {1 - e^{- \lambda x}}$ 평균과 분산 지수분포의 평균과 분산은 각각의 정의에 따라 식 2와 같이 정의됩니다. $$\begin{align}\tag{2} &\begin{aligned}E(x)&=\mu\\&=\int^\infty_0 xf(x)\, dx\\&=\int^\infty_0 x\lambda e^{-\

삼각함수의 미분

내용 sin, cos, tan의 미분 2차미분과 역함수 미분 삼각함수의 2차미분 sin, cos, tan 함수의 미분규칙 역함수의 미분 역삼각함수의 미분규칙 삼각함수(trigonometric functions)의 미분 sin, cos, tan의 미분 일반적으로 각을 표시하기 위해 그리스 문자 θ으로 사용합니다. 다음 함수를 고려해 봅니다. y = sin(θ) 이 함수에서 조사할 것은 그 함수의 변화량 (미분 계수) $\frac{d(\sin(\theta))}{d\theta}$ 입니다. 즉, 각도 θ와 sin(θ)의 변화 사이의 관계를 찾는 것입니다. 특히 증가가 무한히 작을 경우가 주된 관심 사항입니다. 이러한 관계를 그림 1에 나타내었습니다. import numpy as np import pandas as pd from sympy import * import matplotlib.pyplot as plt plt.figure(figsize=(5, 5)) a=plt.axes(xlim=(-1.5, 2.5), ylim=(-1.5, 2.5)) r=plt.Circle((0, 0), 1, facecolor="none", edgecolor="navy", linewidth=2, label="radius=r") a.add_patch(r) plt.arrow(0, 0, 0.8, np.sqrt(1-(-0.8)**2), color="green", label=r"$\mathbf{degree=\theta}}$") plt.arrow(0, 0, 0.7, np.sqrt(1-(-0.7)**2), color="red", label=r"$\mathbf{degree=\theta+\Delta\theta}}$") plt.hlines(0, -1.5, 1.5, color="black") plt.vlines(0, -1.5, 1.5, co

균등분포(Uniform Distribution)

내용 균등분포 평균과 분산 균등분포(Uniform Distribution) 균등분포 확률 변수 X의 확률밀도 함수가 식 1과 같이 범위 [a, b]에서 일정한 경우 이 변수는 균등분포를 따른다고 합니다. $$\begin{equation}f(x)=\begin{cases}\frac{1}{b-a}& \quad a \lt x \lt b\\ 0&\quad \text{otherwise} \end{cases}\end{equation}$$ 균등 분포는 다음과 같이 나타냅니다. X ∼ Uniform(a, b) 예 1)   변수 X가 [0,10]의 범위에서 균등 분포를 이룬다면 다음 확률을 계산해 봅니다. $$\begin{align}&f(x)=\frac{1}{10-0}\\&F(x)=\int^b_a \frac{1}{10-0} \, dx \quad 0 \le a \lt b \le 10 \end{align}$$ import numpy as np import pandas as pd import matplotlib.pyplot as plt from scipy import stats from sympy import * a, b, x=symbols("a b x") f=Rational(1, 10) f $\quad \small \color{navy}{\frac{1}{10}}$ 1) 2 < X < 9 ? F1=f.integrate((x, 2, 9)) F1 $\quad \small \color{navy}{\frac{7}{10}}$ 2) 1 < x < 4 ? F1=f.integrate((x, 1, 4)) F1 $\quad \small \color{navy}{\frac{3}{10}}$ 3) x > 6 ? F1=f.integrate((x, 6, 10)) F1 $\quad \small \color{navy}{\frac{2}{5}}$ 예 2)   버스가 7시에 출발하여 특정 정

연속변수와 확률밀도함수

내용 연속 확률밀도함수(Probability Density Function, PDF) 연속확률밀도함수 연속확률분포(Continuous Probability Distribution) 일정구간 [a, b]에서 무작위로 하나의 수를 선택하는 확률이 동일하다면 그 수는 랜덤변수 이 되며 그 구간의 수들은 무한하므로 하나의 점을 특정할 수 없습니다. 즉, 연속변수에서 특정한 점에서의 확률은 정의할 수 없습니다 . 대신에 동일한 확률을 가진 구간이 그룹화되면 그룹을 선택할 확률은 전체 구간의 길이에 대해 그 선택된 부분의 길이로 정의할 수 있습니다. 이 관계는 식 1과 같이 나타낼 수 있습니다. $$\begin{align} \tag{1}&P(X \in [a, b])=1\\ &\begin{aligned}P(X \in [x_1, x_2])& \varpropto (x_2-x_1)\\&= \frac{x_2-x_1}{b-a}\\ a\le x_1 \le x_2\le b \end{aligned} \end{align}$$ 위 식을 기반으로 확률변수 X에 대한 누적분포함수(CDF)는 식 2와 같이 작성됩니다. $$\begin{equation}\tag{2} F(X)=\begin{cases} 0 & \quad \text{for}\; x\le a\\ \frac{x-a}{b-a} & \quad \text{for}\; a \le x\le b\\ 1 & \quad \text{for}\; x\ge b \end{cases} \end{equation}$$ 사실 연속변수의 경우 한 지점에서의 확률은 정의할 수 없으므로 기호 ‘≤’ 와 ‘<’의 차이 역시 정의 할 수 없습니다. 연속 F(x)가 모든 x에서 연속함수라면 그 누적분포함수 F(x)를 가진 확률변수 X는 연속이라고 할 수 있습니다. F(x)=P(X ≤ x) 다시말하면 누적분포함수인 F(x)는 모든 범위에서 미분가능

이산확률분포: 확률질량함수와 누적분포함수

내용 확률질량함수(PMF) 누적분포함수(Cumulative Distribution Function, CDF) 이산확률분포 확률분포는 샘플공간의 각 지점 또는 각 구간의 확률을 기준으로 작성됩니다. 이러한 확률은 함수로 작성될 수 있으며 그 확률의 대상이 되는 사건(확률변수)이 이산변수일 경우 확률질량함수(Probability Mass Function, PMF) , 연속변수일 경우 확률밀도함수(Probability Density Function, PDF) 이라고 합니다. 두 경우 모두 일정한 변수구간에서의 각 확률의 합은 확률누적분포 함수(Cumulative Distribution Function, CDF) 라고 합니다. 이 함수의 결과와 확률변수 값에 대해 시각적으로 나타낸 것을 확률분포 라고 합니다. 확률분포는 각 확률변수와 함수의 값을 대응시킨 것으로 시각적으로 나타낼 수 있습니다. 이러한 분포의 형태는 특정한 함수로 구현되는 분포들을 따르는 경향을 보입니다. 그러므로 데이터들의 분석에서 적합한 확률분포를 가정하여 여러 통계 방법들을 적용할 수 있습니다. 이러한 점 때문에 분포의 특성들을 이해하는 것은 데이터들에 대한 통계분석의 기반을 제공한다고 할 수 있습니다. 확률질량함수(PMF), 누적분포함수(CDF)를 정리하는 것이 분포를 이해하는데 큰 도움이 됩니다. 확률밀도함수(PDF)는 연속변수를 소개할 때 다시 정리합니다. 확률질량함수(PMF) 확률변수 X의 범위 $R_x$가 셀수 있는 집합이라면 그 집합 즉 샘플공간(sample space, S)을 다음과 같이 나타낼 수 있습니다. S={x 1 , x 2 , x 3 , …} 확률변수는 변수에 값을 대응시키는 함수 이기도 합니다. 즉, S의 등은 각 확률변수에 대응하는 사건들 입니다. 각 사건에 대응하는 확률을 산출할 수 있는 함수가 확률질량함수가 됩니다. 관심의 대상이 되는 사건(event) A는 다음과 같이 나타냅니다. $$\text{A}=\{\text{s} \in

지수와 로그 함수의 미분

내용 지수와 로그 함수의 미분 로그 곡선(Logarithmic Curve) 지수와 로그 함수의 미분 지수와 로그가 포함된 함수들을 미분합니다. 다음은 로그 함수입니다. $$\begin{equation} y = \log_ex \; \text{또는} \; \log(x) \end{equation}$$ 위 함수 y의 역함수는 지수함수가 됩니다. 지수 급수의 미분은 원래 형태와 같으므로 식 1과 같이 나타낼 수 있습니다. $$\begin{align}\tag{1} y &=\log_ex \rightarrow e^y=x\\ e^y &=\frac{dx}{dy}\\ \frac{dy}{dx}&=\frac{1}{\frac{dx}{dy}}\\ &=\frac{1}{e^y}\\ &=\frac{1}{x} \end{align}$$ 결과적으로 로그함수의 미분은 식 2와 같이 나타낼 수 있습니다. $$\begin{equation}\tag{2} \frac{d(\log_e x)}{dx}=\frac{dy}{dx}=x^{-1} \end{equation}$$ import numpy as np import pandas as pd from sympy import * import matplotlib.pyplot as plt 예 1)  $\displaystyle y=\log(x+a)$를 미분합니다. $$\begin{align} x+a&=e^y\\ \frac{d(x+a)}{dy}&=e^y \rightarrow \frac{dx}{dy}=e^y\\ \frac{dy}{dx}&=\frac{1}{e^y}\\ &=\frac{1}{x+a} \end{align}$$ a, x=symbols('a, x') y=log(x+a) diff(y, x) $\quad \small \color{blue}{\frac{1}{a + x}}$ 예 2)  $y = \log_{10}x$를 미분

지수와 로그함수

내용 지수함수(Exponential Function) 단순이자(simple interest) 복리 이자(compound interest) 오일러 수(Euler number) 지수 급수(Exponential series) 자연로그(Natural Logarithms) 지수와 로그함수 지수함수(Exponential Function) 주어진 시간 동안 항상 자신의 크기에 비례하는 방식으로 증가하는 양을 생각해 봅시다. 이러한 증가는 일정한 금리로 돈에 대한 이자를 계산하는 과정으로 설명할 수 있습니다. 자본이 클수록 주어진 시간에 대한 이자의 증가액은 커집니다. 이러한 이자는 단순이자 와 복리 이자 로 구분됩니다. 전자의 경우 자본은 고정된 상태로 유지되고 후자의 경우 이자가 자본에 추가되므로 원금에 대한 증가율 역시 증가됩니다. import numpy as np import pandas as pd from sympy import * import matplotlib.pyplot as plt 단순이자(simple interest) 원금이 1000원이고 연 이자율을 10%로 가정합니다. 이 경우 증분은 매년 100원이 됩니다. 다음 10년 동안 계속하면 그 시간이 끝날 때까지 총액이 2000원으로 원금의 두 배가 될 것입니다. 연 이자율이 5% 였다면 재산을 두 배로 늘리려면 20년, 연이율이 2%라면 50년이 소요될 것입니다. 연간 이자가 r 이면 재산을 두 배로 늘리기 위한 기간은 식 1에 의해 결정할 수 있습니다.(등차수열) $$\begin{align}\tag{1} y &= y_0(1 + Nr)\\ y_0&: 원금\\ r&: 연 이자율\\ N&: 보유기간(년) \end{align}$$ 복리 이자(compound interest) 원금 1000원과 10%의 연 이자율을 가정합니다. 매년 이자를 원금에 합산한다고 하면 1년후 원금은 1100원이 2년 후에