1. 선형 회귀 : 두 변수 간의 선형관계를 파악
: 두 변수는 연속성 데이터
: 두 변수는 상관관계가 있어야 함.
: 두 변수는 인과관계가 있어야 함. 원인(독립변수-x)과 결과(종속변수-y)
df <- data.frame(workhour = 1:7, totalpay = seq(10000, 70000, by=10000))
df
# workhour totalpay
# 1 1 10000
# 2 2 20000
# 3 3 30000
# 4 4 40000
# 5 5 50000
# 6 6 60000
# 7 7 70000
cor(df$workhour, df$totalpay) # 1
plot(totalpay ~ workhour, df)

2. 단순 회귀분석 모형산출
y =wx + b
abcModel <- lm(totalpay ~ workhour, data = df) # lm() : 선형 모델 생성
abcModel # -5.5e-12(y절편) 1.0e+04(기울기)
=> y = 1.0e+04 * x -5.5e-12
predict(abcModel) # 예측값
predict(abcModel, data.frame(workhour=c(2.4, 6.789, 9.4)))
# 1 2 3
# 24000 67890 94000
plot(totalpay ~ workhour, data=df)
grid()
abline(abcModel, col="blue", lwd=2) # abline() : 직선 그리기.

3. 단순선형회귀 모델 작성 연습
head(women, 3)
#height : 독립, weight : 종속
cor(women$height, women$weight) # 0.9954948
plot(weight ~ height, data = women)

- 모델 작성
fit <- lm(weight~height, data=women)
fit
# (Intercept) height
# -87.52 3.45
# y = 3.45 * height -87.52
- 예측값
pred_y = 3.45 * 60 -87.52
cat('키 60의 예상 몸무게는 ', pred_y) # 95% 신뢰구간
predict(fit, data.frame(height=c(60, 58, 66, 679)))
summary(fit) # 모델에 대한 요약 통계량 확인.
# R-squared: 0.991, Adjusted R-squared: 0.9903
# F-statistic: 1433 on 1 and 13 DF, p-value: 1.091e-14
=> p-value: 1.091e-14 < 0.05 이므로 현재 모델은 신뢰할 수 있다.
R-squared(상관계수를 제곱, 결정계수 : 모델이 독립변수가 종속변수를 얼마나 잘 설명하는지를 표시한 값)
1에 가까울 수록 독립변수가 종속변수를 설명을 잘하는 데이터.
- 선형회귀 모델의 적절성을 위한 조건
: 정규성, 독립성, 선형성, 등분산성 : 잔차의 (분산정도), 다중공선성
- 시각화로 확인
par(mfrow=c(2,2)) # par() : 그래픽 파라미터 지정, mfrow : 배열 방식지정
plot(fit)
abline(fit)

4. 단순 선형회귀 모델
- 변수 간의 상관관계 확인
: 상관관계는 있으나 인과관계가 아닌 데이터는 회귀분석으로 알 수 없다
head(iris)
dim(iris)
cor(iris$Sepal.Length, iris$Sepal.Width) # 상관관계
# -0.1175698 => 약한 음의 상관관계
cor(iris$Sepal.Length, iris$Petal.Length)
# 0.8717538 => 강한 양의 상관관계
1) 약한 음의 상관관계로 회귀모델을 생성
result <- lm(formula = Sepal.Length ~ Sepal.Width, data = iris) # 선형모델 생성
summary(result)
# Residuals:
# Min 1Q Median 3Q Max
# -1.5561 -0.6333 -0.1120 0.5579 2.2226
#
# Coefficients:
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) 6.5262 0.4789 13.63 <2e-16 ***
# Sepal.Width -0.2234 0.1551 -1.44 0.152
# ---
# Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
# Residual standard error: 0.8251 on 148 degrees of freedom
# Multiple R-squared: 0.01382, Adjusted R-squared: 0.007159
# F-statistic: 2.074 on 1 and 148 DF, p-value: 0.1519
=> 모델 유의성 p value:0.1519 <0.05. 신뢰가능
2) 강한 양의 상관관계로 회귀모델을 생성
result2 <- lm(formula = Sepal.Length ~ Petal.Length, data = iris)
summary(result2)
# Residuals:
# Min 1Q Median 3Q Max
# -1.24675 -0.29657 -0.01515 0.27676 1.00269
#
# Coefficients:
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) 4.30660 0.07839 54.94 <2e-16 ***
# Petal.Length 0.40892 0.01889 21.65 <2e-16 ***
# ---
# Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
# Residual standard error: 0.4071 on 148 degrees of freedom
# Multiple R-squared: 0.76, Adjusted R-squared: 0.7583
# F-statistic: 468.6 on 1 and 148 DF, p-value: < 2.2e-16
=> p-value: < 2.2e-16
=> p-value가 아주 작다. 신뢰
# Spark : 자바를 이용한 데이터 분석 도구
# Scala(스칼라) : 자바를 이용하여 함수형 언어로 제작
# residual(리지듀얼) : 잔차
# Coefficients : 계수
# SSE(explained sum of squares) : 설명된 변동
# SSR (residual sum of squares) : 설명 안된 변동
# SST(Total Sum of Squares) : SSE + SSR
# 설명된 분산 : 종속변수의 분산과 독립 변수 간 교집합.
'BACK END > R' 카테고리의 다른 글
[R] R 정리 12 - 다중 선형 회귀 DB (0) | 2021.01.29 |
---|---|
[R] R 정리 11 - 다중 선형 회귀 (0) | 2021.01.29 |
[R] R 정리 9 - 공분산, 상관계수 (0) | 2021.01.29 |
[R] R 정리 8 - Web Scraping, DB (0) | 2021.01.29 |
[R] R 정리 7 - 내장함수, 시각화 (0) | 2021.01.28 |