##借用語法、warning=F, error=F, message=F關閉雜訊
library(dplyr)
library(ggplot2) 
library(viridis) 
library(ggthemes)
library(tidyr)
library(hrbrthemes)


##讀檔案,names重新命名
pacman::p_load(datasets)
data("ChickWeight", package="datasets")
dta <- datasets::ChickWeight
##看一下數據形式
head(dta)
##   weight Time Chick Diet
## 1     42    0     1    1
## 2     51    2     1    1
## 3     59    4     1    1
## 4     64    6     1    1
## 5     76    8     1    1
## 6     93   10     1    1
##X為時間、Y為重量做相關分析,找到截距,斜率為分析後的X值
lsfit(x=dta$Time, y=dta$weight)$coef
## Intercept         X 
## 27.467425  8.803039
##看重量、時間、Chick,以及時間和重量交互作用下的截距
coef(lm(weight ~ Time + Chick + Time:weight, data=dta))
##  (Intercept)         Time      Chick.L      Chick.Q      Chick.C      Chick^4 
##  51.56049807   0.66348378  58.73124329 -14.97005467   0.60237337  -3.52899750 
##      Chick^5      Chick^6      Chick^7      Chick^8      Chick^9     Chick^10 
##  -0.63149367  16.13793945   1.73961841  -1.71851863   3.27689112  -8.48266982 
##     Chick^11     Chick^12     Chick^13     Chick^14     Chick^15     Chick^16 
## -11.01818415   2.78747942  15.50391911   4.09981110 -11.70632507  -8.04995268 
##     Chick^17     Chick^18     Chick^19     Chick^20     Chick^21     Chick^22 
##   4.89513430   8.28059138  -5.89028936   6.74443467   4.22604442  -6.78963907 
##     Chick^23     Chick^24     Chick^25     Chick^26     Chick^27     Chick^28 
##   0.58256507   3.18350253 -14.54958622  10.92230853  13.44098041   4.71747322 
##     Chick^29     Chick^30     Chick^31     Chick^32     Chick^33     Chick^34 
##  -3.98657494  -4.12914313   0.33122198   7.82372044  -0.39582997  -2.49200246 
##     Chick^35     Chick^36     Chick^37     Chick^38     Chick^39     Chick^40 
##  -0.43046342  -7.23015158  -1.29807283  -6.76366489  -2.25396284  13.29256880 
##     Chick^41     Chick^42     Chick^43     Chick^44     Chick^45     Chick^46 
##  -4.68442354 -12.28063762 -14.60510339   5.03697799  -4.24804850   8.57835545 
##     Chick^47     Chick^48     Chick^49  weight:Time 
##  -2.09308262  -8.66687382  -8.21025908   0.03668314
##sapply結果以向量、矩陣、列表的形式輸出,function為重複執行指令,意思是指找出和重量所有有關變項的迴歸
y <- dta[, "weight"]
res <- sapply(dta, function(x) lm(y ~ x))
lapply(res[1:2], broom::tidy)
## $weight
## # A tibble: 2 x 5
##   term         estimate std.error statistic   p.value
##   <chr>           <dbl>     <dbl>     <dbl>     <dbl>
## 1 (Intercept) -5.67e-14  2.13e-15  -2.67e 1 8.57e-103
## 2 x            1.00e+ 0  1.51e-17   6.63e16 0.       
## 
## $Time
## # A tibble: 2 x 5
##   term        estimate std.error statistic   p.value
##   <chr>          <dbl>     <dbl>     <dbl>     <dbl>
## 1 (Intercept)    27.5      3.04       9.05 2.26e- 18
## 2 x               8.80     0.240     36.7  5.02e-153
#經過老師建議,以lattice語法看重量與時間關係圖,再以Chick為單位分別作圖,確實Chick不同,迴歸線也都不同,那麼迴歸係數也應該是不同
lattice::xyplot(weight ~ Time | Chick, data=ChickWeight, type=c('p','r','g'))

##split為切割資料,若先切Chick優先作為第一層,分別看重量和時間的斜率,完全一樣答案?!
#回頭查第六次上課,語法中(dta$Chick))是一樣但主要參考x$weight ~ x$Time資料必須指定切割,才會按照指定資料做迴歸
m0 <- lapply(split(dta, (dta$Chick)), 
             function(x) lm(x$weight ~ x$Time))
sapply(m0, coef)
##             18        16       15        13         9        20        10
## (Intercept) 39 43.392857 46.83333 43.384359 52.094086 37.667826 38.695054
## x$Time      -2  1.053571  1.89881  2.239601  2.663137  3.732718  4.066102
##                     8        17       19        4         6        11        3
## (Intercept) 43.727273 43.030706 31.21222 32.86568 44.123431 47.921948 23.17955
## x$Time       4.827273  4.531538  5.08743  6.08864  6.378006  7.510967  8.48737
##                     1        12         2        5       14         7        24
## (Intercept) 24.465436 21.939797 24.724853 16.89563 20.52488  5.842535 53.067766
## x$Time       7.987899  8.440629  8.719861 10.05536 11.98245 13.205264  1.207533
##                    30        22        23        27        28       26       25
## (Intercept) 39.109666 40.082590 38.428074 29.858569 23.984874 20.70715 19.65119
## x$Time       5.898351  5.877931  6.685978  7.379368  9.703676 10.10316 11.30676
##                    29       21        33        37       36       31       39
## (Intercept)  5.882771 15.56330 45.830283 29.608834 25.85403 19.13099 17.03661
## x$Time      12.453487 15.47512  5.855241  6.677053  9.99047 10.02617 10.73710
##                   38       32       40        34        35        44        45
## (Intercept) 10.67282 13.69173 10.83830  5.081682  4.757979 44.909091 35.673121
## x$Time      12.06051 13.18091 13.44229 15.000151 17.258811  6.354545  7.686432
##                    43        41        47        49        46       50       42
## (Intercept) 52.185751 39.337922 36.489790 31.662986 27.771744 23.78218 19.86507
## x$Time       8.318863  8.159885  8.374981  9.717894  9.738466 11.33293 11.83679
##                    48
## (Intercept)  7.947663
## x$Time      13.714718