09-29 03:12
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- Java
- Entity
- 리눅스 기초
- Polymolphism
- selenium
- Physical Scheme
- literal
- Binary Search
- BFS
- python
- Reference Type
- X.org
- Entity Set
- preprocessing
- 셀레니움
- dbms
- zsh
- 리눅스
- 리눅스 마스터 1급
- OOP
- X윈도우
- Operator
- Mac
- Class
- 백준
- Unity
- systemd
- Inheritance
- 자바
- External Scheme
Archives
- Today
- Total
Byeol Lo
[ADP] 4장 데이터 분석 - 회귀 분석(Regression Analysis) 본문
깊이 있는 내용은 다른 포스트로 대체하면서 넘기며, 지금은 흐름을 따지자.
2024.07.29 - [Math/Applied Statistics] - Simple Linear Regression
R을 이용한 단순선형회귀
set.seed(2)
x = runif(10, 0, 11)
y = 2 + 3*x + rnorm(10, 0, 0.2)
dfrm = data.frame(x, y)
lm(y~x, data=dfrm)
Call:
lm(formula = y ~ x, data = dfrm)
Coefficients:
(Intercept) x
2.213 2.979
R을 이용한 다중선형회귀
set.seed(2)
u = runif(10, 0, 11)
v = runif(10, 11, 20)
w = runif(10, 1, 30)
y = 3 + 0.1*u + 2*v - 3*w + rnorm(10, 0, 0.1)
dfrm = data.frame(u, v, w, y)
lm(y~u+v+w, data = dfrm)
Call:
lm(formula = y ~ u + v + w, data = dfrm)
Coefficients:
(Intercept) u v w
3.32894 0.09613 1.98409 -3.00434
R을 이용한 유의성, 적합성 검정
m <- lm(y~u+v+w, data = dfrm)
summary(m)
Call:
lm(formula = y ~ u + v + w, data = dfrm)
Residuals:
Min 1Q Median 3Q Max
-0.06635 -0.04480 -0.01438 0.03646 0.09493
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.328942 0.146079 22.79 4.68e-07 ***
u 0.096127 0.008004 12.01 2.02e-05 ***
v 1.984093 0.007632 259.96 2.19e-13 ***
w -3.004337 0.002705 -1110.63 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.06771 on 6 degrees of freedom
Multiple R-squared: 1, Adjusted R-squared: 1
F-statistic: 7.241e+05 on 3 and 6 DF, p-value: < 2.2e-16
각 u, v, w 의 p-value가 0.001 보다 작기 때문에(quantile이 양 끝 단에 있기 때문에) 유의미하다고 볼 수 있다. 이 모델의 설명력은 adj R^2, R^2 둘 다 100%에 가까운 설명력을 가지게 되며, 모델의 적합성 검정에서 모델이 통계적으로 유의미함을 볼 수 있다.
R을 이용한 다항회귀분석
data(cars)
head(cars)
speed2 = cars$speed^2
cars = cbind(speed2, cars)
lm(formula = dist~speed+speed^2, data = cars)
Call:
lm(formula = dist ~ speed + speed^2, data = cars)
Coefficients:
(Intercept) speed
-17.579 3.932
m <- lm(formula = dist~speed+speed2, data = cars)
summary(m)
Call:
lm(formula = dist ~ speed + speed2, data = cars)
Residuals:
Min 1Q Median 3Q Max
-28.720 -9.184 -3.188 4.628 45.152
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.47014 14.81716 0.167 0.868
speed 0.91329 2.03422 0.449 0.656
speed2 0.09996 0.06597 1.515 0.136
Residual standard error: 15.18 on 47 degrees of freedom
Multiple R-squared: 0.6673, Adjusted R-squared: 0.6532
F-statistic: 47.14 on 2 and 47 DF, p-value: 5.852e-12
추정된 선형모델은 2.47 + 0.91 * speed + 0.1 *speed2 임을 알 수 있다. 하지만 이 speed 만 가지고서는 유의성이 떨어지며, 모델의 설명력 지표 R^2도 0.6 정도에 못미친다. F 검정에서 p-value 또한 기각역 안에 들어가므로 전반적으로 좋은 모델이라고 할 수 없다.
최적회귀방정식의 선택
- 모든 가능한 조합의 회귀분석(All Possible Regression): 가능한 모든 조합의 linear model을 만들어서 그 중 가장 설명력이 좋고 적합도가 뛰어난 모델을 선택하는 것
- AIC(Akaike Information Criterion) = $-2 \log L(\hat{\theta}) + 2k \quad (k = number of parameters)$
- BIC(Bayesian Information Criterion) = $-2 \log L(\hat{\theta}) + 2k \log (n)$
- 단계적 변수선택(Stepwise Variable Selection)
- 전진선택법: 절편만 있는 상수모형으로부터 시작해 중요하다고 생각하는 설명변수부터 차례로 모형에 추가
- 후진제거법: 독립변수 후보 모두를 포함한 모형에서 출발해 제곱합의 기준으로 가장 적은 영향을 주는 변수부터 하나씩 제거
- 단계별방법: 전진선택법에서 변수를 추가할 때 기존 변수의 중요도가 약화되면 해당 변수를 제거하는 것
단계별 변수 선택에서 R은
step(lm(종속변수~독립변수, 데이터세트), scope=list(lower=~1, upper=~독립변수), direction = "forward")
를 통해 전진선택법을 하거나 "backward", "both"를 통해 변수를 적절히 선택가능하다.
'AI > ADP' 카테고리의 다른 글
[ADP] 4장 데이터 분석 - 시계열 분석 (0) | 2024.08.02 |
---|---|
[ADP] 4장 데이터 분석 - 다변량 분석 (0) | 2024.08.01 |
[ADP] 4장 데이터 분석 - 비모수 검정 (0) | 2024.07.27 |
[ADP] 4장 데이터 분석 - 통계 분석 (0) | 2024.07.25 |
[ADP] 4장 데이터 분석 - 결측값 처리와 이상값 검색 (1) | 2024.07.25 |
Comments