당신은 주제를 찾고 있습니까 “r 다중 회귀 분석 – 통계데이터분석 – 회귀분석 – 다중회귀분석 🔑 multiple regression analysis | 두 개 이상의 독립변수 | 표준화계수 | 베타(beta)“? 다음 카테고리의 웹사이트 https://you.tfvp.org 에서 귀하의 모든 질문에 답변해 드립니다: https://you.tfvp.org/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 곽기영 이(가) 작성한 기사에는 조회수 4,347회 및 좋아요 53개 개의 좋아요가 있습니다.
r 다중 회귀 분석 주제에 대한 동영상 보기
여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!
d여기에서 통계데이터분석 – 회귀분석 – 다중회귀분석 🔑 multiple regression analysis | 두 개 이상의 독립변수 | 표준화계수 | 베타(beta) – r 다중 회귀 분석 주제에 대한 세부정보를 참조하세요
[R을 이용한 통계데이터분석]다중선형회귀분석(multiple linear regression analysis) 또는 간단히 다중회귀분석은 종속변수(결과변수)와 두 개 이상의 독립변수(예측변수) 간의 선형관계를 도출하는 통계분석 기법입니다. 다음과 같은 함수에 대한 설명이 포함되어 있습니다: scatterplotMatrix(), lm(), summary(), stargazer(), lm.beta().r 다중 회귀 분석 주제에 대한 자세한 내용은 여기를 참조하세요.
[R] Multiple linear regression (다중회귀분석)
[R] Multiple linear regression (다중회귀분석) Start … 다중회귀분석은 예측변수(독립변수;설명변수)가 2개 이상인 회귀분석. : 다중회귀분석에서 …Source: bioinformaticsandme.tistory.com
Date Published: 4/3/2022
View: 9868
R을 활용한 통계분석 – 5.다중회귀분석
다중회귀분석 (Multiple Regression Model) # programmer 20명 # salary가 experience(경력년수), score (직무적성검사성적)과 연관성을 갖는지 검증. df …
Source: woosa7.github.io
Date Published: 5/28/2022
View: 9829
R – 다중회귀분석 (Multiple Linear Regression) 결과 해석
R – 다중회귀분석 (Multiple Linear Regression) R 을 통해 다중회귀분석을 수행하는 기본적인 절차를 포스팅합니다. 라이브러리 임포트 datarium 의 …
Source: 3months.tistory.com
Date Published: 4/18/2022
View: 304
(R) 다중회귀분석 이해하기 – 공부하려고 만든 블로그
(R) 다중회귀분석 이해하기 … ※ 전공자가 아니기 때문에 비약적인 부분이 많을 수도 있겠으나,. 대략적인 흐름을 설명하고자 하는 노력이니 전공자분들이 …
Source: welcome-to-dewy-world.tistory.com
Date Published: 1/25/2021
View: 9427
[ADP] R을 활용한 단순회귀/다중회귀/다항회귀분석 실습
그리고 단순회귀분석과 다중회귀분석을 진행할 때 가정은 아래와 같다. 1, 선형성(독립변수의 변화에 따라 종속변수도 일정 크기로 변화하는가). 2.
Source: todayisbetterthanyesterday.tistory.com
Date Published: 6/14/2022
View: 9561
R을 이용한 회귀분석 – AWS
현실 세계에서 요인과 요인의 1대1 관계는 흔하지 않지만, 모델의 간명성 때문에 종종 사용함. 다중회귀 – 독립변수가 2개 이상; 이항회귀 – 종속변수가 2개 ex) 로지스틱 …
Source: rstudio-pubs-static.s3.amazonaws.com
Date Published: 1/15/2021
View: 382
다중회귀분석 실습 in R
다중회귀분석은 말 그대로 여러 개의 독립 변인을 회귀분석하는 것이다. 그러나 단일회귀분석과 달리 분석 과정에 여러 주의해야할 점이 존재한다.
Source: rython.tistory.com
Date Published: 3/5/2022
View: 2803
[R] 지도학습의 방법 : 회귀분석(Regression Analysis)
② 다중 회귀 분석(Multiple Regression Analysis). : 여러 개 독립변수가 1개의 종속변수에 미치는 영향 분석. < 연구 가설 >.
Source: kerpect.tistory.com
Date Published: 3/7/2021
View: 1934
주제와 관련된 이미지 r 다중 회귀 분석
주제와 관련된 더 많은 사진을 참조하십시오 통계데이터분석 – 회귀분석 – 다중회귀분석 🔑 multiple regression analysis | 두 개 이상의 독립변수 | 표준화계수 | 베타(beta). 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.
주제에 대한 기사 평가 r 다중 회귀 분석
- Author: 곽기영
- Views: 조회수 4,347회
- Likes: 좋아요 53개
- Date Published: 2020. 10. 19.
- Video Url link: https://www.youtube.com/watch?v=yt5vkrrAoDI
[R] Multiple linear regression (다중회귀분석)
[R] Multiple linear regression (다중회귀분석) StartBioinformaticsAndMe
Multiple linear regression (다중회귀분석)
: 다중회귀분석은 예측변수(독립변수;설명변수)가 2개 이상인 회귀분석
: 다중회귀분석에서 예측변수 개수가 많을 경우, 적절한 회귀모형 선택이 필요함
: 회귀모형에 포함되는 예측변수의 선정 기준
ㄱ) 반응변수(종속변수)와 높은 상관관계
ㄴ) 선택된 예측변수들은 서로 낮은 상관관계를 보임 (다중공선성 문제를 회피)
ㄷ) 예측변수의 개수는 적을수록 유리
Feature selection (변수 선택법)
1) All possible regressions
– 변수들의 가능한 모든 조합들로부터 최적의 모형을 찾아냄
– 유의한 변수가 누락되지 않는 안전한 방법
– 변수가 많을수록 탐색 시간이 급증함
2) Forward stepwise selection (Forward selection) – 기여도가 높은 유의한 변수부터 하나씩 추가하는 기법 – 빠른 계산이 장점 – 이미 선택된 변수는 다시 제거되지 않음
3) Backward stepwise selection (Backward elimination) – 모든 변수를 포함한 상태에서 불필요한 변수를 제거해나가는 방법 – 중요한 변수가 제외될 가능성이 매우 적음 – 이미 제외된 변수는 다시 선택되지 않음
1. 실습데이터 로딩
# MASS 패키지의 birthwt 데이터 library(MASS) str(birthwt) ‘data.frame’: 189 obs. of 10 variables: $ low : int 0 0 0 0 0 0 0 0 0 0 … $ age : int 19 33 20 21 18 21 22 17 29 26 … $ lwt : int 182 155 105 108 107 124 118 103 123 113 … $ race : int 2 3 1 1 1 3 1 3 1 1 … $ smoke: int 0 0 1 1 1 0 0 0 1 1 … $ ptl : int 0 0 0 0 0 0 0 0 0 0 … $ ht : int 0 0 0 0 0 0 0 0 0 0 … $ ui : int 1 0 0 1 1 0 0 0 0 0 … $ ftv : int 0 3 1 2 0 0 1 1 1 0 … $ bwt : int 2523 2551 2557 2594 2600 2622 2637 2637 2663 2665 …
2. 다중회귀분석 수행
■반응변수 – bwt(출생시 체중)
■예측변수 – age(엄마나이), lwt(엄마몸무게), race(인종), smoke(임신중흡연상태), ptl(과거조산횟수), ht(고혈압기왕력), ui(uterine irritability 존재여부)
# race는 연속형 변수로 인식하므로, factor(race)로 사용해야함 model_1=lm(bwt ~ age+lwt+factor(race)+smoke+ptl+ht+ui, data=birthwt) summary(model_1) Call: lm(formula = bwt ~ age + lwt + factor(race) + smoke + ptl + ht + ui, data = birthwt) Residuals: Min 1Q Median 3Q Max -1838.7 -454.5 57.6 465.1 1711.0 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 2934.132 311.450 9.421 < 2e-16 *** age -4.093 9.440 -0.434 0.665091 lwt 4.301 1.722 2.497 0.013416 * factor(race)2 -488.196 149.604 -3.263 0.001318 ** factor(race)3 -353.334 114.319 -3.091 0.002314 ** smoke -351.314 106.180 -3.309 0.001132 ** ptl -47.423 101.663 -0.466 0.641443 ht -586.836 200.841 -2.922 0.003925 ** ui -514.937 138.483 -3.718 0.000268 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 648.7 on 180 degrees of freedom Multiple R-squared: 0.2424, Adjusted R-squared: 0.2087 F-statistic: 7.197 on 8 and 180 DF, p-value: 2.908e-08 3. 유의하지 않은 변수 제거 : 위 다중회귀분석 결과에서 age와 ptl 변수가 유의하지 않은 것으로 확인됨 : 아래의 3가지 방법 중 하나로, 유의하지 않은 변수를 제거할 수 있음 1) 유의하지 않은 변수를 누락하고 회귀모형을 새롭게 정의 model_2 = lm(bwt~ lwt+factor(race)+smoke+ht+ui, data=birthwt) 2) update 함수를 사용하여, 기존 회귀모형에서 유의하지 않은 변수 제거 model_2 = update(model_1, .~. -age-ptl) 3) step 함수를 사용하여, 기존 회귀모형에서 유의하지 않은 변수를 제거해나감 model_2 = step(model_1, direction = "backward") summary(model_2) Call: lm(formula = bwt ~ lwt + factor(race) + smoke + ht + ui, data = birthwt) Residuals: Min 1Q Median 3Q Max -1842.14 -433.19 67.09 459.21 1631.03 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 2837.264 243.676 11.644 < 2e-16 *** lwt 4.242 1.675 2.532 0.012198 * factor(race)2 -475.058 145.603 -3.263 0.001318 ** factor(race)3 -348.150 112.361 -3.099 0.002254 ** smoke -356.321 103.444 -3.445 0.000710 *** ht -585.193 199.644 -2.931 0.003810 ** ui -525.524 134.675 -3.902 0.000134 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 645.9 on 182 degrees of freedom Multiple R-squared: 0.2404, Adjusted R-squared: 0.2154 F-statistic: 9.6 on 6 and 182 DF, p-value: 3.601e-09 4. 회귀모델 비교 및 평가 : F-test 분산분석으로 두 회귀모형의 설명력을 비교하여, 첫 번째 회귀모형에서 제거된 변수들의 기여도를 평가함 # anova( 제거 전 모형, 제거 후 모형 ) anova(model_1, model_2) Analysis of Variance Table Model 1: bwt ~ age + lwt + factor(race) + smoke + ptl + ht + ui Model 2: bwt ~ lwt + factor(race) + smoke + ht + ui Res.Df RSS Df Sum of Sq F Pr(>F) 1 180 75741025 2 182 75937505 -2 -196480 0.2335 0.792
: F-test 결과 p-value가 0.792로 매우 크므로, 앞서 제거된 두 변수는 회귀모형에 대한 기여도가 적음을 알 수 있음
# summary 함수로 최종 회귀모형을 평가 summary(model_2)
Call: lm(formula = bwt ~ lwt + factor(race) + smoke + ht + ui, data = birthwt) Residuals: Min 1Q Median 3Q Max -1842.14 -433.19 67.09 459.21 1631.03 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 2837.264 243.676 11.644 < 2e-16 *** lwt 4.242 1.675 2.532 0.012198 * factor(race)2 -475.058 145.603 -3.263 0.001318 ** factor(race)3 -348.150 112.361 -3.099 0.002254 ** smoke -356.321 103.444 -3.445 0.000710 *** ht -585.193 199.644 -2.931 0.003810 ** ui -525.524 134.675 -3.902 0.000134 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 645.9 on 182 degrees of freedom Multiple R-squared: 0.2404, Adjusted R-squared: 0.2154 F-statistic: 9.6 on 6 and 182 DF, p-value: 3.601e-09 : R² 값이 0.2404 → 최종 회귀모형이 예측변수들의 24.04% 설명함 5. 다중공선성(Multicollinearity) 확인 : 다중공선성은 분산팽창지수(Variation Inflation Factor;VIF)라는 통계량을 사용하여 계산 가능 : 한 예측변수에 대해 VIF의 제곱근은 다중공선성의 정도를 나타냄 : VIF가 10을 넘으면(= GVIF^(1/(2*Df)) 값이 2를 넘으면), 다중공선성 문제를 보임 # VIF값은 car 패키지의 vif() 함수로 계산 install.packages('car') library(car) vif(model_2) GVIF Df GVIF^(1/(2*Df)) lwt 1.182676 1 1.087509 factor(race) 1.257687 2 1.058993 smoke 1.154755 1 1.074595 ht 1.073548 1 1.036122 ui 1.036844 1 1.018255 : vif 함수로 완성된 회귀모형을 검사했을 때, 다중공선성 문제는 없는 것으로 확인됨 6. 변수의 상대적 중요성 : 현재까지 사용한 변수들 중에서, 결과 예측에 가장 중요한 변수를 서열화할 수 있음 # 아래 코드는 Dr. Johnson 논문에 소개된 스크립트로, 변수의 상대적 중요도를 출력함 relweights <- function(fit,...){ R <- cor(fit$model) nvar <- ncol(R) rxx <- R[2:nvar, 2:nvar] rxy <- R[2:nvar, 1] svd <- eigen(rxx) evec <- svd$vectors ev <- svd$values delta <- diag(sqrt(ev)) lambda <- evec %*% delta %*% t(evec) lambdasq <- lambda ^ 2 beta <- solve(lambda) %*% rxy rsquare <- colSums(beta ^ 2) rawwgt <- lambdasq %*% beta ^ 2 import <- (rawwgt / rsquare) * 100 import <- as.data.frame(import) row.names(import) <- names(fit$model[2:nvar]) names(import) <- "Weights" import <- import[order(import),1, drop=FALSE] dotchart(import$Weights, labels=row.names(import), xlab="% of R-Square", pch=19, main="Relative Importance of Predictor Variables", sub=paste("Total R-Square=", round(rsquare, digits=3)), ...) return(import) } # 변수의 상대적 중요도를 시각화 model_3 = lm(bwt~ lwt+race+smoke+ht+ui, data=birthwt) result = relweights(model_3, col="blue") result # ggplot2을 사용하여, 변수의 상대적 중요도를 시각화 library(ggplot2) plotRelWeights=function(fit){ data<-relweights(fit) data$Predictors<-rownames(data) p<-ggplot(data=data,aes(x=reorder(Predictors,Weights),y=Weights,fill=Predictors))+ geom_bar(stat="identity",width=0.5)+ ggtitle("Relative Importance of Predictor Variables")+ ylab(paste0("% of R-square (Total R-Square=",attr(data,"R-square"),")"))+ geom_text(aes(y=Weights-0.1,label=paste(round(Weights,1),"%")),hjust=1)+ guides(fill=FALSE)+ coord_flip() p } plotRelWeights(model_3) #Reference 1) http://rstudio-pubs-static.s3.amazonaws.com/189354_277dfb3a83a34a2abaae855b90fcf269.html 2) http://brokerstir.com/multiple-linear-regression-intuition/ 3) https://quantifyinghealth.com/stepwise-selection/ 4) https://slidesplayer.org/slide/11708770/ 5) https://rpubs.com/cardiomoon/190997 6) http://leoslife.com/archives/3874 7) Johnson(2000, Mutilvariate BehavioralResearch, 35,1-19) [R] Multiple linear regression (다중회귀분석) End BioinformaticsAndMe
R – 다중회귀분석 (Multiple Linear Regression) 결과 해석
R – 다중회귀분석 (Multiple Linear Regression)
R 을 통해 다중회귀분석을 수행하는 기본적인 절차를 포스팅합니다.
라이브러리 임포트
datarium 의 marketing 이라고 하는 데이터셋을 이용하여 다중회귀분석을 수행한다.
library ( devtools ) # install_github ( “kassambara / datarium” ) library ( tidyverse ) library ( datarium ) data ( “marketing” , package = “datarium” ) head ( marketing , 4 )
탐색적 자료분석 – 데이터 분포 살펴보기
가장 먼저 할 일은 데이터의 분포를 살펴보는 것이다.
ggplot ( data = marketing , aes ( x = newspaper , y = sales ) ) + geom_point ( size = 5 )
위와 같이 하나하나 산점도를 볼 수 있지만, 아래처럼 모든 변수들의 분포 (Variation)와 두 변수의 관계 (Covariation) 한 번에 볼 수 있도록 하는 라이브러리들이 많이 존재한다. 예를 들어, PerformanceAnalytics 라이브러리를 이용하면 아래와같이 한 번에 분포와 상관계수까지 구할 수 있다.
library ( “PerformanceAnalytics” ) chart . Correlation ( marketing , histogram = TRUE , pch = 19 )
모델 만들기
sales = b0 + b1youtube + b2facebook + b3*newspaper
분포를 봤을 때, youtube, facebook, newspaper 가 sales와 선형관계를 갖고 있다고 가정하고 위와 같이 다중 회귀 모델을 만들 수 있으며, 아래 R 코드를 통해 모델을 적합시킬 수 있다.
model <- lm(sales ~ youtube + facebook + newspaper, data = marketing) summary(model) Call: lm(formula = sales ~ youtube + facebook + newspaper, data = marketing) Residuals: Min 1Q Median 3Q Max -10.5932 -1.0690 0.2902 1.4272 3.3951 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 3.526667 0.374290 9.422 <2e-16 *** youtube 0.045765 0.001395 32.809 <2e-16 *** facebook 0.188530 0.008611 21.893 <2e-16 *** newspaper -0.001037 0.005871 -0.177 0.86 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 2.023 on 196 degrees of freedom Multiple R-squared: 0.8972, Adjusted R-squared: 0.8956 F-statistic: 570.3 on 3 and 196 DF, p-value: < 2.2e-16 결과 해석 Regression 결과를 해석하는데, 가장 먼저할 것은 F-statistics 를 확인하는 것이다. 가장 밑에 F-statistics 를 보면, p-value가 매우 작아, 최소 한 변수가 유의하다는 것을 알 수 있다. 어떤 변수가 유의한지를 확인하기 위해, 아래 coefficient table 을 보면 된다. 이 때, t-value와 p-value 는 귀무가설 평균=0 로 놓고 구한 값으로, 귀무가설로부터 얼마나 벗어난지에 관한 지표이다. X의 estimate 값은 다른 변수가 고정되어있을 때, X가 한 단위 변화했을 때, Y의 평균적인 변화량이다. 예를 들어, youtube의 estimate 는 0.04 인데, 이는 youtube 가 1 변화했을 때, sales의 평균적인 변화량이다. newpaper 의 경우, p-value > 0.05 이므로 이러한 estimate 의 값이 유의하지 않다는 것을 알 수 있다.
t value 와 p-value 는 무엇인가?
$$ H_0 : \beta = 0 $$
$$ t = \frac{\hat{\beta}}{se(\hat{\beta})} $$
이 때 위의 t 값은 자유도가 n-2 인 t 분포를 따른다. (이렇게 되는 이유)
p-value는 이렇게 계수 추정치가 t 분포를 따른다는 사실을 이용해서 구한 값이다.
결정계수와 F-stat
다음과 같이 정의해보자.
$$ SSE = \sum^{n}_{i=1}{(y_i – \hat{y})^2} $$
$$ SSR = \sum^{n}_{i=1}{(\bar{y} – \hat{y_i})^2} $$
$$ SST = \sum^{n}_{i=1}{(y_i – \bar{y})^2} $$
이 때, 각각의 통계량에 대한 자유도는 아래와 같다.
df(SSE) : n-p
df(SSR) : p-1
df(SST) : n-1
이 때, p는 intercept를 포함한 모델의 총 파라미터의 갯수이며, n은 샘플 수이다.
$$ MSE = \sum^{n}_{i=1}{(y_i – \hat{y})^2} / (n-p) $$
$$ MSR = \sum^{n}_{i=1}{(\bar{y} – \hat{y_i})^2} / (p-1) $$
$$ MST = \sum^{n}_{i=1}{(y_i – \bar{y})^2} / (n-1) $$
귀무가설을 아래와 같이 설정하자
$$ H_0 : \beta_1 = \beta_2 = \beta_3 = … = \beta_{p-1} $$
이 때,
$$ \frac{MSE}{MSR} \sim F(n-p, p-1) $$
이를 통해 F-stat 과 p-value를 구할 수 있다. 이 값은 (explained variance) / (unexplained variance) 가 F-stat 을 따른다는 사실을 이용한 검정 방법이라고 할 수 있다. 왜 이렇게 되는지에 대해서는 이 링크를 참고.
결정계수 (Coefficient of determination, Rsquare)
결정계수는 아래와 같이 정의되며, 전체 분산 중 모델에의해 설명되는 분산의 양을 의미한다.
$$ R^2 = \frac{SSR}{SST} $$
adjusted 결정계수를 사용하기도 하는데, 이는 아래와 같이 정의된다.
$$ \bar{R^2} = 1-(1-R^2) \frac {n-1}{n-p} $$
적합된 모델의 계수
summary ( model ) $coefficient
Estimate Std. Error t value Pr(>|t|) (Intercept) 3.526667243 0.374289884 9.4222884 1.267295e-17 youtube 0.045764645 0.001394897 32.8086244 1.509960e-81 facebook 0.188530017 0.008611234 21.8934961 1.505339e-54 newspaper -0.001037493 0.005871010 -0.1767146 8.599151e-01
새로운 모델을 아래와 같이 구할 수 있다. sales = 3.5 + 0.045youtube + 0.187facebook.
새로운 모델
model < - lm ( sales ~ youtube + facebook , data = marketing ) summary ( model ) Call: lm(formula = sales ~ youtube + facebook, data = marketing) Residuals: Min 1Q Median 3Q Max -10.5572 -1.0502 0.2906 1.4049 3.3994 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 3.50532 0.35339 9.919 <2e-16 *** youtube 0.04575 0.00139 32.909 <2e-16 *** facebook 0.18799 0.00804 23.382 <2e-16 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 2.018 on 197 degrees of freedom Multiple R-squared: 0.8972, Adjusted R-squared: 0.8962 F-statistic: 859.6 on 2 and 197 DF, p-value: < 2.2e-16 신뢰구간 confint ( model ) 2.5 % 97.5 % (Intercept) 2.80841159 4.20222820 youtube 0.04301292 0.04849671 faceb ook 0.17213877 0.20 384 969 위와 같이 계수의 신뢰구간을 출력할 수도 있다. 이는 t 분포를 이용한다.
(R) 다중회귀분석 이해하기
test_vif1.csv 0.00MB test_vif2.csv 0.00MB
※ 전공자가 아니기 때문에 비약적인 부분이 많을 수도 있겠으나,
대략적인 흐름을 설명하고자 하는 노력이니 전공자분들이 hoxy나 이 글을 보고 오류를 찾는다면 알려주시길 바람.
회귀분석에서 검정이 필요한 이유
우리가 회귀분석을 하는 이유가 애초에 무엇인지 생각해보자. 우리는 일정한 패턴을 갖는 데이터들로 하여금 (선형적인) 식을 만들어 그와 비슷한 데이터를 새롭게 입력받은 경우에도 문제를 해결, 혹은 예측하고자 회귀분석을 한다. 위의 데이터들을 이용하여 다음과 같은 함수를 R에서 구현해보자.
test_vif1
1 2 3 4 5 6 7 8 9 10 11 12 13 library (car) # vif 함수용 test < - read.csv( 'c:/data/test_vif1.csv' ) test # test에 있는 학생정보는 불필요하므로 제외 test < - test[ - 1 ] # 회귀 모델 생성 regression_model < - lm(test$시험점수~.,data = test) summary(regression_model) # 팽창계수 확인 vif(regression_model) cs 회귀 모델 요약 test_vif1은 시험점수, 아이큐, 공부시간에 대한 컬럼이 존재하는 데이터로 다중회귀분석에 해당하는 데이터이다. 종속변수(Y), 즉 (예측)결과인 시험점수는 독립변수(X)인 아이큐와 공부시간에 의해 나타낼 수 있다. 내가 방금 한 말을 요약하자면 아이큐와 공부시간에 의해 시험점수를 나타낼 수 있다는 것이다. 그런데 왜 굳이 회귀식을 만들어 놓고선 summary를 하고 그것을 굳이굳이 캡쳐까지 해서 올려놓은것일까? 그것에 대해 이제부터 설명하도록 하겠다. 우선 위의 그림에서 Coefficients(계수) 테이블 중 t value와 Pr(>|t|) 를 보자.
우리가 t-value와 p-value(Pr(>|t|)의 값을 보는 이유는, 이 독립변수들이 정말 회귀식을 구성하는데 필요한지에 대해 보기 위해서이다. 그리고 t-value와 p-value를 이해하기 위해서는 귀무가설과 대립가설 에 대해 이해할 필요가 있다. 더 디테일한 내용에 대해서는 구글링 (크흡 비전공자라 미안해…) 을 하길 바란다.
다중 회귀식
t value : 잔차를 표준편차로 나눈값
t value의 귀무가설은 α_i(회귀계수) = 0 이다. 즉, 귀무가설을 만족한다는 것은 회귀계수 = 0 을 만족하는 것이고 이 말은 즉슨, 주어진 데이터인 X가 종속변수(Y)에 영향을 미치지 않는다는 것을 의미한다. 결국에는 쓸모 없는 데이터란 말이다. t value를 구하는 방법은 구글링을 통해 찾아보는 것을 추천한다.
Pr(>|t|) : p value
Pr(>|t|)는 p value를 의미하고 p value는 위에 구한 t value값을 기준에 해당하는 값(|t|)과 비교하여 나타낸 값으로, 이 값은 유의수준에 적합하면 할수록, 즉 0.05보다 작고 0에 가까울수록 매우 유의미한 데이터라고 인식하고 0.05보다 크면 불필요한 데이터에 가깝다고 인식한다. 위의 summary를 보면 p value 값 옆에 * 표시들이 있는데 *이 많을수록 유의미한 데이터임을 나타낸다.
이렇게 t value와 p value를 통해 1차적으로 독립변수가 회귀식에 필요한지 아닌지를 우선적으로 판단한다.
test_vif1 데이터에서 아이큐와 공부시간은 귀무가설을 기각하기 때문에 회귀식에 필요한 독립변수임을 알 수 있다.
test_vif2
1 2 3 4 5 6 7 8 9 10 11 12 13 library (car) # vif 함수용 test < - read.csv( 'c:/data/test_vif2.csv' ) test # test에 있는 학생정보는 불필요하므로 제외 test < - test[ - 1 ] # 회귀 모델 생성 regression_model < - lm(test$시험점수~.,data = test) summary(regression_model) # 팽창계수 확인 vif(regression_model) cs 회귀 모델 요약 위의 test_vif1와 같은 방식으로 회귀 모델을 요약해보았다. test_vif2의 컬럼에는 등급평균이 추가되었다. 위의 summary를 보면 아이큐와 등급평균의 p value 값이 유의수준 0.05보다 크다는 것을 알 수 있다. 이것은 결론적으로 회귀식에서 아이큐와 등급평균이 유의미하지 않다는 것을 의미한다. 어떻게 이런 일이 생긴걸까? 등급평균 하나만 추가한건데 말이다! 이러한 경우, 아이큐와 등급평균 두 개의 데이터는 불필요해진다. 하지만 정말 과연 그럴까? 어떻게 아이큐와 공부시간만 있을 때는 2개의 독립변수로 나타내지는 다중회귀식이 만들어지는데 지금과 같은 경우는 오직 공부시간에만 영향을 받는 단순선형회귀식이 되어버린걸까? 또한 단순선형회귀식이 된다면 이전의 회귀모델보다 데이터의 정확도가 떨어지게 될 것이다. (아니 어떻게 모은 데이터인데 안 모으니만 못하다니 이게 뭔소리야!!!!) 이러한 경우를 위해 우리는 팽창계수를 확인한다. 팽창계수(vif) 팽창계수 확인 위의 팽창계수를 보자. 아이큐와 등급평균이 22, 19로 매우 높은 값을 나타낸다는 것을 알 수 있다. 이렇게 팽창계수가 높다는 것은 다중공선성이 있다는 뜻이고, 다중공선성이 있다 함은 독립변수들 중에 서로 영향을 주는 것이 있다는 뜻이다. 서로 영향을 주는데 그게 어떻게 독립변수겠는가? 따라서 우리는 서로 영향을 주는 변수들 중 하나만을 남겨 독립변수로서의 성능을 할 수 있도록 해줘야한다. 팽창계수를 확인하여 독립변수인지 아닌지를 판단하는 방법에 대해서, 현업 기준으로는 팽창계수가 보통 10보다 큰 것을 골라내고, 엄격하게는 5보다 큰 것, 느슨하게는 15~20보다 큰 것을 골라낸다. 위의 데이터에서는 아이큐와 등급평균이 기준 이상이므로 둘 중 하나만을 지워야 한다. 어떤 변수를 지워야할까? 결론은 팽창계수가 큰 것부터 없애야한다 이다. 현재 test_vif2의 데이터 같은 경우는 컬럼이 고작 3개 뿐이기 때문에 팽창계수가 큰 아이큐와 등급평균이 서로 영향을 준다는 것을 알 수 있다. 하지만 만약 컬럼이 30개라면? 그 이상이라면? 팽창계수가 큰 것이 10개 이상이라면? 우리는 어떤 컬럼들이 서로에게 영향을 주는지 알 수 없다. 그렇기 때문에 우선적으로 팽창계수가 가장 큰 컬럼부터 지워나가며 다시 회귀모델을 만들고, 또 거기서 팽창계수가 큰 것을 지워나가는 것을 반복하며 회귀모델을 만들어가야 한다. +) 전공생분과의 대화를 통해서 알게 된 사실은 팽창계수 뿐만 아니라 상관관계로도 판단할 수 있다! 다만 상관관계로 판단하기에는 컬럼이 너무 많아서 눈에 쉽게 안 들어오니까 쉬운게 좋은 나는 대체로 팽창계수가 큰 것부터 없애는 방향으로 하려고 했는데, 노력을 조금 더 해서 정확도를 높이고자 하면 상관관계가 있는 변수들을 파악하여 그 중에서 종속변수와 연관성이 더 높은 변수를 살리는 것이 좋다. 이것은 개인의 판단이자 몫이니 참고하길 바란다! 결론 정확도가 높은 회귀 모델을 만들기 위해서는 1. p value로 독립변수(컬럼)가 회귀식에 필요한지 아닌지를 우선적으로 판단 2. 만약 p value에서 귀무가설을 기각하지 않는다면 팽창계수(vif)를 확인하여 다중공선성이 있는 독립변수(컬럼)를 하나씩 지워나감 OR 상관계수로 파악하여 서로 영향을 주는 변수를 파악하고, Y(종속변수)와 상관관계가 비교적 작은 독립변수를 하나씩 지워나감
[ADP] R을 활용한 단순회귀
회귀 분석은 하나 또는 그이상의 변수들이 다른 변수에 미치는 영향을 추론하는 통계기법이다. 통계에서 영향을 받는 변수를 종속변수 혹은 반응변수라고 하고 이는 y로 표기한다. 그리고 영향을 주는 변수를 독립변수 혹은 설명변수라고 하고 x,x_1,x_2 등으로 표기한다.
그리고 단순회귀분석과 다중회귀분석을 진행할 때 가정은 아래와 같다.
1, 선형성(독립변수의 변화에 따라 종속변수도 일정 크기로 변화하는가)
2. 독립성(잔차와 독립변수의 값이 관련되어 있지 않은가)
3. 등분산성(독립변수의 모든 값에 대해 오차들의 분산이 일정한가)
4. 비상관성(관측치들의 잔차들끼리 상관이 없는가)
5. 정상성(잔차항이 정규분포를 이루는가)
이러한 가정을 두고 회귀분석을 진행하기에, 회귀분석의 결과를 검토할 때, 이러한 가정들이 충족되는지 확인할 필요가 있다.
1) 단순회귀분석
설명 : 설명변수가 1개이며 반응변수와 관계가 직선이다.
형태 : Y = b0 + b1X + e
실습
# 임의의 데이터셋 생성 set.seed(2) x = runif(10,0,11) y = 2 + 3*x + rnorm(10,0,0.2) dfrm = data.frame(x,y) dfrm
# 회귀모델 적합 lm(y~x, data=dfrm)
결과 : y = 2.213 + 2.979x
2) 다중회귀분석
설명 : 설명변수가 k개이며 반응변수와 관계가 선형이다.
형태 : Y = b0 + b1X1 + b2X2 + … + bkXk + e
실습
# 임의의 데이터셋 생성 set.seed(2) u = runif(10,0,11) v = runif(10,11,20) w = runif(10,1,30) y = 3 + 0.1*u + 2*v – 3*w + rnorm(10,0,0.2) dfrm = data.frame(y,u,v,w) dfrm
# 회귀모델 적합 lm(formula = y ~ u + v + w)
결과 : y = 3.0833 + 0.1463u + 1.9780v – 2.9956w
기술통계량 확인
# 모델 변수로 생성 model <- lm(formula = y ~ u + v + w) model # summary를 통한 OLS표 summary(model) 설명 : 이를 통해 확인해본 결과 F통계량은 2.59e+04고 p-value는 1.007e-12로 유의수준 5%하에서 회귀모형이 매우 유의함을 확인할 수 있다. 그리고 결정계수와 조정된 결정계수(R-squeared, Adjusted R-squared)는 0.9999.로 이 회귀식이 데이터들을 매우 잘 설명함을 볼 수 있다. 그리고 u,v,w와 같은 개별 회귀계수의 p-value 또한 0.01조차 안되는 것으로 보아 통계적으로 유의하다. 3) 다항회귀분석 설명 : 설명변수가 k개이며 반응변수와 관계가 1치힘수 이상이다. 형태 : Y = b0 + b1X1 + b2X2 + b11(X1)^2+ b22(X2)^2 + b12(X1X2)+ e 실습 # cars 데이터를 이용한 다항회귀분석 진행 data(cars) head(cars) cars데이터는 speed와 dist변수로 이루어져있다. dist가 속도의 변화에 따라 어떻게 변하는지 확인하는 과정을 진행한다. # speed^2 변수를 추가 speed2 <- cars$speed^2 cars <- cbind(speed2,cars) head(cars) # 회귀모델 적합 lm(formula = dist ~ speed + speed2, data = cars) 결과 : dist = 2.47014 + 0.91329speed + 0.09996speed^2 # 모델 변수로 생성 model <- lm(formula = dist ~ speed + speed2, data = cars) model # summary를 통한 OLS표 summary(model) 설명 : 위의 OLS 결과를 보면 R-Squared 는 0.6673으로 모델의 설명력이 66퍼정도 된다는 소리이다. 완벽하지는 않다. 그리고 speed와 speed^2의 p-value또한 유의수준 0.05를 넘기때문에 모델이 유의하지 않다는 것을 확인할 수 있다. 현실에서는 단순/다중/다항 회귀분석으로 해결이 안되는 데이터가 많다. 하지만, 동시에 많은 데이터들이 과적합의 문제없이 단순/다중/다항 회귀분석을 통해서 검정이 수월하게 잘 된다. 위의 자료는 속도와 거리간의 관계를 확인하는데 있어서 잘못된 모델을 사용하여 유의성이 없는 것으로 판단할 수 있다. 데이터 분석의 목적에 따라 적절한 모델을 사용하는 것도 분석가의 능력이다. 단순/다중/다항회귀분석은 통계의 기본이니 꼭 학습을 할 필요성은 있다. # plot plot(model)
R을 이용한 회귀분석
1.3 다중선형회귀분석
독립변수가 2개 이상인 회귀분석
1.3.1 데이터 준비 autopart 데이터 이용 autopart= read.csv ( “data/autoparts.csv” ) autopart1=autopart[autopart $ prod_no == “90784-76001” , c ( 2 : 11 )] autopart2=autopart1[autopart1 $ c_thickness < 1000 ,] 1.3.2 데이터 확인 head (autopart2) ## fix_time a_speed b_speed separation s_separation rate_terms mpa ## 1 85.5 0.611 1.715 242.0 657.6 95 78.2 ## 2 86.2 0.606 1.708 244.7 657.1 95 77.9 ## 3 86.0 0.609 1.715 242.7 657.5 95 78.0 ## 4 86.1 0.610 1.718 241.9 657.3 95 78.2 ## 5 86.1 0.603 1.704 242.5 657.3 95 77.9 ## 6 86.3 0.606 1.707 244.5 656.9 95 77.9 ## load_time highpressure_time c_thickness ## 1 18.1 58 24.7 ## 2 18.2 58 22.5 ## 3 18.1 82 24.1 ## 4 18.1 74 25.1 ## 5 18.2 56 24.5 ## 6 18.0 78 22.9 summary (autopart2) ## fix_time a_speed b_speed separation ## Min. : 1.00 Min. :0.4570 Min. :1.240 Min. :141.6 ## 1st Qu.: 81.00 1st Qu.:0.5980 1st Qu.:1.597 1st Qu.:185.9 ## Median : 82.10 Median :0.6090 Median :1.640 Median :190.7 ## Mean : 83.14 Mean :0.6189 Mean :1.644 Mean :214.5 ## 3rd Qu.: 85.40 3rd Qu.:0.6520 3rd Qu.:1.676 3rd Qu.:248.7 ## Max. :148.60 Max. :0.8080 Max. :2.528 Max. :294.5 ## s_separation rate_terms mpa load_time ## Min. :623.3 Min. :76.00 Min. :24.80 Min. : 0.00 ## 1st Qu.:651.6 1st Qu.:81.00 1st Qu.:75.30 1st Qu.:18.10 ## Median :710.3 Median :85.00 Median :76.60 Median :19.20 ## Mean :685.9 Mean :84.54 Mean :74.21 Mean :18.68 ## 3rd Qu.:713.6 3rd Qu.:87.00 3rd Qu.:78.10 3rd Qu.:19.20 ## Max. :747.3 Max. :97.00 Max. :82.10 Max. :22.30 ## highpressure_time c_thickness ## Min. : 37.00 Min. : 0.30 ## 1st Qu.: 60.00 1st Qu.:21.80 ## Median : 67.00 Median :23.80 ## Mean : 96.38 Mean :23.84 ## 3rd Qu.: 72.00 3rd Qu.:25.40 ## Max. :65534.00 Max. :65.60 1.3.3 모델 생성 및 검정 leg= lm (c_thickness ~ fix_time + a_speed, data= autopart2) leg2= lm (c_thickness ~ ., data= autopart2) # full model summary (leg2) ## ## Call: ## lm(formula = c_thickness ~ ., data = autopart2) ## ## Residuals: ## Min 1Q Median 3Q Max ## -24.8428 -0.6105 -0.0214 0.5606 29.6508 ## ## Coefficients: ## Estimate Std. Error t value Pr(>|t|) ## (Intercept) 7.146e+02 3.367e+00 212.225 < 2e-16 *** ## fix_time 6.010e-02 5.331e-03 11.273 < 2e-16 *** ## a_speed -1.738e+01 4.223e-01 -41.152 < 2e-16 *** ## b_speed 1.952e+00 1.516e-01 12.876 < 2e-16 *** ## separation -7.592e-01 3.635e-03 -208.873 < 2e-16 *** ## s_separation -7.468e-01 3.673e-03 -203.317 < 2e-16 *** ## rate_terms 1.133e-02 3.597e-03 3.151 0.00163 ** ## mpa -1.520e-01 1.458e-03 -104.253 < 2e-16 *** ## load_time -1.523e-01 8.381e-03 -18.171 < 2e-16 *** ## highpressure_time -2.174e-05 8.738e-06 -2.488 0.01284 * ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ## ## Residual standard error: 1.796 on 21757 degrees of freedom ## Multiple R-squared: 0.7841, Adjusted R-squared: 0.784 ## F-statistic: 8782 on 9 and 21757 DF, p-value: < 2.2e-16 모형의 유의성 : f-statistic / p-value 역시 0.05 수준에서 유의하다. 계수의 유의성 : 계수들은 유의 수준 0.05 수준에서 모두 유의하다. 모형의 설명력 : Adjusted R-squared : 0.784정도로 78% 정도 설명 가능하다. 1.3.4 잔차 분석 par ( mfrow= c ( 2 , 2 )) plot (leg2) 1번 그림 왼쪽영역이 오른쪽 영역보다 몰려있고, 두 영역의 모습이 서로 달라 등분산을 이루지 않음 잔차는 등분산성을 만족하여야 한다. 잔차에 일정한 패턴이 있다면, 모델 수정이 필요하다. 2번 그림(Q-Q plot) 잔차의 정규성 직선이여야 좋은 형태 3번 그림 (표준화 잔차) 기울기가 0인 직선이 이상적 4번 그림 왼쪽 가운데 몰려있어야 이상적 1.3.5 예측 new.data= data.frame ( fix_time= c ( 86.1 , 86.1 ), a_speed= c ( 0.610 , 0.603 ), b_speed= c ( 1.718 , 1.704 ), separation= c ( 241.9 , 242.5 ), s_separation= c ( 657.3 , 657.3 ), rate_terms= c ( 95 , 95 ), mpa= c ( 78.2 , 77.9 ), load_time= c ( 18.1 , 18.2 ), highpressure_time= c ( 74 , 56 )) predict (leg2, newdata= new.data) ## 1 2 ## 24.42798 24.09751
다중회귀분석 실습 in R
다중회귀분석은 말 그대로 여러 개의 독립 변인을 회귀분석하는 것이다. 그러나 단일회귀분석과 달리 분석 과정에 여러 주의해야할 점이 존재한다. 글을 보기 전, 회귀계수와 오차항의 정의 정도는 알아두고 가자. 회귀계수는 위 사진에서 beta들, 오차항은 epsilon이다. 즉 회귀계수의 절댓값이 커질수록 독립 변인이 종속 변인에 미치는 영향은 지대해진다.
R 코드를 보며 차차 정리하겠다. csv는 첨부파일에 올려두겠다.
autompg.csv 0.02MB
car<-read.csv("autompg.csv") attach(car) # multiple regression : 1st full model model1<-lm(mpg ~ disp+hp+wt+accler, data=car) summary(model1) 다음과 같이 car dataframe을 만들었다. model <- lm(종속변인 ~ 독립변인, 데이터) 문법으로 다중회귀분석을 할 수 있다. 이를 summary하면 다음과 같다. Residuals: Min 1Q Median 3Q Max -11.8331 -2.8735 -0.3164 2.4449 16.2079 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 40.8838025 1.9966258 20.476 < 2e-16 *** disp -0.0106291 0.0065254 -1.629 0.1041 hp 0.0047774 0.0082597 0.578 0.5633 wt -0.0061405 0.0007449 -8.243 2.54e-15 *** accler 0.1722165 0.0976340 1.764 0.0785 . --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 4.298 on 393 degrees of freedom Multiple R-squared: 0.7006, Adjusted R-squared: 0.6976 F-statistic: 230 on 4 and 393 DF, p-value: < 2.2e-16 나머지는 차차 설명하도록 하고, Coefficents를 먼저 본다. Intercept는 y절편이고, Estimate가 각 독립변인의 회귀계수다. Multiple R-squared이 결정계수, Adjusted R-squared이 결정계수를 보정한 값이다. 각각의 지표에 대한 자세한 설명은 다른 포스팅에서 서술하도록 하겠다. 우선 p-value for t-test-value for t-test가 작을수록 통계학적으로 유의하므로, Pr(>|t|) 수치로 유의성을 따져 Estimate의 신뢰성을 매겨야 한다. 그 뒤 유의하다고 판단된 Estimate의 값으로 종속변인과 독립변인 간 관계를 생각한다.
한편, 이 모델에는 직관적으로 문제가 있다. hp는 마력인데, 마력이 증가함에 따라 연비가 감소해야 함에도 불구하고 모델은 마력과 연비에 양의 관계가 있다고 해석하였다. 이것이 바로 추가적인 점검이 필요한 이유다.
var1<-c("mpg","disp","hp","wt", "accler" ) pairs(car[var1], main ="Autompg",cex=1, col=as.integer(car$cyl)) 이렇게 pairs로 산점도행렬을 그렸을 때 mpg와 hp의 관계에서 두 군집을 발견할 수 있다. 분명히 두 군집 모두 음의 관계를 보임에도 단 하나의 선만으로 이 두 군집을 표현하려다보니 양의 관계가 나타난 것이다. 이를 해결하기 위해서, 두 군집을 분리할 필요가 있다. hp를 50을 기준으로 나눠보자. car_s1<-subset(car, hp<50) rf1<-lm(mpg ~ disp+hp+wt+accler, data=car_s1) summary(rf1) 결과는 생략한다. 한편, 독립변인들의 수가 클 때 회귀 모델에 사용할 독립변인들을 선택해야 하는 경우가 많다. 시간복잡도도 한 이유가 될 수 있고, 설명력이 높지 않은 변인들이 모델의 실질적인 정확성을 떨어뜨리는 경우가 발생하기 때문이다. 이때 다중회귀모델에서는 보통 3가지 방법을 사용한다. forward selection, backward elimination, stepwise method가 그것들이다. 1. backward elimination 모든 변수에서 가장 통계적으로 유의하지 않은 변수를 하나씩 제거하는 방법이다. 여러 개를 한 번에 제거할 경우 다중공선성에 의해 실제로 통계적으로 유의하지 않은 변수가 유의하다고 판별될 수 있기 때문이다. 그 후 모든 변수가 유의하다고 판별되었을 때 선택을 완료한다. 2. forward selection 0개의 독립변인으로부터 시작해 가장 모델의 설명력을 높이는 변수를 추가하다가, 더 이상 설명력을 높일 수 없는 변수만이 남았을 때 선택을 완료한다. 3. stepwise method 1, 2보다 이 방법을 강력히 추천한다. backward elimination, forward selection을 모두 수행하며 최적의 그룹을 찾는 방법이다. R에서는 forward selection에서 시작하여 변인들을 조정해간다. 이때 최저 AIC값을 갖는 변인들의 조합을 최종적으로 선택한다. 또는 유의한 변인들만 남기기도 한다. 이는 내부 파라미터 설정에 달려있다. AIC를 간략히 설명하면 아래와 같다. Akaike information criterion https://towardsdatascience.com/the-akaike-information-criterion-c20c8fd832f2 parameter가 적으면 적을수록, likelihood function의 maximum이 클수록 값이 작아진다. 즉 AIC가 작은 모델이 좋다고 생각하면 된다. R코드는 다음과 같다. step(rf1, direction="both") backward elimination은 direction="backward", forward selection은 direction="forward", stepwise method는 direction="both"를 사용하면 된다. 첫 포스팅이라 미숙한 점이 많지만, 팀블로그가 점점 발전할 수 있길 바란다. 다음 포스팅은 선형회귀의 가정을 다룰 것이고, 실제 통계활용대회용 데이터를 사용할 것이다. Written By Killer T Cell
[R] 지도학습의 방법 : 회귀분석(Regression Analysis)
728×90
반응형
지도학습(Supervised Learning)
– 인간 개입에 의한 분석 방법
– 종속 변수(y) 존재 : 입력 데이터에 정답 포함
– 분석 방법 : 가설검정(확률/통계) → 인문.사회.심리 계열(300년)
– 분석 유형 : 회귀분석, 분류분석, 시계열 분석 → 추론통계 기반
회귀분석(Regression Analysis) – 인과 관계
: 여러 자료들 간의 관계성을 수학적으로 추정, 설명한다. 흔히들 통계학의 꽃이라고 합니다. 독립변인이 종속변인에 영향을 미치는지 알아보고자 할 때 실시하는 분석 방법입니다. 선형 회귀법, 로지스틱 회귀법이 대표적이며, 로지스틱 회귀법을 앙상블했다는 관점으로 보면 인공신경망도 여기에 해당한다고 합니다. 선형 회귀법은 지도학습의 회귀문제를 푸는 데에 쓰이고(새로운 값의 예측), 로지스틱 회귀법과 인공신경망은 지도학습의 분류문제를 푸는데에 주로 사용합니다.
– 결과값을 알려주고, 가설을 일차 함수로 정의한 것으로 데이터(독립변수)를 넣어서 분석 시킴
ex) y = ax + b / x( 독립 변수 : 영향을 주는 변수) , y ( 종속 변수 : 영향을 받는 변수 )
– 원인을 일으키는 x변수와 결과를 보여주는 y 변수의 관계
– 모든 데이터들은 선형성을 띈다.
y = ax + b : 입력받은 x와 y 값을 가지고 오차를 최소화하는 a와 b의 값 찾는 과정
회귀분석의 역사 – 평균으로의 회귀
특징)
– 변수들 사이의 인과관계를 규명하고자 하는 분석방법이기 때문에 변수의 역할설정이 중요합니다.
(주의)
신문을 보는 시간이 TV를 시청하는 시간에 어떤 영향을 미치는가?’라는 물음에서 ‘신문을 보는 시간’은 원인변수에 해당하고 ‘TV를 시청하는 시간’은 결과변수입니다. 이를 뒤바꾸어 ‘TV를 시청하는 시간’을 원인변수 로 하고 ‘신문을 보는 시간’을 결과변수로 한다면 원래 의도했던 연구목적에 위배되는 것입니다.
특정 변수(독립변수)가 다른 변수(종속변수)에 어떠한 영향을 미치는가 (인과관계 분석)
예) 가격은 제품 만족도에 영향을 미치는가?
– 한 변수의 값으로 다른 변수의 값 예언
인과관계(因果關係) : 변수A가 변수B의 값이 변하는 원인이 되는 관계(변수A : 독립변수, 변수B : 종속변수)
– 회귀 방정식(Y=a+βX → Y:종속변수, a:상수, β:회귀계수, X:독립변수)을 도출하여 회귀선 추정
선형 회귀 방정식(1차 함수) : 회귀선 추정
회귀계수(β) : 단위시간에 따라 변하는 양(기울기)이며, 회귀선을 추정함에 있어 최소자승법 이용
Y= a + b*X (Y : 종속변수, a : 절편, b : 기울기, X : 독립변수)
회귀방정식에 의해서 x가 10일 때 y는 20 예측 -> 회귀분석은 수치 예측
– 최소자승법 적용 회귀선
: 회귀방정식에 의해서 그려진 y의 추세선, 산포도 각 점의 위치를 기준으로 정중앙 통과하는 회귀선 추정 방법
– 산포도에 위치한 각 점에서 회귀선에 수직으로 이르는 값의 제곱의 합 최소가 되는 선(정중앙을 통과하는 직선)을
최적의 회귀선으로 추정
– 독립변수와 종속변수가 모두 등간척도 또는 비율척도 구성
– 상관 관계 분석 : 변수 간의 관련성 분석
– 회귀 분석 : 변수 간의 인과관계 분석
– 회귀분석의 기본 가정 충족
① 선형성 : 독립변수와 종속변수가 선형적 이어야한다. (회귀선 확인)
② 오차(잔차)의 정규성 : 오차(잔차) 란 종속변수의 관측값과 예측값 간의 차이를 말하며, 오차(잔차)의 기대값은 0이며,
정규분포를 이루어야한다. (정규성 검정 확인)
③ 오차의 독립성 : 오차들은 서로 독립적 이어야한다. (더빈-왓슨 값 확인)
④ 오차의 등분산성 : 오차들의 분산이 일정해야한다. (표준잔차와 표준예측치 도표)
⑤ 다중공선성 : 다중 회귀분석을 수행할 경우 3개 이상의 독립변수들 간의 강한 상관관계로 인한 문제가 발생되지
않아야 한다.(분산팽창요인(VIF) 확인)
– 입력으로 사용되어지는 독립변수의 독립성이 상호의존성이 높을 때 회기 분석의 결과를
신뢰할 수 없는 피드백이 나온다.
회귀모형의 형태
1) 단순(단일) 회귀 분석(Simple Regression Analysis) : 하나의 종속변수에 대해 독립변수가 하나인 경우
2) 다중 회귀 분석(Multiple Regression Analysis) : 하나의 종속변수에 대해 독립변수가 둘 이상인 경우
3) 로지스틱 회귀분석(Logistic Regression) : 분류 분석, 독립변수 -> 종속변수(분류)
회귀분석을 통해 알 수 있는 것
1) 종속변수와 독립변수 간에 선형관계가 존재하는지 알 수 있습니다.
2) 종속변수에 영향을 미치는 독립변수가 유의 한지와 영향력의 정도를 알 수 있습니다.
3) 추정된 회귀모형을 통해 종속변수의 예측치를 알 수 있습니다.
*경사하강법 : 실체 관찰치 값과 예측 값 사이의 값의 오차 = (관측치 – 예측값 = 잔차(제곱하여 음수 제거)) , 그 값의 최소의 값을 찾는 것 = 경사하강법(2차 함수 형태 = 최소값 기울기 0일 때)
① 단순(단일) 회귀 분석(Simple Regression Analysis)
– 독립변수와 종속변수 각각 1개
– 독립변수(원인 제공자)가 종속변수(영향을 받는 자)에 미치는 인과관계 분석
< 연구 가설 >
– 연구가설(H1) : 음료수 제품의 당도와 가격수준을 결정하는 제품 적절성(독립변수)은 제품 만족도(종속변수)에 정(正)의 영향을 미친다.
– 귀무가설(H0) : 음료수 제품의 당도와 가격수준을 결정하는 제품 적절성은 제품의 만족도에 영향을 미치지 않는다.
연구모델 : 제품 적절성(독립변수) -> 제품 만족도(종속변수)
위의 데이터를 통해서 살펴보도록 하겠습니다.
– 데이터 전처리 (data.frame 데이터 생성)
str(product) # ‘data.frame’: 264 obs. of 3 variables: – 출력값 – ‘data.frame’: 264 obs. of 3 variables: $ 제품_친밀도: int 3 3 4 2 2 3 4 2 3 4 … $ 제품_적절성: int 4 3 4 2 2 3 4 2 2 2 … $ 제품_만족도: int 3 2 4 2 2 3 4 2 3 3 … y = product$제품_만족도 # 종속변수 x = product$제품_적절성 # 독립변수 df <- data.frame(x, y) - 출력값 - x y 1 4 3 2 3 2 3 4 4 4 2 2 5 2 2 6 3 3 - 회귀모델 생성 result.lm <- lm(formula=y ~ x, data=df) #lm(leaning machine) = lm ( formuly= 종속변수 ~ 독립변수 , data = 데이타 셋 ) result.lm # 회귀계수 ( 절편과 기울기 ) lm : 회귀 모델 생성 ( * 알고리즘 관련 함수 저장 pakage = stats ) 오차가 최소가 되어지는 값을 lm 을 통해서 출력준 값입니다. - 오차를 최소화 해주는 기울기 : 0.7393 , 절편 : 0.7789 결과 : y = 0.7393x + 0.7789 - 모델의 적합값과 잔차 보기 names(result.lm) - 출력값 - [1] "coefficients" "residuals" "effects" "rank" "fitted.values" "assign" [7] "qr" "df.residual" "xlevels" "call" "terms" "model" fitted.values(result.lm)[1:2] - 출력값 - 1 2 3.735963 2.996687 head(df, 1) - 출력값 - x y 1 4 3 Y = 0.7789 + 0.7393 * 4 Y 출력값 : 3.7361 - 회귀방정식에 의해서 계산된 적합값 # 오차(잔차:error) = Y관측값 - Y적합값 3-3.735963 출력값 : -0.735963 residuals(result.lm)[1:2] # 모델의 잔차 출력 - 출력값 - 1 2 -0.7359630 -0.9966869 -0.7359630 + 3.735963 출력값 : 3 # 잔차 + 적합값 = 관측값 - 선형회귀분석 모델 시각화[오류 확인] ① x, y 산점도 그리기 x11() plot(formula=y ~ x, data=df) ② 회귀분석 + 회귀선 result.lm <- lm(formula=y ~ x, data=df) abline(result.lm, col='red') # 회귀선 - 선형회귀 분석 결과 보기 summary(result.lm) <회귀분석 결과 해석>
결정계수(Coefficients) : R-squared -> 0 ~ 1 사이의 값을 갖는다.
Multiple R-squared: 0.5881: 독립변수에 의해서 종속변수가 얼마만큼 설명되었는가?
설명력 -> 상관(결정)계수 : 58.8% 설명력
1에 가까울 수록 설명변수(독립변수)가 설명을 잘한다고 판단
모형의 변수 선정이 우수하다는 의미.
Adjusted R-squared: 0.5865 : 조정된 R값(오차를 감안한 값)<- 이것으로 분석 최종 결론 : 제품 적절성은 제품 만족도에 정(正)의 영향을 미친다. ② 다중 회귀 분석(Multiple Regression Analysis) : 여러 개 독립변수가 1개의 종속변수에 미치는 영향 분석 < 연구 가설 >
연구가설1(H1) : 음료수 제품의 적절성(독립변수1)은 제품 만족도(종속변수)에 정(正)의 영향을 미친다.
연구가설2(H1) : 음료수 제품의 친밀도(독립변수2)는 제품 만족도(종속변수)에 정(正)의 영향을 미친다.
연구모델 : 제품 적절성(x1), 제품 친밀도(x2) -> 제품 만족도(y)
위의 데이터를 활용하여 살펴보도록 하겠습니다.
– 데이터 전처리 ( 적절성 + 친밀도 -> 만족도 )
y = product$제품_만족도 # 종속변수 x1 = product$제품_친밀도 # 독립변수2 x2 = product$제품_적절성 # 독립변수1 df <- data.frame(x1, x2, y) head(df) - 출력값 - > head(df) x1 x2 y 1 3 4 3 2 3 3 2 3 4 4 4 4 2 2 2 5 2 2 2 6 3 3 3 result.lm <- lm(formula=y ~ x1 + x2, data=df) # (+) 사용하여 추가 lm(formula=종속변수 ~ 독립변수1 + 독립변수2, data=데이터 셋) result.lm (잔차가 최저가 되는 기울기)결과 : y = 0.09593 * x1 + 0.68522 * x2 + 0.66731; ( y = ax1 +bx2 +c ) - 다중공선성 문제 체크 (입력으로 사용되어지는 독립변수의 독립성이 상호의존성이 높을 때 회기 분석의 결과를 신뢰할 수 없는 피드백이 나온다. ) install.packages("car") library(car) vif(result.lm) # x1, x2 < 10 미만인지 체크. - 출력값 - x1 x2 1.331929 1.331929 vif (car 패키지에서 제공하는 함수) : 입력으로 전달된 데이터 셋의 다중공선성의 문제가 발생하는지 발생하지 않는지 결과를 체크 할 수 있도록 합니다. vif < 10미만은 독립적인 관계를 가지고 간다. ( 1.331929 , 1.331929 < 10 ) - 다중회귀 분석 결과 보기 summary(result.lm) t=15.684, p < 2e-16으로 유의수준 하에서 연구가설1이 채택되었으며, 제품 친밀도가 제품 만족도에 미치는 영향은 t=2.478, p=0.0138로 유의수준하에서 연구가설2가 채택되었습니다. Multiple R-squared: 0.5975: 독립변수에 의해서 종속변수가 얼마만큼 설명되었는가? 설명력 -> 상관(결정)계수 : 59.7% 설명력, 1에 가까울 수록 설명변수(독립변수)가 설명을 잘한다고 판단할 수 있습니다.
(모형의 변수 선정이 우수)
최종 결과 : 유의수준 0.05에서 연구가설이 채택되었다. 따라서 제품 적절성과 제품 친밀도가 높을 수록 제품 만족도가 높아지는 경향을 보이고 있다.
– 다중공선성 문제 해결과 모델 성능평가
iris 데이터를 사용하여 살펴보겠습니다.
더보기 iris
R에서 제공되는 기본 데이터 셋으로 3가지 꽃의 종류별로 50개씩 전체 150개의 관측치로 구성된다. iris는 붓꽃에 관한 데이터를 5개의 변수로 제공하며, 각 변수의 내용은 다음과 같다. Sepal.Length(꽃받침 길이) Sepal.Width(꽃바침 너비) Petal.Length(꽃잎 길이) Petal.Wodth(꽃잎 너비) Species(꽃의 종류) : 3가지 종류별 50개(전체 150개 관측치)
실습 ① 다중공선성 문제 확인
– iris 데이터 셋으로 다중회귀분석
fit <- lm(formula=Sepal.Length ~ Sepal.Width+Petal.Length+Petal.Width, data=iris) vif(fit) - 출력값 - Sepal.Width Petal.Length Petal.Width 1.270815 15.097572 14.234335 sqrt(vif(fit))>2 # root(VIF)가 2 이상인 것은 다중공선성 문제 의심 – 출력값 – Sepal.Width Petal.Length Petal.Width FALSE TRUE TRUE
– iris 변수 간의 상관계수 구하기
cor(iris[,-5]) # 변수간의 상관계수 보기(Species 제외) – 출력값 – Sepal.Length Sepal.Width Petal.Length Petal.Width Sepal.Length 1.0000000 -0.1175698 0.8717538 0.8179411 Sepal.Width -0.1175698 1.0000000 -0.4284401 -0.3661259 Petal.Length 0.8717538 -0.4284401 1.0000000 0.9628654 Petal.Width 0.8179411 -0.3661259 0.9628654 1.0000000
x변수들끼리 계수값이 높을 수도 있다. -> 해당 변수 제거(모형 수정) <- Petal.width 실습 ② 데이터 셋 생성과 회귀모델 생성 - 학습데이터와 검정데이터 분류 x <- sample(1:nrow(iris), 0.7*nrow(iris)) # 전체중 70%만 추출 (1~150개 중에서 70%만 랜덤으로 출력) train <- iris[x, ] # 학습데이터 추출(70%) test <- iris[-x, ] # 검정데이터 추출(30%) - 변수 제거 및 다중회귀분석 - Petal.width 변수를 제거한 후 회귀 분석 ( 학습데이터 이용 모델 생성 ) model <- lm(formula=Sepal.Length ~ Sepal.Width + Petal.Length, data=train) - 회귀방정식 도출 model head(train, 1) - 출력값 - Sepal.Length Sepal.Width Petal.Length Petal.Width Species 70 5.6 2.5 3.9 1.1 versicolor Y = 1.8347 + 0.7065 * 2.5 + 0.4890 * 3.9 Y 출력값 : 5.50805 - 예측치 생성 - predict()함수 pred <- predict(model, test) # x변수만 test에서 찾아서 값 예측 pred # test 데이터 셋의 y 예측치(회귀방정식 적용) test$Sepal.Length # test 데이터 셋의 y 관측치 length(pred) 출력값 : 45 (개 벡터) - 회귀모델 평가 cor(pred, test$Sepal.Length) 출력값 : 0.9346613 summary(pred); summary(test$Sepal.Length) - 출력값 - Min. 1st Qu. Median Mean 3rd Qu. Max. 4.095 5.068 6.133 5.966 6.687 7.796 Min. 1st Qu. Median Mean 3rd Qu. Max. 4.500 5.100 6.100 6.002 6.700 7.700 ③ 로지스틱 회귀분석(Logistic Regression) - 분류 분석 목적 : 일반 회귀분석과 동일하게 종속변수와 독립변수 간의 관계를 나타내어 향후 예측 모델을 생성하는데 있습니다. 차이점 : 종속변수가 범주형 데이터를 대상으로 하며 입력 데이터가 주어졌을 때 해당 데이터의 결과가 특정 분류로 나눠지기 때문에 분류분석 방법으로 분류됩니다. (종속변수(y)를 범주군으로 분류군으로 결과가 피드백 되어지는 분석법) 유형 : 이항형(종속변수가 2개 범주-Yes/No), 다항형(종속변수가 3개 이상 범주-iris 꽃 종류) 다항형 로지스틱 회귀분석 : nnet, rpart 패키지 이용 a : 0.6, b:0.3, c:0.1 -> a 분류
분야 : 의료, 통신, 기타 데이터마이닝
– 결과는 0이 아니면 1의 값으로, 두가지 분류군으로 구분지어서 어느 영역에 해당되는지 출력합니다.
선형회귀분석 vs 로지스틱 회귀분석
1. 로지스틱 회귀분석 결과는 0과 1로 나타난다.(이항형)
2. 정규분포(연속형) 대신에 이항분포(범주형)를 따른다.
3. 로직스틱 모형 적용 : 변수[-무한대, +무한대] -> 변수[0,1]사이에 있도록 하는 모형
-> 로짓변환 : 출력범위를 [0,1]로 조정
4. 종속변수가 2개 이상인 경우 더미 변수(dummy variable)로 변환하여 0과 1를 갖도록한다.
예) 혈액형 A인 경우 -> [1,0,0,0] AB(1) -> A,B,O(0)
위의 데이터를 활용하여 살펴보도록 하겠습니다.
– 데이터 확인
dim(weather) 출력값 : 366 15 str(weather) – 출력값 – data.frame’: 366 obs. of 15 variables: $ Date : chr “2014-11-01” “2014-11-02” “2014-11-03” “2014-11-04” … $ MinTemp : num 8 14 13.7 13.3 7.6 6.2 6.1 8.3 8.8 8.4 … $ MaxTemp : num 24.3 26.9 23.4 15.5 16.1 16.9 18.2 17 19.5 22.8 … $ Rainfall : num 0 3.6 3.6 39.8 2.8 0 0.2 0 0 16.2 … $ Sunshine : num 6.3 9.7 3.3 9.1 10.6 8.2 8.4 4.6 4.1 7.7 … $ WindGustDir : chr “NW” “ENE” “NW” “NW” … $ WindGustSpeed: int 30 39 85 54 50 44 43 41 48 31 … $ WindDir : chr “NW” “W” “NNE” “W” … $ WindSpeed : int 20 17 6 24 28 24 26 24 17 6 … $ Humidity : int 29 36 69 56 49 57 47 57 48 32 … $ Pressure : num 1015 1008 1007 1007 1018 … $ Cloud : int 7 3 7 7 7 5 6 7 7 1 … $ Temp : num 23.6 25.7 20.2 14.1 15.4 14.8 17.3 15.5 18.9 21.7 … $ RainToday : chr “No” “Yes” “Yes” “Yes” … $ RainTomorrow : chr “Yes” “Yes” “Yes” “Yes” … head(weather)
– 데이터 전처리
Date, RainToday 칼럼 제거 weather_df <- weather[, c(-1, -6, -8, -14)] str(weather_df) - 출력값 - str(weather_df) 'data.frame': 366 obs. of 11 variables: $ MinTemp : num 8 14 13.7 13.3 7.6 6.2 6.1 8.3 8.8 8.4 ... $ MaxTemp : num 24.3 26.9 23.4 15.5 16.1 16.9 18.2 17 19.5 22.8 ... $ Rainfall : num 0 3.6 3.6 39.8 2.8 0 0.2 0 0 16.2 ... $ Sunshine : num 6.3 9.7 3.3 9.1 10.6 8.2 8.4 4.6 4.1 7.7 ... $ WindGustSpeed: int 30 39 85 54 50 44 43 41 48 31 ... $ WindSpeed : int 20 17 6 24 28 24 26 24 17 6 ... $ Humidity : int 29 36 69 56 49 57 47 57 48 32 ... $ Pressure : num 1015 1008 1007 1007 1018 ... $ Cloud : int 7 3 7 7 7 5 6 7 7 1 ... $ Temp : num 23.6 25.7 20.2 14.1 15.4 14.8 17.3 15.5 18.9 21.7 ... $ RainTomorrow : chr "Yes" "Yes" "Yes" "Yes" ... RainTomorrow 칼럼 -> 로지스틱 회귀분석 결과(0,1)에 맞게 더미변수 생성 weather_df$RainTomorrow[weather_df$RainTomorrow==’Yes’] <- 1 weather_df$RainTomorrow[weather_df$RainTomorrow=='No'] <- 0 weather_df$RainTomorrow <- as.numeric(weather_df$RainTomorrow) str(weather_df) - 출력값 - 'data.frame': 366 obs. of 11 variables: $ MinTemp : num 8 14 13.7 13.3 7.6 6.2 6.1 8.3 8.8 8.4 ... $ MaxTemp : num 24.3 26.9 23.4 15.5 16.1 16.9 18.2 17 19.5 22.8 ... $ Rainfall : num 0 3.6 3.6 39.8 2.8 0 0.2 0 0 16.2 ... $ Sunshine : num 6.3 9.7 3.3 9.1 10.6 8.2 8.4 4.6 4.1 7.7 ... $ WindGustSpeed: int 30 39 85 54 50 44 43 41 48 31 ... $ WindSpeed : int 20 17 6 24 28 24 26 24 17 6 ... $ Humidity : int 29 36 69 56 49 57 47 57 48 32 ... $ Pressure : num 1015 1008 1007 1007 1018 ... $ Cloud : int 7 3 7 7 7 5 6 7 7 1 ... $ Temp : num 23.6 25.7 20.2 14.1 15.4 14.8 17.3 15.5 18.9 21.7 ... $ RainTomorrow : chr "Yes" "Yes" "Yes" "Yes" ... View(weather_df) # head(weather_df) - 로지스틱 회귀분석(Logistic Regression) -> 7:3 비율
idx <- sample(1:nrow(weather_df), nrow(weather_df)*0.7) # 랜덤으로 70% 출력 train <- weather_df[idx, ] # 70% test <- weather_df[-idx, ] # 30% - 로지스틱 회귀모델 생성 : 학습데이터 weater_model <- glm(RainTomorrow ~ ., data = train, family = 'binomial') weater_model summary(weater_model) - 로지스틱 회귀모델 예측치 생성 newdata=test : 새로운 데이터 셋, type="response" : 0~1 확률값으로 예측 pred <- predict(weater_model, newdata=test, type="response") pred summary(pred) - 출력값 - Min. 1st Qu. Median Mean 3rd Qu. Max. NA's 0.001244 0.019221 0.081876 0.225368 0.385520 0.975289 2 str(pred) - 출력값 - Named num [1:110] 0.1094 0.0109 0.0193 0.0502 0.0594 ... - attr(*, "names")= chr [1:110] "2" "11" "15" "19" ... - 예측치 : 0과 1로 변환(0.5) result_pred <- ifelse(pred >= 0.5, 1, 0) # 비가올 활률 50% 이상 : 1, 비가올 활률 50% 이하 : 0 result_pred table(result_pred) – 출력값 – result_pred 0 1 0 86 11 1 1 10
– 모델 평가 : 분류정확도
table(result_pred, test$RainTomorrow) – 출력값 – result_pred 0 1 0 86 11 1 1 10 모델의 분류정확도 (80+13) / (86+11+1+10) # 0.8611111 = 86.11%
– ROC(Receiver Operating Characteristic) Curve를 이용한 모델 평가
install.packages(“ROCR”) library(ROCR)
– ROCR 패키지 제공 함수 : prediction() -> performance
pr <- prediction(pred, test$RainTomorrow) pr -출력값- A prediction instance with 110 data points prf <- performance(pr, measure = "tpr", x.measure = "fpr") plot(prf) 728x90 반응형
키워드에 대한 정보 r 다중 회귀 분석
다음은 Bing에서 r 다중 회귀 분석 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.
이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!
사람들이 주제에 대해 자주 검색하는 키워드 통계데이터분석 – 회귀분석 – 다중회귀분석 🔑 multiple regression analysis | 두 개 이상의 독립변수 | 표준화계수 | 베타(beta)
- 통계
- 데이터분석
- 회귀분석
- 선형회귀식
- 선형회귀모델
- 단순회귀분석
- 다항회귀분석
- 다중회귀분석
- regression analysis
통계데이터분석 #- #회귀분석 #- #다중회귀분석 #🔑 #multiple #regression #analysis #| #두 #개 #이상의 #독립변수 #| #표준화계수 #| #베타(beta)
YouTube에서 r 다중 회귀 분석 주제의 다른 동영상 보기
주제에 대한 기사를 시청해 주셔서 감사합니다 통계데이터분석 – 회귀분석 – 다중회귀분석 🔑 multiple regression analysis | 두 개 이상의 독립변수 | 표준화계수 | 베타(beta) | r 다중 회귀 분석, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.