R

선형회귀분석 예제

코딩탕탕 2022. 10. 26. 12:31

 

선생님 코드

library(rJava)
library(DBI)
library(RJDBC)

drv <- JDBC(driverClass = "org.mariadb.jdbc.Driver", 
            classPath = "C:/work/mariadb-java-client-2.6.2.jar")
conn <- dbConnect(drv = drv, "jdbc:mysql://127.0.0.1:3306/test", "root", "123")
conn

dbListTables(conn)  # 테이블 목록 보기

query <- "select jikwon_pay,date_format(now(),'%Y') - date_format(jikwon_ibsail,'%Y') + 1 as jikwon_ibsa from jikwon"

datas <- dbGetQuery(conn, query)
head(datas, 3)
is(datas)
str(datas)
table(datas$jikwon_ibsa)  # 입사년도별 건수

cor(datas$jikwon_ibsa, datas$jikwon_pay)  # r : 0.9196725

model <- lm(formula = jikwon_pay ~ jikwon_ibsa, data = datas)
model
plot(datas$jikwon_ibsa, datas$jikwon_pay)
abline(model, col='red')

summary(model)  

go_func <- function(){
  y_num <- readline('근무년수 입력:')
  y_num <- as.numeric(y_num)
  new_data <- data.frame(jikwon_ibsa=y_num)
  return(predict(model, newdata = new_data))
}

cat('예측결과는 ', go_func())

 

 

작성자 코드

install.packages("rJava") # install
install.packages("DBI")   # install
install.packages("RJDBC") # install
library(rJava)
library(DBI)
library(RJDBC)


drv <- JDBC(driverClass = "org.mariadb.jdbc.Driver",
            classPath = "C:/work/mariadb-java-client-2.6.2.jar")
conn <- dbConnect(drv = drv, "jdbc:mysql://127.0.0.1:3306/test", "root","123") # ip주소와 포트번호, database명, ID, PW를 입력한다.
conn

dbListTables(conn)  # test table 호출
query <- "select jikwon_pay, date_format(now(),'%Y') - date_format(jikwon_ibsail,'%Y') + 1 as jikwon_ibsa from jikwon"
goodsAll <- dbGetQuery(conn, query) # query문 참조
goodsAll

cor(goodsAll$jikwon_ibsa, goodsAll$jikwon_pay) # 양의 상관관계가 있다.

jik <- lm(formula = jikwon_pay ~ jikwon_ibsa, data = goodsAll)
summary(jik)

plot(goodsAll$jikwon_ibsa, goodsAll$jikwon_pay)

coef(jik) 

fitted(jik)[1:4] # 모델이 예측한 값(dist)

residuals(jik)[1:4] # 모델과 실제값과의 차이(residuals, 잔차)

fitted(jik)[1:4] + residuals(jik)[1:4] # 예측값 + 잔차 = 실제값. 잔차 = 실제값 - 예측값

confint(jik)


y_num <- readline('근무년수 입력:')
y_num <- as.numeric(y_num)
y_num

predict(jik, newdata = data.frame(jikwon_ibsa=y_num))
abline(jik, col = 'blue')

현재 날짜에서 입사일을 뺀 것에 + 1을 해주면 근무 년수를 계산할 수 있다.