b:head_first_statistics:correlation_and_regression
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
b:head_first_statistics:correlation_and_regression [2023/12/13 02:31] – [Correlation] hkimscil | b:head_first_statistics:correlation_and_regression [2023/12/13 13:33] (current) – [exercise] hkimscil | ||
---|---|---|---|
Line 33: | Line 33: | ||
{{: | {{: | ||
- | \begin{eqnarray*} | + | \begin{align} |
- | b & = & \frac{\Sigma{(x-\overline(x))(y-\overline(y))}}{\Sigma{(x-\overline{x})^2}} \\ | + | b = & \frac{\Sigma{(x-\overline{x})(y-\overline{y})}}{\Sigma{(x-\overline{x})^2}} |
- | & = & \frac{\text{SP}}{\text{SS}_{x}} \\ | + | |
- | a & = & \overline{y} - b \overline{x} | + | a = & \overline{y} - b \; \overline{x} \;\;\; \because \; \overline{y} = a + b \; \overline{x} |
- | \end{eqnarray*} | + | \end{align} |
< | < | ||
+ | > # lm = linear modeling (lm function) | ||
+ | > # = regression | ||
+ | > # = correlation | ||
> mod <- lm(c~s, data=df) | > mod <- lm(c~s, data=df) | ||
> summary(mod) | > summary(mod) | ||
Line 67: | Line 70: | ||
\begin{align} | \begin{align} | ||
r = & b * \frac {sd(x)}{sd(y)} \\ | r = & b * \frac {sd(x)}{sd(y)} \\ | ||
- | = & b * \frac {SS_X} {SS_Y} \nonumber | + | = & b * \sqrt{\frac {SS_X} {SS_Y}} \;\;\; \because |
- | \end{align} | + | = & \frac {SP}{SS_X} |
- | \begin{align} | + | = & \frac {SP}{\sqrt{SS_X * SS_Y}} \nonumber \\ |
- | b = & r * \frac {sd(x)}{sd(y)} \\ | + | = & \frac {COV}{SD(X) SD(Y)} |
- | = & b * \frac {SS_X} {SS_Y} \nonumber | + | \end{align} |
- | \end{align} | + | |
Line 158: | Line 160: | ||
> | > | ||
</ | </ | ||
+ | ===== exercise ===== | ||
+ | < | ||
+ | # correlation 에 대한 이해를 돕기 위한 연습 | ||
+ | # stat first 책에서 radiation exposure 양과 | ||
+ | # (독립변인) weight 간의 관계 (종속변인) | ||
+ | # | ||
+ | # 두 변인 (독립변인과 종속변인) 모두 | ||
+ | # 숫자로 측정된 변인 | ||
+ | re <- c(4, 4.5, 5, 5.5, 6, 6.5, 7) | ||
+ | we <- c(12, 10, 8, 9.5, 8, 9, 6) | ||
+ | # 손으로 variance, standard deviation 구하기 | ||
+ | # 우선 각각의 평균 | ||
+ | mean.re <- mean(re) | ||
+ | mean.we <- mean(we) | ||
+ | mean.re | ||
+ | mean.we | ||
+ | |||
+ | # sum of square x (ssx) 와 ssy 구하기 | ||
+ | ss.re <- sum((re-mean.re)^2) | ||
+ | ss.we <- sum((we-mean.we)^2) | ||
+ | ss.re | ||
+ | ss.we | ||
+ | |||
+ | # df 값은 | ||
+ | df <- length(we)-1 | ||
+ | df | ||
+ | # variance와 sd | ||
+ | var.re.1 <- ss.re/df | ||
+ | var.we.1 <- ss.we/df | ||
+ | sd.re.1 <- sqrt(var.re.1) | ||
+ | sd.we.1 <- sqrt(var.we.1) | ||
+ | # R의 펑션을 이용해서 구하기 | ||
+ | var.re <- var(re) | ||
+ | var.we <- var(we) | ||
+ | sd.re <- sd(re) | ||
+ | sd.we <- sd(we) | ||
+ | |||
+ | var.re.1 | ||
+ | var.we.1 | ||
+ | var.re | ||
+ | var.we | ||
+ | sd.re.1 | ||
+ | sd.we.1 | ||
+ | sd.re | ||
+ | sd.we | ||
+ | |||
+ | |||
+ | # sum of product | ||
+ | sp <- sum((re-mean.re)*(we-mean.we)) | ||
+ | cov.rewe.1 <- sp/df | ||
+ | cov.rewe <- cov(re,we) | ||
+ | sp | ||
+ | cov.rewe.1 | ||
+ | cov.rewe | ||
+ | |||
+ | |||
+ | # 교재에 기술된 | ||
+ | # r, b, r square | ||
+ | # r = cov(x, | ||
+ | # = sp / sqrt(ss(x)*ss(y)) | ||
+ | r.val <- sp / (sqrt(ss.re*ss.we)) | ||
+ | r.val2 <- cor(re,we) | ||
+ | r.val | ||
+ | r.val2 | ||
+ | |||
+ | # 기울기 b = sp / ss(x) | ||
+ | b <- sp / ss.re | ||
+ | b | ||
+ | a <- mean.we - (b * mean.re) | ||
+ | a | ||
+ | # r 제곱값 (r^2) | ||
+ | r.sq <- r.val^2 | ||
+ | r.sq | ||
+ | |||
+ | # 위의 모든 정보가 lm function의 결과에 | ||
+ | m1 <- lm(we~re) | ||
+ | summary(m1) | ||
+ | |||
+ | ## summary(m1)에서 se가 나타나는 부분 설명 | ||
+ | # se of regression = sqrt of mse | ||
+ | # p = # of parameters (IVs) | ||
+ | # | ||
+ | p <- 1 | ||
+ | n <- length(we) | ||
+ | n | ||
+ | df.res <- n-p-1 | ||
+ | # or | ||
+ | m1$df.residual | ||
+ | |||
+ | # residual 값들을 제곱해서 모두 더한 후 | ||
+ | # n으로 (df.residual값으로) 나누준 것 | ||
+ | # = 분산을 구하는 형식이다. 즉 아래는 | ||
+ | # regression line으로 예측하고 남은 | ||
+ | # 나머지 오차들에 (residuals) 대한 분산값 | ||
+ | # 이것을 mean square error라고 부른다 | ||
+ | # variance를 mean square라고 부르는 사람들이 | ||
+ | # 있다. | ||
+ | # ss of square residuals = ssres | ||
+ | ssres <- sum(m1$residuals^2) | ||
+ | # ssres = sum of square error 값으로 부르기도 | ||
+ | # 한다. | ||
+ | sse <- ssres | ||
+ | mse <- sse/df.res | ||
+ | mse | ||
+ | |||
+ | # 그리고 그 값에 sqrt값을 씌워 sd값을 | ||
+ | # stanard deviation 구한다. 이것을 | ||
+ | # root mean square error라고 부른다. | ||
+ | rmse <- sqrt(mse) | ||
+ | rmse | ||
+ | |||
+ | # summary(m1)에서 Residual standard error: 1.177 | ||
+ | # 에 해당하는 값 | ||
+ | summary(m1) | ||
+ | |||
+ | # b coefficient 에 대한 standard error 값은 | ||
+ | # sqrt( (1/(n-2)) * (sse/ssx)) | ||
+ | se.b <- sqrt( (1/(n-2)) * (sse/ss.re) ) | ||
+ | se.b | ||
+ | # 아래 아웃풋에서 Std. Error 참조 | ||
+ | summary(m1) | ||
+ | |||
+ | c <- qt(.975, 5) | ||
+ | se.b2 <- c*se.b | ||
+ | b - se.b2 | ||
+ | b + se.b2 | ||
+ | confint(m1) | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | > # correlation 에 대한 이해를 돕기 위한 연습 | ||
+ | > # stat first 책에서 radiation exposure 양과 | ||
+ | > # (독립변인) weight 간의 관계 (종속변인) | ||
+ | > # | ||
+ | > # 두 변인 (독립변인과 종속변인) 모두 | ||
+ | > # 숫자로 측정된 변인 | ||
+ | > re <- c(4, 4.5, 5, 5.5, 6, 6.5, 7) | ||
+ | > we <- c(12, 10, 8, 9.5, 8, 9, 6) | ||
+ | > | ||
+ | > # 손으로 variance, standard deviation 구하기 | ||
+ | > # 우선 각각의 평균 | ||
+ | > mean.re <- mean(re) | ||
+ | > mean.we <- mean(we) | ||
+ | > mean.re | ||
+ | [1] 5.5 | ||
+ | > mean.we | ||
+ | [1] 8.928571 | ||
+ | > | ||
+ | > # sum of square x (ssx) 와 ssy 구하기 | ||
+ | > ss.re <- sum((re-mean.re)^2) | ||
+ | > ss.we <- sum((we-mean.we)^2) | ||
+ | > ss.re | ||
+ | [1] 7 | ||
+ | > ss.we | ||
+ | [1] 21.21429 | ||
+ | > | ||
+ | > # df 값은 | ||
+ | > df <- length(we)-1 | ||
+ | > df | ||
+ | [1] 6 | ||
+ | > # variance와 sd | ||
+ | > var.re.1 <- ss.re/df | ||
+ | > var.we.1 <- ss.we/df | ||
+ | > sd.re.1 <- sqrt(var.re.1) | ||
+ | > sd.we.1 <- sqrt(var.we.1) | ||
+ | > # R의 펑션을 이용해서 구하기 | ||
+ | > var.re <- var(re) | ||
+ | > var.we <- var(we) | ||
+ | > sd.re <- sd(re) | ||
+ | > sd.we <- sd(we) | ||
+ | > | ||
+ | > var.re.1 | ||
+ | [1] 1.166667 | ||
+ | > var.we.1 | ||
+ | [1] 3.535714 | ||
+ | > var.re | ||
+ | [1] 1.166667 | ||
+ | > var.we | ||
+ | [1] 3.535714 | ||
+ | > sd.re.1 | ||
+ | [1] 1.080123 | ||
+ | > sd.we.1 | ||
+ | [1] 1.88035 | ||
+ | > sd.re | ||
+ | [1] 1.080123 | ||
+ | > sd.we | ||
+ | [1] 1.88035 | ||
+ | > | ||
+ | > | ||
+ | > # sum of product | ||
+ | > sp <- sum((re-mean.re)*(we-mean.we)) | ||
+ | > cov.rewe.1 <- sp/df | ||
+ | > cov.rewe <- cov(re,we) | ||
+ | > sp | ||
+ | [1] -10 | ||
+ | > cov.rewe.1 | ||
+ | [1] -1.666667 | ||
+ | > cov.rewe | ||
+ | [1] -1.666667 | ||
+ | > | ||
+ | > | ||
+ | > # 교재에 기술된 | ||
+ | > # r, b, r square | ||
+ | > # r = cov(x, | ||
+ | > # = sp / sqrt(ss(x)*ss(y)) | ||
+ | > r.val <- sp / (sqrt(ss.re*ss.we)) | ||
+ | > r.val2 <- cor(re,we) | ||
+ | > r.val | ||
+ | [1] -0.8206099 | ||
+ | > r.val2 | ||
+ | [1] -0.8206099 | ||
+ | > | ||
+ | > # 기울기 b = sp / ss(x) | ||
+ | > b <- sp / ss.re | ||
+ | > b | ||
+ | [1] -1.428571 | ||
+ | > a <- mean.we - (b * mean.re) | ||
+ | > a | ||
+ | [1] 16.78571 | ||
+ | > # r 제곱값 (r^2) | ||
+ | > r.sq <- r.val^2 | ||
+ | > r.sq | ||
+ | [1] 0.6734007 | ||
+ | > | ||
+ | > # 위의 모든 정보가 lm function의 결과에 | ||
+ | > m1 <- lm(we~re) | ||
+ | > summary(m1) | ||
+ | |||
+ | Call: | ||
+ | lm(formula = we ~ re) | ||
+ | |||
+ | Residuals: | ||
+ | 1 | ||
+ | | ||
+ | |||
+ | Coefficients: | ||
+ | Estimate Std. Error t value Pr(> | ||
+ | (Intercept) | ||
+ | re | ||
+ | --- | ||
+ | Signif. codes: | ||
+ | 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 | ||
+ | |||
+ | Residual standard error: 1.177 on 5 degrees of freedom | ||
+ | Multiple R-squared: | ||
+ | F-statistic: | ||
+ | |||
+ | > | ||
+ | > ## summary(m1)에서 se가 나타나는 부분 설명 | ||
+ | > # se of regression = sqrt of mse | ||
+ | > # p = # of parameters (IVs) | ||
+ | > # | ||
+ | > p <- 1 | ||
+ | > n <- length(we) | ||
+ | > n | ||
+ | [1] 7 | ||
+ | > df.res <- n-p-1 | ||
+ | > # or | ||
+ | > m1$df.residual | ||
+ | [1] 5 | ||
+ | > | ||
+ | > # residual 값들을 제곱해서 모두 더한 후 | ||
+ | > # n으로 (df.residual값으로) 나누준 것 | ||
+ | > # = 분산을 구하는 형식이다. 즉 아래는 | ||
+ | > # regression line으로 예측하고 남은 | ||
+ | > # 나머지 오차들에 (residuals) 대한 분산값 | ||
+ | > # 이것을 mean square error라고 부른다 | ||
+ | > # variance를 mean square라고 부르는 사람들이 | ||
+ | > # 있다. | ||
+ | > # ss of square residuals = ssres | ||
+ | > ssres <- sum(m1$residuals^2) | ||
+ | > # ssres = sum of square error 값으로 부르기도 | ||
+ | > # 한다. | ||
+ | > sse <- ssres | ||
+ | > mse <- sse/df.res | ||
+ | > mse | ||
+ | [1] 1.385714 | ||
+ | > | ||
+ | > # 그리고 그 값에 sqrt값을 씌워 sd값을 | ||
+ | > # stanard deviation 구한다. 이것을 | ||
+ | > # root mean square error라고 부른다. | ||
+ | > rmse <- sqrt(mse) | ||
+ | > rmse | ||
+ | [1] 1.177164 | ||
+ | > | ||
+ | > # summary(m1)에서 Residual standard error: 1.177 | ||
+ | > # 에 해당하는 값 | ||
+ | > summary(m1) | ||
+ | |||
+ | Call: | ||
+ | lm(formula = we ~ re) | ||
+ | |||
+ | Residuals: | ||
+ | 1 | ||
+ | | ||
+ | |||
+ | Coefficients: | ||
+ | Estimate Std. Error t value Pr(> | ||
+ | (Intercept) | ||
+ | re | ||
+ | --- | ||
+ | Signif. codes: | ||
+ | 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 | ||
+ | |||
+ | Residual standard error: 1.177 on 5 degrees of freedom | ||
+ | Multiple R-squared: | ||
+ | F-statistic: | ||
+ | |||
+ | > | ||
+ | > # b coefficient 에 대한 standard error 값은 | ||
+ | > # sqrt( (1/(n-2)) * (sse/ssx)) | ||
+ | > se.b <- sqrt( (1/(n-2)) * (sse/ss.re) ) | ||
+ | > se.b | ||
+ | [1] 0.444926 | ||
+ | > # 아래 아웃풋에서 Std. Error 참조 | ||
+ | > summary(m1) | ||
+ | |||
+ | Call: | ||
+ | lm(formula = we ~ re) | ||
+ | |||
+ | Residuals: | ||
+ | 1 | ||
+ | | ||
+ | |||
+ | Coefficients: | ||
+ | Estimate Std. Error t value Pr(> | ||
+ | (Intercept) | ||
+ | re | ||
+ | --- | ||
+ | Signif. codes: | ||
+ | 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 | ||
+ | |||
+ | Residual standard error: 1.177 on 5 degrees of freedom | ||
+ | Multiple R-squared: | ||
+ | F-statistic: | ||
+ | |||
+ | > | ||
+ | > c <- qt(.975, 5) | ||
+ | > se.b2 <- c*se.b | ||
+ | > b - se.b2 | ||
+ | [1] -2.57229 | ||
+ | > b + se.b2 | ||
+ | [1] -0.2848526 | ||
+ | > confint(m1) | ||
+ | 2.5 % 97.5 % | ||
+ | (Intercept) 10.39213 23.1792968 | ||
+ | re -2.57229 -0.2848526 | ||
+ | > | ||
+ | </ | ||
+ | ===== exercise 2: 직접해보기 ===== | ||
+ | 아래에서처럼 데이터를 R에서 다운로드 받아서 정리한 후에 위에서처럼 sp, ss.x, ss.y, b, a, r, r squared, 등등을 구해 보시오. | ||
+ | < | ||
+ | ######################## | ||
+ | dat <- read.csv(" | ||
+ | # data | ||
+ | # bankaccount = 통장갯수 | ||
+ | # income = 수입 | ||
+ | # famnum = 부양가족수 | ||
+ | # IV = 수입 = income | ||
+ | # DV = 통장갯수 = bankaccount | ||
+ | # | ||
+ | # 컬럼 이름 바꾸기 (간단하게) | ||
+ | colnames(dat) <- c(" | ||
+ | dat | ||
+ | attach(dat) | ||
+ | dat | ||
+ | |||
+ | # ss.y | ||
+ | # ss.x | ||
+ | # df.y | ||
+ | # df.x | ||
+ | # sp.xy | ||
+ | # sd.x | ||
+ | # sd.y | ||
+ | |||
+ | # b coefficient | ||
+ | # b | ||
+ | # a intercept | ||
+ | # a | ||
+ | # pred <- a + b*x | ||
+ | # resid <- y - pred | ||
+ | |||
+ | # ss.pred | ||
+ | # ss.resid | ||
+ | # ss.y | ||
+ | |||
+ | # r | ||
+ | # r.sq | ||
+ | |||
+ | </ |
b/head_first_statistics/correlation_and_regression.txt · Last modified: 2023/12/13 13:33 by hkimscil