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 03:40] – [exercise] hkimscil | b:head_first_statistics:correlation_and_regression [2023/12/13 04:33] (current) – [exercise] hkimscil | ||
|---|---|---|---|
| Line 280: | Line 280: | ||
| se.b <- sqrt( (1/(n-2)) * (sse/ss.re) ) | se.b <- sqrt( (1/(n-2)) * (sse/ss.re) ) | ||
| se.b | se.b | ||
| - | summary(m1$coefficient[" | + | # 아래 아웃풋에서 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) | > re <- c(4, 4.5, 5, 5.5, 6, 6.5, 7) | ||
| > we <- c(12, 10, 8, 9.5, 8, 9, 6) | > we <- c(12, 10, 8, 9.5, 8, 9, 6) | ||
| > | > | ||
| + | > # 손으로 variance, standard deviation 구하기 | ||
| + | > # 우선 각각의 평균 | ||
| > mean.re <- mean(re) | > mean.re <- mean(re) | ||
| > mean.we <- mean(we) | > mean.we <- mean(we) | ||
| - | > sd.re <- sd(re) | ||
| - | > sd.we <- sd(we) | ||
| - | > var.re <- var(re) | ||
| - | > var.we <- var(we) | ||
| - | > ss.re <- sum((re-mean.re)^2) | ||
| - | > ss.we <- sum((we-mean.we)^2) | ||
| - | > sp <- sum((re-mean.re)*(we-mean.we)) | ||
| - | > df <- 7-1 | ||
| - | > cov.rewe <- sp/df | ||
| - | > cov.rewe2 <- cov(re,we) | ||
| - | > | ||
| > mean.re | > mean.re | ||
| [1] 5.5 | [1] 5.5 | ||
| > mean.we | > mean.we | ||
| [1] 8.928571 | [1] 8.928571 | ||
| - | > sd.re | + | > |
| - | [1] 1.080123 | + | > # sum of square x (ssx) 와 ssy 구하기 |
| - | > sd.we | + | > ss.re <- sum((re-mean.re)^2) |
| - | [1] 1.88035 | + | > ss.we <- sum((we-mean.we)^2) |
| - | > var.re | + | |
| - | [1] 1.166667 | + | |
| - | > var.we | + | |
| - | [1] 3.535714 | + | |
| > ss.re | > ss.re | ||
| [1] 7 | [1] 7 | ||
| > ss.we | > ss.we | ||
| [1] 21.21429 | [1] 21.21429 | ||
| - | > sp | + | > |
| - | [1] -10 | + | > # df 값은 |
| + | > df <- length(we)-1 | ||
| > df | > df | ||
| [1] 6 | [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 | > cov.rewe | ||
| - | [1] -1.666667 | ||
| - | > cov.rewe2 | ||
| [1] -1.666667 | [1] -1.666667 | ||
| > | > | ||
| + | > | ||
| + | > # 교재에 기술된 | ||
| > # r, b, r square | > # r, b, r square | ||
| + | > # r = cov(x, | ||
| + | > # = sp / sqrt(ss(x)*ss(y)) | ||
| > r.val <- sp / (sqrt(ss.re*ss.we)) | > r.val <- sp / (sqrt(ss.re*ss.we)) | ||
| + | > r.val2 <- cor(re,we) | ||
| > r.val | > r.val | ||
| [1] -0.8206099 | [1] -0.8206099 | ||
| + | > r.val2 | ||
| + | [1] -0.8206099 | ||
| + | > | ||
| + | > # 기울기 b = sp / ss(x) | ||
| > b <- sp / ss.re | > b <- sp / ss.re | ||
| > b | > b | ||
| Line 336: | Line 380: | ||
| > a | > a | ||
| [1] 16.78571 | [1] 16.78571 | ||
| + | > # r 제곱값 (r^2) | ||
| > r.sq <- r.val^2 | > r.sq <- r.val^2 | ||
| > r.sq | > r.sq | ||
| [1] 0.6734007 | [1] 0.6734007 | ||
| > | > | ||
| - | > cor(re, | + | > # 위의 모든 정보가 lm function의 결과에 |
| - | [1] -0.8206099 | + | |
| > m1 <- lm(we~re) | > m1 <- lm(we~re) | ||
| > summary(m1) | > summary(m1) | ||
| Line 357: | Line 401: | ||
| re | re | ||
| --- | --- | ||
| - | Signif. codes: | + | Signif. codes: |
| + | 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 | ||
| Residual standard error: 1.177 on 5 degrees of freedom | Residual standard error: 1.177 on 5 degrees of freedom | ||
| Line 364: | Line 409: | ||
| > | > | ||
| - | > # regression | + | > ## summary(m1)에서 se가 나타나는 부분 설명 |
| - | > # we hat = 16.7857 - 1.4286 re | + | > # se of regression |
| + | > # p = # of parameters (IVs) | ||
| > # | > # | ||
| - | > m1$coefficients | + | > p <- 1 |
| - | (Intercept) | + | > n <- length(we) |
| - | 16.785714 | + | |
| - | > a <- m1$coefficients[" | + | |
| - | > b <- m1$coefficients[" | + | |
| - | > predicted <- a + b*re | + | |
| - | > predicted | + | |
| - | [1] 11.071429 10.357143 | + | |
| - | [7] 6.785714 | + | |
| - | > m1$fitted.values | + | |
| - | 1 | + | |
| - | 11.071429 10.357143 | + | |
| - | 7 | + | |
| - | | + | |
| - | > t1 <- data.frame(predicted, | + | |
| - | > t1 | + | |
| - | predicted m1.fitted.values | + | |
| - | 1 11.071429 | + | |
| - | 2 10.357143 | + | |
| - | 3 9.642857 | + | |
| - | 4 8.928571 | + | |
| - | 5 8.214286 | + | |
| - | 6 7.500000 | + | |
| - | 7 6.785714 | + | |
| - | > | + | |
| - | > resid <- we-predicted | + | |
| - | > resid | + | |
| - | [1] 0.9285714 -0.3571429 -1.6428571 | + | |
| - | [6] 1.5000000 -0.7857143 | + | |
| - | > m1$residuals | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | > t2 <- data.frame(resid, | + | |
| - | > t2 | + | |
| - | resid m1.residuals | + | |
| - | 1 0.9285714 | + | |
| - | 2 -0.3571429 | + | |
| - | 3 -1.6428571 | + | |
| - | 4 0.5714286 | + | |
| - | 5 -0.2142857 | + | |
| - | 6 1.5000000 | + | |
| - | 7 -0.7857143 | + | |
| - | > | + | |
| - | > sse <- sum(resid^2) | + | |
| - | > n <- length(re) | + | |
| > n | > n | ||
| [1] 7 | [1] 7 | ||
| - | > sse | + | > df.res <- n-p-1 |
| - | [1] 6.928571 | + | > # or |
| - | > ss.re | + | > m1$df.residual |
| - | [1] 7 | + | [1] 5 |
| - | > se.of.b1 <- sqrt( (1/ | + | > |
| - | > se.of.b1 | + | > # 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/ | ||
| + | > 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 | ||
| + | 0.9286 -0.3571 -1.6429 | ||
| + | |||
| + | Coefficients: | ||
| + | Estimate Std. Error t value Pr(>|t|) | ||
| + | (Intercept) | ||
| + | re | ||
| + | --- | ||
| + | Signif. codes: | ||
| + | 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 | ||
| + | |||
| + | Residual standard error: 1.177 on 5 degrees | ||
| + | Multiple R-squared: | ||
| + | F-statistic: | ||
| + | |||
| + | > | ||
| + | > # b coefficient 에 대한 standard error 값은 | ||
| + | > # sqrt( (1/(n-2)) * (sse/ | ||
| + | > se.b <- sqrt( (1/(n-2)) * (sse/ss.re) ) | ||
| + | > se.b | ||
| [1] 0.444926 | [1] 0.444926 | ||
| + | > # 아래 아웃풋에서 Std. Error 참조 | ||
| > summary(m1) | > summary(m1) | ||
| Line 437: | Line 490: | ||
| re | re | ||
| --- | --- | ||
| - | Signif. codes: | + | Signif. codes: |
| + | 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 | ||
| Residual standard error: 1.177 on 5 degrees of freedom | Residual standard error: 1.177 on 5 degrees of freedom | ||
| Line 443: | Line 497: | ||
| F-statistic: | 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, 등등을 구해 보시오. | ||
| < | < | ||
| ######################## | ######################## | ||
| - | ss <- c(1.9, 2.5, 3.2, 3.8, 4.7, 5.5, 5.9, 7.2) | + | dat |
| - | at <- c(22, 33, 30, 42, 38, 49, 42, 55) | + | # data |
| - | mean.ss <- mean(ss) | + | # bankaccount = 통장갯수 |
| - | mean.at <- mean(at) | + | # income = 수입 |
| - | ss.ss <- sum((ss-mean.sa)^2) | + | # famnum = 부양가족수 |
| - | ss.at <- sum((at-mean.at)^2) | + | # IV = 수입 = income |
| - | df <- 8-1 | + | # DV = 통장갯수 = bankaccount |
| - | var.ss <- ss.ss/df | + | # |
| - | var.at <- ss.at/df | + | # 컬럼 이름 바꾸기 (간단하게) |
| - | sd.ss <- sqrt(var.ss) | + | colnames(dat) |
| - | sd.at <- sqrt(var.at) | + | dat |
| - | sp.ssat | + | attach(dat) |
| - | cov.ssat <- sp.ssat/df | + | 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.1702438847.txt.gz · Last modified: by hkimscil
