내용
회귀모형의 일반적인 사항과 단순회귀모형의 내용이 선행되어야 합니다.다항식 회귀
독립변수의 차수를 증가시켜 회귀모델을 생성할 수 있습니다.
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
위 결과와 같이 생성된 모델은 다음과 같습니다.
두 계수의 유의확률이 모두 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)
댓글
댓글 쓰기