일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Q타입클래스
- R명령어
- str()
- LIKE검색
- R프로그래밍
- core.autocrlf
- git
- Rstudio
- summary()
- 프로그래머스
- 머신러닝
- DTO사용이유
- Eclipse
- queryDSL
- querydsl적용하기
- JPA
- Spring
- r
- stepfilter
- programmers
- cor()
- 이클립스
- java
- 머신러닝프로세스
- 한글깨지는문제
- RProgramming
- 자바
- git오류
- 알고리즘
- 이중배열
- Today
- Total
놀고 싶어요
[R Programming] 회귀분석 - 독립변수가 1개인 회귀분석 본문
상관분석을하고 의미있는 관계를 찾았다고 해도 해당 관계는 인과관계가 의미하진 않는다.
회귀분석은 인과관계를 설명하는 방법 중 하나이다.
회귀분석의 목적
1. 데이터의 관계에 대해서 설명 - 통계적 관점
2. 예측에 활용 - 머신러닝 관점
회귀분석
독립변수 x와 종속변수 y의 관계를 설명하는 선형식을 찾는 것 ex) y= ax+b 같은 식
x와 y는 수치형 데이터
(독립변수는 하나 이상의 값이 될 수 있다.)
예제) 자전거 대여 건수(Count)는 기온(Temp)와 상관이 있는지 확인
1. 키 결합하기 전에 두 데이터 시간 간격이 동일한지 확인해 본다.
weather dataframe 데이터를 시간 단위로 대여건수 평균값을 요약한다.
weather2 <- aggregate(cbind(temp, cum_precipitation, humidity, insolation, sunshine, wind, wind_direction, sea_lvl_pressure, pressure) ~ date+time, data = weather, mean)
str(weather2)
aggregate()함수
tilde(~) 기호: ~ 뒤에 있는 컬럼들 기준으로 ~ 앞에 있는 값들을 마지막에 있는 mean (평균) 함수로 집계
집계할 때 사용하는 함수는 마지막 인자인 mean이다.
cbind: 컬럼 방향으로 결합시키는 함수. 데이터 내의 컬럼중 출력값에 포함시키고자 하는 컬럼을 cbind로 묶어줌
bike_data2 dataframe 데이터를 일자와 시간대 별로 대여건수를 요약한다.
bike_data3 <- aggregate(Distance ~ Date_out + Time_out, data = bike_data2, length)
str(bike_data3)
72 obs: 3일간 24시간, 총 72개 구간에 대해서 데이터가 나타난 건 수, 즉 총 대여 건이 집계된다.
2. 2개의 dataframe 결합
bike_weather <- inner_join(bike_data3, weather2, by=c('Date_out'='date', 'Time_out'='time'))
Error: Can't join on `x$Date_out` x `y$Date_out` because of incompatible types. ℹ `x$Date_out` is of type <date>>. ℹ `y$Date_out` is of type <character>>.
Date_out은 date type으로 되어있는 오브젝트이고, date는 character라서 오류 발생
-> 같은 성격이 아니므로 비교할 수 없음
bike_data3$Date <- as.character(bike_data3$Date_out)
Character 성격의 새로운 컬럼 생성해서 입력해준 다음 다시 join을 해줍니다.
bike_weather <- inner_join(bike_data3, weather2, by=c('Date'='date', 'Time_out'='time'))
str(bike_weather)
3. 회귀식 구하기
lm(Count ~ temp, data = bike_weather)
lm: linear model
lm(종속변수 y ~ 독립변수, data = 변수)
Coefficients:
(Intercept) temp
-320.15 38.79
기울기 38.79, 절편은 -320.15 -> 선형회귀식 구성하는 값
선형회귀식: Count = temp x 38.79 - 320.15
t value Pr(>|t|)
-1.540 0.128252
3.993 0.000165
- t-value와 t-value에 해당하는 확률값 p-value
독립변수 temp에 대한 p-value 0.000165
유의수준 0.05와 비교해보면 독립변수 temp가 종속변수 Count에 대해서 통계적으로 유의하게 영향이 있다.
그 크기는 temp 값의 1 단위 변화에 대해서 회귀계수로 산출된 38.794 정도의 영향력이 있다.
R-squared: 0.1922, Adjusted R-squared: 0.1801
- R제곱, Adjusted R제곱
결정계수: 0.1922, 조정된 값: 0.1801
Adjusted R-squared: 설명력과 복잡성 간의 트레이드 오프 관계를 감안하여 조정된 값이다.
이 값은 회귀식이 실제 관찰된 값을 얼마나 잘 설명하는 가를 말한다.
데이터 세트에 있는 x값을 회귀식에 넣었을 때 계산된 y값이 실제 데이터에 존재하는 y값 대비해서 얼마나 잘 설명하는지를 말한다. 그래서 흔히들 설명력이라고 말한다.
0~1 사이 값으로 1에 가까울수록 설명력이 높아서 좋은 회귀식으로 평가될 수 있다.
Adjusted R-squared: 0.1801 -> 설명력이 높지는 않다.
F-statistic: 15.94 on 1 and 67 DF, p-value: 0.0001647
- F 검정통계량 추정치, F-검정의 p-value
이 값은 회귀식 전체에 대한 통계적 유의성을 검정하는 값이다.
앞서 본 독립변수 t에 대한 p-value는 개별 독립변수의 통계적 유의성을 얘기하지만 F에 대한 p-value는 식 전체에 대한 통계적 유의성을 얘기한다.
사전에 설정되어 있는 유의수준과 비교하여 유의수준과 같거나 큰 값이 나오면 통계적 유의성이 없어 회귀관계가 존재하지 않는다 판정. (P-value >= 유의수준)
유의수준보다 작은 값이 나오면 통계적 유의성이 있어 회귀관계가 존재한다고 해석한다.
p-value: 0.0001647 - > 독립변수와 종속변수 간의 회귀관계가 존재한다는 판정을 할 수 있다.
회귀분석 시 기억할 사항
- 독립변수와 종속변수의 관계를 설명하는 직선을 찾는다
(종속변수 y = 독립변수 x * 기울기 + 절편 의 관계를 찾는다.)
수치형 데이터 x, y로 부터 관계를 분석하여 적절한 기울기와 절편 값을 찾는 것이 회귀분석의 결과이다.
- 회귀분석이 가치있는지 알려주는 지표
1. F값의 p-value: 회귀식이 존재하는가에 대한 확인
2. t값의 p-value: 독립변수에 대한 기울기 값에 대한 지표로 독립변수가 종속변수의 변화에 영향을 주는지 p-value가 통계적 유의성을 확인을 할 수 있게 해준다. 독립변수가 종속변수의 변화에 얼마나 영향을 주는지 알 수 있는 지는 기울기 값 coef(계수값)으로 알수 있다.
독립변수가 하나 사용된 경우에는 t값의 p-value와 F값에 대한 p-value가 거의 같은 값이 나오고 해석의 관점에서도 거의 동일한 의미를 가지게 된다.
독립변수가 여러 개 사용된 경우에는 F값의 p-value를 확인하여 통계적으로 유의한가 판정한 뒤에 t값에 대한 p-value들을 살펴보고 통계적으로 유의한 독립변수와 그렇지 못한 독립변수를 파악할 수 있다.
R제곱값은 결정계수로서 회귀식의 설명력이 얼마나 되는가를 말한다.
회귀분석에서 회귀식의 통계적 유의성을 확인하려면 F 검정통계량 추정치의 p-value를 확인해야 한다.
t의 p-value는 독립변수의 통계적 유의성, R제곱과 수정된 R제곱은 설명력을 확인할 수 있다.
'R' 카테고리의 다른 글
[R Programming] 로지스틱 회귀분석 (0) | 2021.05.21 |
---|---|
[R Programming] 다중회귀분석: 독립변수가 범주형 데이터 (0) | 2021.05.20 |
[R Programming] R 기본 명령어 정리 (0) | 2021.05.19 |
[R Programming] 상관분석 (Correlation Analysis) (1) | 2021.05.18 |
[R Programming] 카이제곱분포 Chi-square Distribution, 카이제곱 독립성 검정 (0) | 2021.05.18 |