請撰寫一個函數 checkNormality()
用來檢視輸入的 vector (x
) 趨近常態分配的程度。checkNormality()
達成此目的的方式是將傳入的資料繪製成直方圖,再於直方圖之上疊加常態分配的機率密度函數曲線。
要求:
x
長度自動調整長條的數量 (可透過 geom_histogram()
的參數 bins
進行設置。請自行實驗找出適合的方式去自動調整 bins
的數量,讓繪製出來的直方圖盡量平滑沒有斷裂1)geom_point()
繪製常態分配機率密度之曲線。常態分配的參數需依據傳入的 vector x
之平均與標準差決定。library(ggplot2)
function(x) {
checkNormality <-# Modify the code below
seq(min(x), max(x), by = 0.01)
x_seq <- dnorm(x_seq, mean = mean(x), sd = sd(x))
y <- data.frame(x = x_seq, y = y)
norm <-
as.integer(length(x)^0.57)
bins <- ggplot() +
plt <- geom_histogram(mapping = aes(x = x,
y = ..density..),
bins = bins, fill = "pink", color = "grey") +
geom_point(data = norm, mapping = aes(x, y), size = 0.1)
return(plt)
}
###### Do not modify the code below ########
set.seed(1914)
rnorm(200)
d <-checkNormality(d)
rnorm(1000)
d <-checkNormality(d)
runif(1000)
d <-checkNormality(d)
範例輸出:
請根據上圖的因果結構 (箭號代表因果關係) 模擬出 G, P, C 這三個變項的資料,並將結果儲存成一個 data frame df1
:
set.seed(1)
##### Do not modify the code above ######
# Write your code here
500
N <- rnorm(N)
G <- rnorm(N, mean = G)
P <- rnorm(N, mean = G + P)
C <- data.frame(G = G, P = P, C = C)
df1 <-
##### Do not modify the code below #####
head(df1)
#> G P C
#> 1 -0.6264538 -0.5491507 -0.04063941
#> 2 0.1836433 -0.1132253 1.18234985
#> 3 -0.8356286 -2.0188709 -3.72527710
#> 4 1.5952808 1.6065735 3.41258588
#> 5 0.3295078 1.3211088 1.72001223
#> 6 -0.8204684 0.7734991 -1.70961817
請使用上一題的 df1
繪製出此圖:
# Write your code here
function(df)
plotPairs <-::pairs.panels(df, lm = T, smooth = F, ellipses = F, rug = F, hist.col = "#F8766D")
psychplotPairs(df1)
上方的因果結構中,G, P, U, C 可以被歸類成三種因子:混淆因子 (Confounder)、對撞因子 (Collider) 與中介因子 (Mediator)
請將 G, P, U, C 這四個因子進行分類 (請在正確的類別填入 G, P, U, C):
請根據上圖的因果結構模擬出 G, P, U, C 這四個變項的資料,並將結果儲存成一個 data frame df2
:
1
1
2
0.5
2
set.seed(1)
##### Do not modify the code above ######
500
N <- 1
e_UP <- 1
e_UC <- 2
e_GP <- 0.5
e_GC <- 2
e_PC <-
rnorm(N)
G <- rnorm(N)
U <- rnorm(N, mean = e_GP*G + e_UP*U)
P <- rnorm(N, mean = e_GC*G + e_PC*P + e_UC*U)
C <- data.frame(G = G, U = U, P = P, C = C)
df2 <-
##### Do not modify the code below
head(df2)
# Should print out:
#> G U P C
#> 1 -0.6264538 0.07730312 -0.04063941 0.5328409
#> 2 0.1836433 -0.29686864 1.18234985 1.2343397
#> 3 -0.8356286 -1.18324224 -3.72527710 -8.1580295
#> 4 1.5952808 0.01129269 3.41258588 6.6930951
#> 5 0.3295078 0.99160104 1.72001223 5.1353315
#> 6 -0.8204684 1.59396745 -1.70961817 -2.4174775
#> G U P C
#> 1 -0.6264538 0.07730312 -0.04063941 0.5328409
#> 2 0.1836433 -0.29686864 1.18234985 1.2343397
#> 3 -0.8356286 -1.18324224 -3.72527710 -8.1580295
#> 4 1.5952808 0.01129269 3.41258588 6.6930951
#> 5 0.3295078 0.99160104 1.72001223 5.1353315
#> 6 -0.8204684 1.59396745 -1.70961817 -2.4174775
假定 vector x
是來自連續型機率分配如常態分配、均等分配等。↩︎