기본 콘텐츠로 건너뛰기

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

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은 열단위 즉, 행 방향으

R 다항식과 다중 선형회귀

내용

회귀모형의 일반적인 사항과 단순회귀모형의 내용이 선행되어야 합니다.

다항식 회귀

독립변수의 차수를 증가시켜 회귀모델을 생성할 수 있습니다.

dataset "women" 30~39세의 여성 15명의 신장과 체중에 대한 자료입니다. 이 자료에서 신장을 설명변수로 하여 체중을 예측합니다.

head(women, 3)
  height weight
1     58    115
2     59    117
3     60    120
 fit2 <- lm(weight ~ height + I(height^2), data=women)

위 식은 모델 fit에 height의 제곱 항(I(height^2))을 추가한 것입니다. I() 함수는 괄호 안의 수식을 변형없이 실행합니다.

summary(fit2)
Call:
lm(formula = weight ~ height + I(height^2), data = women)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.50941 -0.29611 -0.00941  0.28615  0.59706 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 261.87818   25.19677  10.393 2.36e-07 ***
height       -7.34832    0.77769  -9.449 6.58e-07 ***
I(height^2)   0.08306    0.00598  13.891 9.32e-09 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.3841 on 12 degrees of freedom
Multiple R-squared:  0.9995,	Adjusted R-squared:  0.9994 
F-statistic: 1.139e+04 on 2 and 12 DF,  p-value: < 2.2e-16

위 결과와 같이 생성된 모델은 다음과 같습니다.

Weightpred = 261.88 - 7.35Height + 0.083Height2

두 계수의 유의확률이 모두 0.0001보다 작은 수준이므로 "reg.coeff.=0"이라는귀무가설을 기각 할 수 있습니다. 또한 결정계수는 99.9%로 위의 단순 회귀보다 증가되었음을 알 수 있습니다. 이 결과는 다음 그림으로 나타낼 수 있습니다.

library(latex2exp)
plot(women$height,women$weight, xlab="Height", ylab="Weight")
lines(women$height, fitted(fit2))
text(60, 160,TeX("$w(h)=b_0+h+h^2$"))

latex2exp에서 분수는 TeX("$//frac{}{}$")과 같이 '/'가 아닌 '//'가 필요.

선형

  • f(x+y)=f(x)+f(y)
  • f(αx)=αf(x)

위 다항 모형은 위의 두 조건을 만족하므로 곡선의 형태를 보이지만 선형모형입니다.

비선형은 다음과 같은 형태를 가집니다.

$$Y_i=\hat{\beta}_0+\hat{\beta}_1e^{\frac{x}{\beta_2}}$$

이러한 형태의 비선형 모델은 nls()함수를 사용하여 작성합니다.

3차항을 가진 다항모형을 작성해봅니다. 이 이상의 차수를 가진 선형모형의 사용은 일반적이지 않습니다.

fit3<-lm(weight~height+I(height^2)+I(height^3), data=women)
summary(fit3)
Call:
lm(formula = weight ~ height + I(height^2) + I(height^3), data = women)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.40677 -0.17391  0.03091  0.12051  0.42191 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)   
(Intercept) -8.967e+02  2.946e+02  -3.044  0.01116 * 
height       4.641e+01  1.366e+01   3.399  0.00594 **
I(height^2) -7.462e-01  2.105e-01  -3.544  0.00460 **
I(height^3)  4.253e-03  1.079e-03   3.940  0.00231 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.2583 on 11 degrees of freedom
Multiple R-squared:  0.9998,	Adjusted R-squared:  0.9997 
F-statistic: 1.679e+04 on 3 and 11 DF,  p-value: < 2.2e-16

위 결과 역시 모든 계수들이 적합한 것으로 간주할 수 있으며 결정계수와 F 검정 결과 역시 이 모델이 적합함을 나타내고 있습니다. 다음 그림은 이 모델에 의한 결과를 시각화합니다.

plot(women$height, women$weight, xlab="h", ylab="w")
lines(women$height, fitted(fit3))
text(60, 160, TeX("$w(h)=b_0+h+h^2+h^3$"))

car 패키지scatterplot(formula, data, ...)함수는 이변량의 관계를 나타내는 그래프를 작성하는데 간단하고 편리한 방법을 제공합니다. 이 함수의 인수들 중에 박스플롯을 작성하는 boxplot, 선형회귀선의 regLine, Loess를 제공하는 smooth의 기본값은 TRUE 입니다. loess는 국소회귀를 나타내는 것으로 근접한 데이터들에서만 선형을 이루기 때문에 전체적으로 smooth한 곡선의 형태로 나타납니다.

library(car)
scatterplot(weight~height, data=women, xlab='h', ylab='w')

다중 선형회귀(Multiple linear regression)

예측 변수가 두 개 이상인 경우 단순 선형 회귀가 다중 선형 회귀가 되고 분석이 더 복잡해집니다. 기술적으로 다항식 회귀는 다중 회귀의 특수한 경우입니다. 2차 회귀에는 2개의 예측 변수(X 및 X2 )가 있고 3차 회귀에는 3개의 예측 변수(X, X2 및 X3 )가 있습니다.

state.x77 데이터 세트의 일부 변수들을 사용하여 다중회귀 모델을 구현합니다. 이 데이터 세트는 행렬 형태이므로 lm() 함수에 적용하기 위해서는 데이터 프레임으로 전환이 필요합니다.

class(state.x77)
[1] "matrix" "array"
state<-as.data.frame(state.x77[,c('Murder', 'Population', 'Illiteracy', 'Income', 'Frost')])
class(state)
[1] "data.frame"

각 변수간의 상관성은 회귀모델 구축에 유익한 정보를 제공합니다. 이 결과를 시각적으로 나타내기 위해 car 패키지scatterplotMatrix()를 사용합니다.

round(cor(state),2)
           Murder Population Illiteracy Income Frost
Murder         1.00       0.34       0.70  -0.23 -0.54
Population     0.34       1.00       0.11   0.21 -0.33
Illiteracy         0.70       0.11       1.00  -0.44 -0.67
Income         -0.23       0.21      -0.44   1.00  0.23
Frost             -0.54      -0.33      -0.67   0.23  1.00
library(car)
scatterplotMatrix(state)

scatterplotMatrix() 함수는 주대각 외의 그래프에서 다른 변수들 간의 산점도와 국소회귀(loess)선과 선형회귀선을 나타냅니다. 대각선에 위치하는 그래프는 각 변수에 대한 밀도 및 러그 플롯이 포함됩니다. 살인율이 이중 모드(bimodal)일 수 있고 각각의 예측 변수가 어느 정도 편향되어 있음을 알 수 있습니다. Murder은 Population과 Illiteracy과 함께 증가하고 Income이 높아지고 Frost가 내리면 감소합니다. 동시에 추운 주일수록 Illeratcy가 낮고 Population이 많으며 Income이 높습니다.

다음으로 lm()함수를 적용하여 회귀모형을 구축합니다.

fit<-lm(Murder~Population+Illiteracy+Income+Frost, data=state)
summary(fit)
Call:
lm(formula = Murder ~ Population + Illiteracy + Income + Frost, 
    data = state)

Residuals:
    Min      1Q  Median      3Q     Max 
-4.7960 -1.6495 -0.0811  1.4815  7.6210 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 1.235e+00  3.866e+00   0.319   0.7510    
Population  2.237e-04  9.052e-05   2.471   0.0173 *  
Illiteracy  4.143e+00  8.744e-01   4.738 2.19e-05 ***
Income      6.442e-05  6.837e-04   0.094   0.9253    
Frost       5.813e-04  1.005e-02   0.058   0.9541    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.535 on 45 degrees of freedom
Multiple R-squared:  0.567,	Adjusted R-squared:  0.5285 
F-statistic: 14.73 on 4 and 45 DF,  p-value: 9.133e-08

위 결과에서 각 회귀계수에 t-검정은 다른 변수들을 제어한 상태에서 이루어지는 것입니다. 예를들어 위의 Iliteracy의 경우 다른 변수들을 제어한 상태에서 결과이며 다른 변수의 영향이 일정하다고 가정할 경우 1% 증가에 Murder는 4.14% 증가함을 나타내는 것입니다. 이 계수에 대한 유의확률은 매우 낮은 상태로 이 계수가 0이라는 귀무가설을 기각할 수 있습니다. 그러나 다른 변수에 대한 계수는 귀무가설을 기각할 수준이 아니므로 이 모델에서 영향을 주지 못합니다. 그러나 F-검정의 결과는 여러 독립변수들에 의해 Murder를 설명하는 다중 모델이 통계적으로 유의하며 그 설명력은 약 57%정도 임을 나타냅니다.

교호작용을 가진 다중선형회귀

선형모형에 변수들 간의 상호작용에 대한 항목을 첨가할 수 있습니다. mtcars 데이터 셋에 mpg에 대한 wt와 hp의 회귀모형을 구축합니다. 이 모형에는 두 예측변수의 상호작용항을 첨가시킵니다.

fit_cars<-lm(mpg~hp+wt+hp:wt, data=mtcars)
summary(fit_cars)
Call:
lm(formula = mpg ~ hp + wt + hp:wt, data = mtcars)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.0632 -1.6491 -0.7362  1.4211  4.5513 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 49.80842    3.60516  13.816 5.01e-14 ***
hp          -0.12010    0.02470  -4.863 4.04e-05 ***
wt          -8.21662    1.26971  -6.471 5.20e-07 ***
hp:wt        0.02785    0.00742   3.753 0.000811 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.153 on 28 degrees of freedom
Multiple R-squared:  0.8848,	Adjusted R-squared:  0.8724 
F-statistic: 71.66 on 3 and 28 DF,  p-value: 2.981e-13

위 결과에 의하면 hp와 wt사이의 교호작용 역시 유의한 효과를 나타냅니다. 이것은 hp-mpg의 관계가 wt의 수준에 의존됨을 나타냅니다. 다른 예측변수에도 같습니다. 이러한 관계는 effects 패키지effect() 함수로 시각화 할 수 있습니다.

effect(term, mod, vcov.=vcov, xlevels, ...)
term: 교호작용의 항
mod: 모델
vcov.: 모델의 변수들에 대한 공분산행렬
xlevels: x, y축에 대해 영향을 주는 3의 변수에 대한 레벨로서 list형식
plot(effect("hp:wt", fit, vcov.=vcov(fit_cars),
              list(wt=c(2.5, 4, 5.2))),multiline=TRUE)

이 그래프에서 wt의 가 증가함에 따라 hp, mpg가 감소하는 것을 나타냅니다. 다른 경우에 비해 wt=4의 경우는 hp의 증가에 효과가 매우 작습니다.

추정치의 시각화

jtools 패키지effect_plot()함수를 사용하여 각각의 예측변수와 추정치에 대해 신뢰구간, 관측치와의 관계 등을 시각적으로 나타낼 수 있습니다.

위 모형 fit의 추정치과 예측변수 Illteracy에 대해 작성해보면 다음과 같습니다.

effect_plot(fit, pred=Illiteracy)

위 그래프에 예측변수의 각 값에 대응하는 추정치의 신뢰구간을 작성합니다.

effect_plot(fit, pred=Illiteracy, interval=TRUE)

위 그림에 대해 한 축에 대한 데이터의 밀집도를 나타내는 러그플롯을 추정치에 대해 생성합니다.

effect_plot(fit, pred=Illiteracy, interval=TRUE, rug=TRUE)

모형이 관찰치와 관계된 정도를 나타내기 위해 예측변수의 관찰치를 산점도로 나타냅니다.

effect_plot(fit, pred=Illiteracy, interval=TRUE, plot.points=TRUE)

댓글

이 블로그의 인기 게시물

matplotlib의 그래프 종류

1. 산포도(scatter plot) plt.scatter(x, y) >>> import matplotlib.pyplot as plt >>> import numpy as np >>> data=np.random.rand(1024, 2) >>> data[:3, :] >>> plt.scatter(data[:,0], data[:,1]) >>> plt.show() 2. 막대그래프(bar chart) plt.bar(x, hight, width, align='center') 매개변수중 width에 인수를 전달하여 막대의 두께를 조절할 수 있다. 또한 align의 인수는 'center'와 'edge' 이다. 기본값은 'center'이다. 이 값은 x축의 레이블이 막대의 중간에 위치(center) 또는 왼쪽 가장자리에 위치(edge)시킨다. 코드에서 np.random.randint 는 특정한 범위내에서 지정한 갯수의 랜덤수를 생성 np.unique(배열, retrun_counts=False, axis=None) : 객체 내의 중복되지 않은 수들을 반환한다. return_counts=True이면 각 수에 대한 빈도수를 반환한다. axis를 통해 행(1), 열(0)을 선택한다. >>> x=np.random.randint(1, 6, size=100) >>> uni,count=np.unique(x, return_counts=True) >>> uni array([1, 2, 3, 4, 5]) >>> count array([25, 17, 23, 16, 19], dtype=int64) >>> plt.bar(uni, count) >>> plt.show() 위의 막대그래프의 막대의

유사변환과 대각화

내용 유사변환 유사행렬의 특성 대각화(Diagonalization) 유사변환(Similarity transformation) 유사변환 n×n 차원의 정방 행렬 A, B 그리고 가역 행렬 P 사이에 식 1의 관계가 성립하면 행렬 A와 B는 유사하다고 하며 이 변환을 유사 변환 (similarity transformation)이라고 합니다. $$\begin{equation}\tag{1} A = PBP^{-1} \Leftrightarrow P^{-1}AP = B \end{equation}$$ 식 1의 유사 변환은 다음과 같이 고유값을 적용하여 특성 방정식 형태로 정리할 수 있습니다. $$\begin{align} B - \lambda I &= P^{-1}AP – \lambda P^{-1}P\\ &= P^{-1}(AP – \lambda P)\\ &= P^{-1}(A - \lambda I)P \end{align}$$ 위 식의 행렬식은 다음과 같이 정리됩니다. $$\begin{align} &\begin{aligned}\textsf{det}(B - \lambda I ) & = \textsf{det}(P^{-1}(AP – \lambda P))\\ &= \textsf{det}(P^{-1}) \textsf{det}((A – \lambda I)) \textsf{det}(P)\\ &= \textsf{det}(P^{-1}) \textsf{det}(P) \textsf{det}((A – \lambda I))\\ &= \textsf{det}(A – \lambda I)\end{aligned}\\ &\begin{aligned}\because \; \textsf{det}(P^{-1}) \textsf{det}(P) &= \textsf{det}(P^{-1}P)\\ &= \t

sympy.solvers로 방정식해 구하기

sympy.solvers로 방정식해 구하기 대수 방정식을 해를 계산하기 위해 다음 함수를 사용합니다. sympy.solvers.solve(f, *symbols, **flags) f=0, 즉 동차방정식에 대해 지정한 변수의 해를 계산 f : 식 또는 함수 symbols: 식의 해를 계산하기 위한 변수, 변수가 하나인 경우는 생략가능(자동으로 인식) flags: 계산 또는 결과의 방식을 지정하기 위한 인수들 dict=True: {x:3, y:1}같이 사전형식, 기본값 = False set=True :{(x,3),(y,1)}같이 집합형식, 기본값 = False ratioal=True : 실수를 유리수로 반환, 기본값 = False positive=True: 해들 중에 양수만을 반환, 기본값 = False 예 $x^2=1$의 해를 결정합니다. solve() 함수에 적용하기 위해서는 다음과 같이 식의 한쪽이 0이 되는 형태인 동차식으로 구성되어야 합니다. $$x^2-1=0$$ import numpy as np from sympy import * x = symbols('x') solve(x**2-1, x) [-1, 1] 위 식은 계산 과정은 다음과 같습니다. $$\begin{aligned}x^2-1=0 \rightarrow (x+1)(x-1)=0 \\ x=1 \; \text{or}\; -1\end{aligned}$$ 예 $x^4=1$의 해를 결정합니다. solve() 함수의 인수 set=True를 지정하였으므로 결과는 집합(set)형으로 반환됩니다. eq=x**4-1 solve(eq, set=True) ([x], {(-1,), (-I,), (1,), (I,)}) 위의 경우 I는 복소수입니다.즉 위 결과의 과정은 다음과 같습니다. $$x^4-1=(x^2+1)(x+1)(x-1)=0 \rightarrow x=\pm \sqrt{-1}, \; \pm 1=\pm i,\; \pm1$$ 실수