데이터분석/Machine Learning

R을 이용한 회귀분석 함수 이용 예

늘근이 2016. 1. 10. 11:00
> set.seed(2)
> x = runif(10,0,11)

 

0~11 까지 랜덤하게 10개를 뽑는다.

 

> y = runif(10,11,20) > d = data.frame(x,y) > d x y 1 2.033705 15.97407 2 7.726114 13.15005 3 6.306590 17.84462 4 1.848571 12.62738 5 10.382233 14.64754 6 10.378225 18.68194 7 1.420749 19.78759 8 9.167937 13.03243 9 5.148204 15.00328 10 6.049821 11.67481 > result = lm(y~x, data=d)

> result Call: lm(formula = y ~ x, data = d) Coefficients: (Intercept) x 15.82328 -0.09608

 
 

위의 식은 y = -0.09608x + 15.82328

 

 

> summary(result)

Call:
lm(formula = y ~ x, data = d)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.5672 -1.9257 -0.2518  2.0570  4.1008 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 15.82328    1.94450   8.137 3.86e-05 ***
x           -0.09608    0.28313  -0.339    0.743    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.917 on 8 degrees of freedom
Multiple R-squared:  0.01419,	Adjusted R-squared:  -0.109 
F-statistic: 0.1152 on 1 and 8 DF,  p-value: 0.7431

 

 

P-value가 너무 높다. 랜덤이니 당연

 

변수가 여러개일 경우, P-value 가 높은놈먼저 제거해버리는 방법이 있을수 있다.

 

후진 / 전진제거는 다음과 같이 자동화가 가능한데

 

> step(lm(Y ~1, df), scopt = list(lower~1, upper=~X1+X2+X3+X4), direction = "both")

 

 

와 같이 써주면 알아서 전진 / 후진해서 P-value 가 높은높들은 빼버리고 최적화한다.