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 [2022/12/14 14:40] – [Correlation] hkimscil | b:head_first_statistics:correlation_and_regression [2023/12/13 04: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 64: | Line 67: | ||
| ===== Correlation ===== | ===== Correlation ===== | ||
| Textbook says: | Textbook says: | ||
| - | $$ r = b * \frac {sd(x)}{sd(y)} | + | |
| + | \begin{align} | ||
| + | r = & b * \frac {sd(x)}{sd(y)} | ||
| + | = & b * \sqrt{\frac {SS_X} {SS_Y}} \; | ||
| + | = & \frac {SP}{SS_X} * \frac {\sqrt{SS_X}} {\sqrt{SS_Y}} \nonumber \\ | ||
| + | = & \frac {SP}{\sqrt{SS_X * SS_Y}} \nonumber \\ | ||
| + | = & \frac {COV}{SD(X) SD(Y)} | ||
| + | \end{align} | ||
| + | |||
| [[: | [[: | ||
| \begin{eqnarray} | \begin{eqnarray} | ||
| Line 82: | Line 94: | ||
| r & = & \frac {Cov(x,y)} {sd(x)*sd(y)} \\ | r & = & \frac {Cov(x,y)} {sd(x)*sd(y)} \\ | ||
| \end{eqnarray*} | \end{eqnarray*} | ||
| + | see [[: | ||
| 아래는 위의 세 가지 방법으로 R에서 r 값을 구해본 것이다. | 아래는 위의 세 가지 방법으로 R에서 r 값을 구해본 것이다. | ||
| < | < | ||
| # check the coefficient from the lm analysis | # check the coefficient from the lm analysis | ||
| - | > summary(mod)$coefficients | + | b <- summary(mod)$coefficients[2,1] |
| - | Estimate Std. Error t value Pr(>|t|) | + | b |
| - | (Intercept) 15.728319 | + | df |
| - | s 5.336411 | + | sd.x <- sd(df$s) |
| + | sd.y <- sd(df$c) | ||
| - | > b <- 5.336411 | + | # 첫 번째 |
| + | r.value1 <- b * (sd.x/ | ||
| + | r.value1 | ||
| + | |||
| + | # 두 번째 | ||
| + | # rsquared | ||
| + | r.value2 <- sqrt(summary(mod)$r.squared) | ||
| + | r.value2 | ||
| + | |||
| + | # or | ||
| + | cov.sc <- cov(df$s, df$c) | ||
| + | r.value3 <- cov.sc/ | ||
| + | |||
| + | r.value3 | ||
| + | </ | ||
| + | |||
| + | 아래는 위의 아웃풋 | ||
| + | |||
| + | < | ||
| + | > # check the coefficient from the lm analysis | ||
| + | > b <- summary(mod)$coefficients[2, | ||
| + | > b | ||
| + | [1] 5.336411 | ||
| > df | > df | ||
| s c | s c | ||
| Line 102: | Line 138: | ||
| 7 5.9 42 | 7 5.9 42 | ||
| 8 7.2 55 | 8 7.2 55 | ||
| - | > sd(df$s) | + | > sd.x <- sd(df$s) |
| - | [1] 1.813393 | + | > sd.y <- sd(df$c) |
| - | > sd(df$c) | + | |
| - | [1] 10.56189 | + | |
| > | > | ||
| - | > r.value1 <- b * (sd(df$s)/sd(df$c)) | + | > # 첫 번째 |
| + | > r.value1 <- b * (sd.x/sd.y) | ||
| > r.value1 | > r.value1 | ||
| - | [1] 0.916219 | + | [1] 0.9162191 |
| > | > | ||
| - | + | > # 두 번째 | |
| - | # rsquared | + | > # rsquared |
| > r.value2 <- sqrt(summary(mod)$r.squared) | > r.value2 <- sqrt(summary(mod)$r.squared) | ||
| > r.value2 | > r.value2 | ||
| [1] 0.9162191 | [1] 0.9162191 | ||
| - | + | > | |
| - | # or | + | > # or |
| > cov.sc <- cov(df$s, df$c) | > cov.sc <- cov(df$s, df$c) | ||
| - | > sd.x <- sd(df$s) | ||
| - | > sd.y <- sd(df$c) | ||
| > r.value3 <- cov.sc/ | > r.value3 <- cov.sc/ | ||
| > | > | ||
| > r.value3 | > r.value3 | ||
| [1] 0.9162191 | [1] 0.9162191 | ||
| + | > | ||
| + | </ | ||
| + | ===== 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.1671028812.txt.gz · Last modified: by hkimscil
