rm(list = ls())
# lm 회귀분석 사용함수

model <- lm(mpg~hp, data = mtcars) # 독립변수 1개, 단순선형(직선) 회귀
summary(model)
## 
## Call:
## lm(formula = mpg ~ hp, data = mtcars)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -5.7121 -2.1122 -0.8854  1.5819  8.2360 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 30.09886    1.63392  18.421  < 2e-16 ***
## hp          -0.06823    0.01012  -6.742 1.79e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.863 on 30 degrees of freedom
## Multiple R-squared:  0.6024, Adjusted R-squared:  0.5892 
## F-statistic: 45.46 on 1 and 30 DF,  p-value: 1.788e-07
# Residuals : 잔차(오차)
# Coefficients : 회귀계수(Estimate)
# (Intercept) : 절편(상수) : 30.9886
# 독립변수 hp 회귀계수는: -0.06823
# Pr(>|t|) 유의확률입니다.
# 0.000000179 < 유의수준 0.05
# 귀무가설 : 회귀계수는 0이다.
# 대립가설 : 회귀계수는 0이 아니다.
# 따라서 귀무가설 기각, 통계적으로 유의한 변수라고 한다.
format(1.79e-07, scientific=FALSE)
## [1] "0.000000179"
# 표본크기 - 독립변수의 수-1 = 자유도
# n-1-1 = 30
# 1 and 30 DF : 1 DF (분자 자유도) = 회귀모형에 사용된 설명변수 개수
# 30 DF (분모 자유도) = 잔차의 자유도, 즉 n(표본의 크기)-p(독립변수 수,1)-1
# n = 32
# Residual standard error: 3.863
# 평균적으로 예측값과 실제값의 차이가 약 3.863 정도라는 뜻
# 30 degrees of freedom = 자유도
# Adjusted R-squared:  0.5892 : 수정된 결정계수
str(mtcars)
## 'data.frame':    32 obs. of  11 variables:
##  $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
##  $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
##  $ disp: num  160 160 108 258 360 ...
##  $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
##  $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
##  $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
##  $ qsec: num  16.5 17 18.6 19.4 17 ...
##  $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
##  $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
##  $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
##  $ carb: num  4 4 1 1 2 1 4 2 2 4 ...
data("faithful")
summary(faithful)
##    eruptions        waiting    
##  Min.   :1.600   Min.   :43.0  
##  1st Qu.:2.163   1st Qu.:58.0  
##  Median :4.000   Median :76.0  
##  Mean   :3.488   Mean   :70.9  
##  3rd Qu.:4.454   3rd Qu.:82.0  
##  Max.   :5.100   Max.   :96.0
model1 <- lm(eruptions~waiting, data = faithful)
summary(model1)
## 
## Call:
## lm(formula = eruptions ~ waiting, data = faithful)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.29917 -0.37689  0.03508  0.34909  1.19329 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -1.874016   0.160143  -11.70   <2e-16 ***
## waiting      0.075628   0.002219   34.09   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.4965 on 270 degrees of freedom
## Multiple R-squared:  0.8115, Adjusted R-squared:  0.8108 
## F-statistic:  1162 on 1 and 270 DF,  p-value: < 2.2e-16
# Residuals : 잔차(오차)
# Coefficients : 회귀계수(Estimate)
# (Intercept) : 절편(상수) : -1.874016
# 독립변수 waiting 회귀계수는: 0.075628
# Pr(>|t|) 유의확률입니다.
# 0.0000000000000002 < 유의수준 0.05
format(2e-16, scientific=FALSE)
## [1] "0.0000000000000002"
# 귀무가설 : 회귀계수는 0이다.
# 대립가설 : 회귀계수는 0이 아니다.
# 따라서 귀무가설 기각, 통계적으로 유의한 변수라고 한다.
# Multiple R-squared:  0.8115,  Adjusted R-squared:  0.8108 
# 결정계수는 1과 가까우므로 모델이 데이터를 잘설명한다고 할 수 있다.

# 표본크기 - 독립변수의 수-1 = 자유도
# n-1-1 = 270
# 1 and 270 DF : 1 DF (분자 자유도) = 회귀모형에 사용된 설명변수 개수
# 270 DF (분모 자유도) = 잔차의 자유도, 즉 n(표본의 크기)-p(독립변수 수,1)-1
# n = 272
# Residual standard error: 0.4965
# 평균적으로 예측값과 실제값의 차이가 약 0.4965 정도라는 뜻
# 270 degrees of freedom = 자유도
# Adjusted R-squared:  0.8108 : 수정된 결정계수
str(faithful)
## 'data.frame':    272 obs. of  2 variables:
##  $ eruptions: num  3.6 1.8 3.33 2.28 4.53 ...
##  $ waiting  : num  79 54 74 62 85 55 88 85 51 85 ...
data(pressure)
summary(pressure)
##   temperature     pressure       
##  Min.   :  0   Min.   :  0.0002  
##  1st Qu.: 90   1st Qu.:  0.1800  
##  Median :180   Median :  8.8000  
##  Mean   :180   Mean   :124.3367  
##  3rd Qu.:270   3rd Qu.:126.5000  
##  Max.   :360   Max.   :806.0000
model2 <- lm(pressure~temperature, data = pressure)
summary(model2)
## 
## Call:
## lm(formula = pressure ~ temperature, data = pressure)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -158.08 -117.06  -32.84   72.30  409.43 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -147.8989    66.5529  -2.222 0.040124 *  
## temperature    1.5124     0.3158   4.788 0.000171 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 150.8 on 17 degrees of freedom
## Multiple R-squared:  0.5742, Adjusted R-squared:  0.5492 
## F-statistic: 22.93 on 1 and 17 DF,  p-value: 0.000171
# Residuals : 잔차(오차)
# Coefficients : 회귀계수(Estimate)
# (Intercept) : 절편(상수) : -147.8989
# 독립변수 temperature 회귀계수는: 1.5124
# Pr(>|t|) 유의확률입니다.
# 0.000171 < 유의수준 0.05
# 귀무가설 : 회귀계수는 0이다.
# 대립가설 : 회귀계수는 0이 아니다.
# 따라서 귀무가설 기각, 통계적으로 유의한 변수라고 한다.
# Multiple R-squared:  0.5742,  Adjusted R-squared:  0.5492 
# 결정계수는 중간이므로 모델이 데이터에 대한 설명이 애매하다

# 표본크기 - 독립변수의 수-1 = 자유도
# n-1-1 = 17
# 1 and 17 DF : 1 DF (분자 자유도) = 회귀모형에 사용된 설명변수 개수
# 17 DF (분모 자유도) = 잔차의 자유도, 즉 n(표본의 크기)-p(독립변수 수,1)-1
# n = 19
# Residual standard error: 150.8
# 평균적으로 예측값과 실제값의 차이가 약 150.8 정도라는 뜻
# 17 degrees of freedom = 자유도
# Adjusted R-squared:  0.5492 : 수정된 결정계수
str(pressure)
## 'data.frame':    19 obs. of  2 variables:
##  $ temperature: num  0 20 40 60 80 100 120 140 160 180 ...
##  $ pressure   : num  0.0002 0.0012 0.006 0.03 0.09 0.27 0.75 1.85 4.2 8.8 ...
data(women)
summary(women)
##      height         weight     
##  Min.   :58.0   Min.   :115.0  
##  1st Qu.:61.5   1st Qu.:124.5  
##  Median :65.0   Median :135.0  
##  Mean   :65.0   Mean   :136.7  
##  3rd Qu.:68.5   3rd Qu.:148.0  
##  Max.   :72.0   Max.   :164.0
model3 <- lm(weight~height, data = women)
summary(model3)
## 
## Call:
## lm(formula = weight ~ height, data = women)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -1.7333 -1.1333 -0.3833  0.7417  3.1167 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -87.51667    5.93694  -14.74 1.71e-09 ***
## height        3.45000    0.09114   37.85 1.09e-14 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.525 on 13 degrees of freedom
## Multiple R-squared:  0.991,  Adjusted R-squared:  0.9903 
## F-statistic:  1433 on 1 and 13 DF,  p-value: 1.091e-14
# Residuals : 잔차(오차)
# Coefficients : 회귀계수(Estimate)
# (Intercept) : 절편(상수) : -87.51667
# 독립변수 temperature 회귀계수는: 3.45000
# Pr(>|t|) 유의확률입니다.
format(1.09e-14, scientific=FALSE)
## [1] "0.0000000000000109"
# 0.0000000000000109 < 유의수준 0.05
# 귀무가설 : 회귀계수는 0이다.
# 대립가설 : 회귀계수는 0이 아니다.
# 따라서 귀무가설 기각, 통계적으로 유의한 변수라고 한다.
# Multiple R-squared:  0.991,   Adjusted R-squared:  0.9903
# 결정계수는 1과 가까우므로 모델이 데이터를 잘설명한다고 할 수 있다.
# Multiple R-squared(결정계수)
# 회귀분석에서 모델이 종속변수의 변동을 얼마나 잘 설명하는지를 나타내는 지표
# 결정계수 0~1사이의 값을 갖는다.
# 1에 가까울수록 선형회귀 직선위에 관측치가 잘 모여있다를 의미
# 결정계수가 1이라면 선형회귀 직선위에 모든 관측기가 있음을 의미함.
# 3개의 모델중 결정계수가 제일 큰 모델은? 
# model3 <- lm(weight~height, data = women) = 0.991로 우수 했음.
# 일반적으로 결정계수값이 0.75이상이면 좋은 설명력을 가진 모형이다.

# Std. Error : 표준오차
# Estimate / Std. Error = t-value
3.45000/0.09114
## [1] 37.85385
# t 통계량의 절대값이 클수록 통계적으로 유의(significance)하다.
# Signif. codes : 유의수준
# Pr(>|t|)옆에 '*'가 있으면 유의수준 0.05에서 유의한 변수이다.
# '*'가 많을수록 더울 엄격하게 유의한 변수이다.
# 회귀모형의 유의성 검정 판단에 필요한 것은 F-statistic와 p-value이다.
# 귀무가설 : 모든 회귀계수는 0이다.
# 대립가설 : 적어도 하나의 회귀계수는 0이 아니다.
# 0.0000000000000109 < 유의수준 0.05
# 귀무가설 기각, 통계적으로 유의한 모형이라 한다.
# 결과적으로 회귀계수 하나라도 0이 아니면 통계적으로 유의한 모형이다.

# 표본크기 - 독립변수의 수-1 = 자유도
# n-1-1 = 30
# 1 and 13 DF : 1 DF (분자 자유도) = 회귀모형에 사용된 설명변수 개수
# 13 DF (분모 자유도) = 잔차의 자유도, 즉 n(표본의 크기)-p(독립변수 수,1)-1
# n = 15
# Residual standard error: 1.525
# 평균적으로 예측값과 실제값의 차이가 약 3.863 정도라는 뜻
# 13 degrees of freedom = 자유도
# Adjusted R-squared:  0.9903 : 수정된 결정계수
str(women)
## 'data.frame':    15 obs. of  2 variables:
##  $ height: num  58 59 60 61 62 63 64 65 66 67 ...
##  $ weight: num  115 117 120 123 126 129 132 135 139 142 ...