interaction_effects_in_regression_analysis
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| interaction_effects_in_regression_analysis [2023/06/07 01:22] – [Ex. 2] hkimscil | interaction_effects_in_regression_analysis [2025/06/16 13:00] (current) – [E.g.2] hkimscil | ||
|---|---|---|---|
| Line 6: | Line 6: | ||
| ====== E.g. 1 One category and one continuous ====== | ====== E.g. 1 One category and one continuous ====== | ||
| Data 만들기 | Data 만들기 | ||
| + | < | ||
| + | x< | ||
| + | f1< | ||
| + | modmat< | ||
| + | coeff< | ||
| + | y< | ||
| + | dat< | ||
| + | |||
| + | dat | ||
| + | |||
| + | mod <- lm(y~x*f1) | ||
| + | summary(mod) | ||
| + | |||
| + | library(ggplot2) | ||
| + | library(jtools) # in case not loading, install.packages(" | ||
| + | library(interactions) | ||
| + | |||
| + | interact_plot(mod, | ||
| + | |||
| + | </ | ||
| + | |||
| < | < | ||
| > f1< | > f1< | ||
| Line 15: | Line 36: | ||
| 작물의 무게가 온도와 토양의 질소에 영향을 받을까? 라는 연구문제에서 추출된 데이터. 작물무게에 대한 질소함유량의 영향과 온도의 영향, 그리고 그 두 변인의 상호작용효과에 대해서 알고 싶다. | 작물의 무게가 온도와 토양의 질소에 영향을 받을까? 라는 연구문제에서 추출된 데이터. 작물무게에 대한 질소함유량의 영향과 온도의 영향, 그리고 그 두 변인의 상호작용효과에 대해서 알고 싶다. | ||
| - | < | + | < |
| y | y | ||
| 1 21.8693480 | 1 21.8693480 | ||
| Line 23: | Line 44: | ||
| 5 | 5 | ||
| 6 20.9093423 | 6 20.9093423 | ||
| - | 7 25.8828775 | + | </ |
| - | 8 | + | |
| - | 9 | + | |
| - | 10 20.2008030 | + | |
| - | 11 5.6307366 | + | |
| - | 12 24.5176666 | + | |
| - | 13 2.9836344 | + | |
| - | 14 24.9027322 | + | |
| - | 15 7.1347831 | + | |
| - | 16 21.0629404 | + | |
| - | 17 4.9330174 | + | |
| - | 18 23.3587524 | + | |
| - | 19 11.5338189 | + | |
| - | 20 28.2193423 | + | |
| - | 21 5.9288641 | + | |
| - | 22 4.4854811 | + | |
| - | 23 18.5213789 | + | |
| - | 24 3.5410098 | + | |
| - | 25 14.1031612 | + | |
| - | 26 4.2389757 High 1.241753022 | + | |
| - | 27 23.2650544 High 5.428188895 | + | |
| - | 28 24.0330453 High 5.586834035 | + | |
| - | 29 16.6518724 High 3.913568701 | + | |
| - | 30 4.2317570 High 1.012214390 | + | |
| - | 31 26.1115118 High 5.969692939 | + | |
| - | 32 13.1004694 High 3.023571330 | + | |
| - | 33 39.8678989 High 9.080975151 | + | |
| - | 34 16.2227452 High 3.806260177 | + | |
| - | 35 24.8683087 High 5.562874263 | + | |
| - | 36 43.4090915 High 9.818060326 | + | |
| - | 37 -0.2444546 High 0.007114746 | + | |
| - | 38 11.1822149 High 2.640837491 | + | |
| - | 39 43.5794651 High 9.933570819 | + | |
| - | 40 25.3860623 High 5.960662568 | + | |
| - | 41 26.5072704 High 6.139642103 | + | |
| - | 42 30.6778013 High 6.968976315 | + | |
| - | 43 27.4982726 High 6.315991175 | + | |
| - | 44 16.3318687 High 3.883612270 | + | |
| - | 45 37.8328875 High 8.564988615 | + | |
| - | 46 12.6958950 High 2.722899497 | + | |
| - | 47 32.9697332 High 7.371928061 | + | |
| - | 48 39.6831930 High 9.026269785 | + | |
| - | 49 41.7586348 High 9.542581048 | + | |
| - | 50 15.9704872 High 3.644464843</ | + | |
| < | < | ||
| Line 118: | Line 96: | ||
| ====== Two category variables ====== | ====== Two category variables ====== | ||
| - | < | + | < |
| + | > set.seed(12) | ||
| > f1< | > f1< | ||
| > f2< | > f2< | ||
| Line 294: | Line 273: | ||
| - f1High:f2C : 질소가 High이고 온도도 High인 상태 -1.16 감소한다. | - f1High:f2C : 질소가 High이고 온도도 High인 상태 -1.16 감소한다. | ||
| - | < | + | <code> |
| - | {{: | + | > interact_plot(mod2, |
| + | </ | ||
| + | {{: | ||
| + | < | ||
| + | > interact_plot(mod2, | ||
| + | </ | ||
| + | {{: | ||
| + | : | ||
| ====== Two continuous variables ====== | ====== Two continuous variables ====== | ||
| < | < | ||
| Line 401: | Line 387: | ||
| - (위의 마지막 식에서) x1:x2 = x1*x2 : 질소량이 1씩 증가할 때 마다, 온도의 영향력은 1.5식 증가한다. 예를 들면 질소량이 0일 경우, 온도와 작물 간의 기울기는 약 2인데, 질소의 양이 1 증가하고 온도가 1 증가하면 기울기는 2 + 1.5 = 3.5가 된다. | - (위의 마지막 식에서) x1:x2 = x1*x2 : 질소량이 1씩 증가할 때 마다, 온도의 영향력은 1.5식 증가한다. 예를 들면 질소량이 0일 경우, 온도와 작물 간의 기울기는 약 2인데, 질소의 양이 1 증가하고 온도가 1 증가하면 기울기는 2 + 1.5 = 3.5가 된다. | ||
| - <WRAP box>< | - <WRAP box>< | ||
| - | x1=1,x2=1: 0.97 + *3.5 x1 + -1 x2 | + | # 0.97 = 1 로 보면 |
| - | x1=2,x2=2: 0.97 + *5.0 x1 + -1 x2 | + | x2=1: 0.97 + *3.5 x1 + -1 (1=x2) |
| - | x1=3,x2=3: 0.97 + *6.5 x1 + -1 x2 | + | 0 + 3.5 x1 |
| - | x1=4,x2=4: 0.97 + *8.0 x1 + -1 x2 | + | x2=2: 0.97 + *5.0 x1 + -1 (2=x2) |
| - | x1=5,x2=5: 0.97 + *9.5 x1 + -1 x2</ | + | -1 + 5.0 x1 |
| + | x2=3: 0.97 + *6.5 x1 + -1 (3=x2) | ||
| + | -2 + 6.5 x1 | ||
| + | x2=4: 0.97 + *8.0 x1 + -1 (4=x2) | ||
| + | -3 + 8.0 x1 | ||
| + | x2=5: 0.97 + *9.5 x1 + -1 (5=x2) | ||
| + | -4 + 9.5 x1 | ||
| + | </ | ||
| < | < | ||
| *(1.995115 + 1.499595*x2): | *(1.995115 + 1.499595*x2): | ||
| Line 427: | Line 420: | ||
| ====== E.g.2 ====== | ====== E.g.2 ====== | ||
| {{: | {{: | ||
| - | Download the data file to c:/ | + | < |
| - | do | + | # states.data <- readRDS(" |
| - | < | + | states.data <- readRDS(url("http://commres.net/ |
| + | </ | ||
| Or, read the above data file directly | Or, read the above data file directly | ||
| Line 477: | Line 471: | ||
| </ | </ | ||
| < | < | ||
| - | > data.info <- data.frame(attributes(data)[c(" | + | > data.info <- data.frame(attributes(states.data)[c(" |
| > # attributes(data) reveals various attributes of the data file, | > # attributes(data) reveals various attributes of the data file, | ||
| > # which contains variable names and labels. | > # which contains variable names and labels. | ||
| Line 691: | Line 685: | ||
| s.n.i <- summary(n.i) | s.n.i <- summary(n.i) | ||
| - | s.n12i | + | s.n.12i |
| # y hat ~ 1048 + -0.003917 x1 + -3.809 x2 + 0.000249 x1 x2 | # y hat ~ 1048 + -0.003917 x1 + -3.809 x2 + 0.000249 x1 x2 | ||
| Line 699: | Line 693: | ||
| e.mm1 <- mean(expense)-sd(expense) | e.mm1 <- mean(expense)-sd(expense) | ||
| e.m0 <- mean(expense) | e.m0 <- mean(expense) | ||
| - | e.mp1 <- mean(expxense)+sd(expense) | + | e.mp1 <- mean(expense)+sd(expense) |
| e.mp2 <- mean(expense)+(2*sd(expense)) | e.mp2 <- mean(expense)+(2*sd(expense)) | ||
| Line 729: | Line 723: | ||
| </ | </ | ||
| + | < | ||
| + | > n.1 <- lm(csat~expense) | ||
| + | > n.2 <- lm(csat~percent) | ||
| + | > n.12 <- lm(csat~expense+percent) | ||
| + | > n.12i <- lm(csat~expense*percent) | ||
| + | > n.1i <- lm(csat~expense+expense: | ||
| + | > n.2i <- lm(csat~percent+expense: | ||
| + | > n.2i.temp <- lm(csat~percent+percent: | ||
| + | > n.i <- lm(csat~expense: | ||
| + | > | ||
| + | > s.n.1 <- summary(n.1) | ||
| + | > s.n.2 <- summary(n.2) | ||
| + | > s.n.12 <- summary(n.12) | ||
| + | > s.n.12i <- summary(n.12i) | ||
| + | > s.n.1i <- summary(n.1i) | ||
| + | > s.n.2i <- summary(n.2i) | ||
| + | > s.n.2i.temp <- summary(n.2i.temp) | ||
| + | > s.n.i <- summary(n.i) | ||
| + | > | ||
| + | > s.n.12i | ||
| + | |||
| + | Call: | ||
| + | lm(formula = csat ~ expense * percent) | ||
| + | |||
| + | Residuals: | ||
| + | | ||
| + | -65.36 -19.61 | ||
| + | |||
| + | Coefficients: | ||
| + | | ||
| + | (Intercept) | ||
| + | expense | ||
| + | percent | ||
| + | expense: | ||
| + | --- | ||
| + | Signif. codes: | ||
| + | |||
| + | Residual standard error: 30.8 on 47 degrees of freedom | ||
| + | Multiple R-squared: | ||
| + | F-statistic: | ||
| + | |||
| + | > | ||
| + | > # y hat ~ 1048 + -0.003917 x1 + -3.809 x2 + 0.000249 x1 x2 | ||
| + | > # y hat ~ 1048 + -0.003917 x1 + (-3.809 + 0.000249 x1) x2 | ||
| + | > # x2를 (percent를) 중심으로 보기 | ||
| + | > | ||
| + | > e.mm1 <- mean(expense)-sd(expense) | ||
| + | > e.m0 <- mean(expense) | ||
| + | > e.mp1 <- mean(expense)+sd(expense) | ||
| + | > e.mp2 <- mean(expense)+(2*sd(expense)) | ||
| + | > | ||
| + | > # x1의 case가 4가지 (holding constants) | ||
| + | > k <- c(e.mm1, e.m0, e.mp1, e.mp2) | ||
| + | > ic <- 1048 + (-0.003917*k) | ||
| + | > slp <- -3.809 + (0.000249*k) | ||
| + | > ic | ||
| + | [1] 1033 1027 1022 1017 | ||
| + | > slp | ||
| + | [1] -2.854 -2.505 -2.156 -1.807 | ||
| + | > | ||
| + | > # y hat ~ 1032.979 - 2.85 x2 | ||
| + | > # y hat ~ 1027.491 - 2.51 x2 | ||
| + | > # y hat ~ 1022.002 - 2.16 x2 | ||
| + | > # y hat ~ 1016.514 - 1.81 x2 | ||
| + | > | ||
| + | > interact_plot(n.12i, | ||
| + | + pred = " | ||
| + | + modx = " | ||
| + | + | ||
| + | > # or | ||
| + | > mne <- min(expense) | ||
| + | > mxe <- max(expense) | ||
| + | > kk <- seq(mne, mxe, by = 2000) | ||
| + | > interact_plot(n.12i, | ||
| + | + pred = " | ||
| + | + modx = " | ||
| + | + | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | 아래 그림에서처럼 대학지원 퍼센티지가 높아지면 성적이 떨어지는 경향을 보이는데, | ||
| {{: | {{: | ||
| + | |||
| + | ===== 언제 interaction effect를 분석에 넣는가? ===== | ||
| + | interaction effects가 significant할 때에 넣는다 | ||
| + | significant하지 않을 때에는 additive model을 (+사인 모델) 사용한다. | ||
| ===== One categorical IV ===== | ===== One categorical IV ===== | ||
| Line 838: | Line 917: | ||
| [5] " | [5] " | ||
| </ | </ | ||
| - | + | 아래의 경우 interaction effect는 중요한 의미를 갖는다. additive model에서는 murder가 중요한 역할을 하지 않지만, interactive model에서는 Illiteracy와 결합하여 중요한 역할을 하는 것으로 해석될 수 있다. | |
| - | < | + | < |
| + | fit <- lm(Income ~ Illiteracy + Murder, data = as.data.frame(state.x77)) | ||
| + | fiti <- lm(Income ~ Illiteracy * Murder, data = as.data.frame(state.x77)) | ||
| + | summary(fit) | ||
| summary(fiti) | summary(fiti) | ||
| + | </ | ||
| + | < | ||
| + | > fit <- lm(Income ~ Illiteracy + Murder, data = as.data.frame(state.x77)) | ||
| + | > fiti <- lm(Income ~ Illiteracy * Murder, data = as.data.frame(state.x77)) | ||
| + | > summary(fit) | ||
| + | |||
| + | Call: | ||
| + | lm(formula = Income ~ Illiteracy + Murder, data = as.data.frame(state.x77)) | ||
| + | |||
| + | Residuals: | ||
| + | | ||
| + | -880.9 -397.3 | ||
| + | |||
| + | Coefficients: | ||
| + | Estimate Std. Error t value Pr(> | ||
| + | (Intercept) | ||
| + | Illiteracy | ||
| + | Murder | ||
| + | --- | ||
| + | Signif. codes: | ||
| + | |||
| + | Residual standard error: 560 on 47 degrees of freedom | ||
| + | Multiple R-squared: | ||
| + | F-statistic: | ||
| + | |||
| + | > summary(fiti) | ||
| + | |||
| Call: | Call: | ||
| lm(formula = Income ~ Illiteracy * Murder, data = as.data.frame(state.x77)) | lm(formula = Income ~ Illiteracy * Murder, data = as.data.frame(state.x77)) | ||
| Residuals: | Residuals: | ||
| - | | + | |
| - | -955.20 -325.99 10.66 299.96 1892.12 | + | -955.2 -326.0 10.7 300.0 1892.1 |
| Coefficients: | Coefficients: | ||
| Estimate Std. Error t value Pr(> | Estimate Std. Error t value Pr(> | ||
| - | (Intercept) | + | (Intercept) |
| - | Illiteracy | + | Illiteracy |
| - | Murder | + | Murder |
| - | Illiteracy: | + | Illiteracy: |
| --- | --- | ||
| Signif. codes: | Signif. codes: | ||
| - | Residual standard error: 520.1 on 46 degrees of freedom | + | Residual standard error: 520 on 46 degrees of freedom |
| - | Multiple R-squared: | + | Multiple R-squared: |
| - | F-statistic: | + | F-statistic: |
| > | > | ||
| </ | </ | ||
| - | |||
| < | < | ||
| Line 870: | Line 978: | ||
| {{: | {{: | ||
| - | < | ||
| - | interact_plot(fitiris, | ||
| - | {{: | + | ====== |
| - | + | ||
| - | ====== | + | |
| - | Use Cars93 dataset. | + | |
| - | + | ||
| - | What is affecting city mileage? | + | |
| - | 1. EngineSize | + | |
| - | 2. EngineSize * Origin | + | |
| - | 3. EngineSize + Length | + | |
| - | 4. EngineSize * Length | + | |
| - | + | ||
| - | Print out the summaries of each lm + interaction graph. | + | |
| - | Interprete what has been found. | + | |
| - | + | ||
| - | ====== Eg. 2 ====== | + | |
| < | < | ||
| # Load the data | # Load the data | ||
| Line 908: | Line 1000: | ||
| </ | </ | ||
| + | ====== Ex. ====== | ||
| + | Use Cars93 dataset. | ||
| + | |||
| + | What is affecting city mileage? | ||
| + | 1. EngineSize | ||
| + | 2. EngineSize * Origin | ||
| + | 3. EngineSize + Length | ||
| + | 4. EngineSize * Length | ||
| + | |||
| + | Print out the summaries of each lm + interaction graph. | ||
| + | Interprete what has been found. | ||
| + | |||
| + | |||
| ====== Ex. 3 ====== | ====== Ex. 3 ====== | ||
| < | < | ||
interaction_effects_in_regression_analysis.1686068575.txt.gz · Last modified: by hkimscil
