拓端tecdat|R語言線性混合效應模型(固定效應&隨機效應)和交互可視化3案例

 

 

在本文中,咱們將用R語言對數據進行線性混合效應模型的擬合,而後可視化你的結果。ide

線性混合效應模型是在有隨機效應時使用的,隨機效應發生在對隨機抽樣的單位進行屢次測量時。來自同一天然組的測量結果自己並非獨立的隨機樣本。所以,這些單位或羣體被假定爲從一個羣體的 "人口 "中隨機抽取的。示例狀況包括測試

  • 當你劃分並對各部分進行單獨實驗時(隨機組)。
  • 當你的抽樣設計是嵌套的,如橫斷面內的四分儀;林地內的橫斷面;地區內的林地(橫斷面、林地和地區都是隨機組)。
  • 當你對相關個體進行測量時(家庭是隨機組)。
  • 當你重複測量受試者時(受試者是隨機組)。

混合效應的線性模型在R命令lme4和lmerTest包中實現。另外一個選擇是使用nmle包中的lme方法。lme4中用於計算近似自由度的方法比nmle包中的方法更準確一些,特別是在樣本量不大的時候。優化


測量斑塊長度

這第一個數據集是從Griffith和Sheldon(2001年,《動物行爲學》61:987-993)的一篇論文中提取的,他們在兩年內對瑞典哥特蘭島上的30只雄性領頭鶲的白色額斑進行了測量。該斑塊在吸引配偶方面很重要,但其大小每一年都有變化。咱們在這裏的目標是估計斑塊長度(毫米)。lua

 

讀取和檢查數據

  1. 從文件中讀取數據。
  2. 查看數據的前幾行,看是否正確讀取。
  3. 建立一個顯示兩年研究中每隻飛鳥的測量對圖。能夠嘗試製做點陣圖。是否有證據代表不一樣年份之間存在着測量變異性?

 

構建線性混合效應模型

  1. 對數據進行線性混合效應模型,將單個鳥類視爲隨機組。注:對每隻鳥的兩次測量是在研究的連續年份進行的。爲了簡單起見,在模型中不包括年份。在R中把它轉換成一個字符或因子,這樣它就不會被看成一個數字變量。按照下面步驟(2)和(3)所述,用這個模型從新計算可重複性。重複性的解釋如何改變?
  2. 從保存的lmer對象中提取參數估計值(係數)。檢查隨機效應的輸出。隨機變異的兩個來源是什麼?固定效應指的是什麼?
  3. 在輸出中,檢查隨機效應的標準差。應該有兩個標準差:一個是"(截距)",一個是 "殘差"。這是由於混合效應模型有兩個隨機變異的來源:鳥類內部重複測量的差別,以及鳥類之間額斑長度的真實差別。這兩個來源中的哪個對應於"(截距)",哪個對應於 "殘差"?
  4. 同時檢查固定效應結果的輸出。模型公式中惟一的固定效應是全部長度測量的平均值。它被稱爲"(截距)",但不要與隨機效應的截距相混淆。固定效應輸出給了你平均值的估計值和該估計值的標準偏差。注意固定效應輸出是如何提供均值估計值的,而隨機效應輸出則提供方差(或標準差)的估計值。
  5. 從擬合模型中提取方差份量,估計各年斑塊長度的可重複性*。
  6. 解釋上一步中得到的重複性測量結果。若是你獲得的重複性小於1.0,那麼個體內測量結果之間的變化來源是什麼。僅是測量偏差嗎?
  7. 產生一個殘差與擬合值的圖。注意到有什麼問題?彷佛有一個輕微的正向趨勢。這不是一個錯誤,而是最佳線性無偏預測器(BLUPs)"收縮 "的結果。

 

分析步驟

讀取並檢查數據。設計

head(fly)

 

# 點陣圖
chart(patch ~ bird)

 

 

# 但顯示成對數據的更好方法是用成對的交互圖來顯示
plot(res=patch, x = year)

 

 

# 優化版本
plot(y = patch, x = factor(year), theme_classic)

擬合一個線性混合效應模型。summary()的輸出將顯示兩個隨機變異的來源:單個鳥類之間的變異(鳥類截距),以及對同一鳥類進行的重複測量之間的變異(殘差)。每一個來源都有一個估計的方差和標準差。固定效應只是全部鳥類的平均值--另外一個 "截距"。 3d

# 1.混合效應模型
# 2. 參數估計
summary(z)

 

# 5. 方差份量
VarCorr(z)

 

# 可重複性
1.11504^2/(1.11504^2 + 0.59833^2)
## [1] 0.7764342
# 7.殘差與擬合值的關係圖
plot(z)

 

 


金魚視覺

Cronly-Dillon和Muntz(1965; J. Exp. Biol 42: 481-493)用視運動反應來測量金魚的色覺。在這裏,咱們將對數據進行擬合,包括測試的所有波長。5條魚中的每一條都以隨機的順序在全部的波長下被測試。敏感度的值大代表魚能夠檢測到低的光強度。視運動反應的一個重要特色是,魚不習慣,在一個波長下的視覺敏感度的測量不太可能對後來在另外一個波長下的測量產生影響。rest

 

讀取和檢查數據

  1. 讀取文件中的數據,並查看前幾行以確保讀取正確。
  2. 使用交互圖來比較不一樣光波長實驗下的個體魚的反應。
  3. 使用什麼類型的實驗設計?*這將決定在擬合數據時使用的線性混合模型。

 

構建線性混合效應模型

  1. 對數據擬合一個線性混合效應模型。能夠用lmer()來實現。發現「畸形擬合」,「boundary (singular) fit: see ?isSingular
  2. 繪製擬合(預測)值**。每條魚的預測值和觀察值之間的差別表明殘差。
  3. 你在(1)中作了什麼假設?建立一個殘差與擬合值的圖,以檢查這些假設之一。
  4. 從保存的lmer對象中提取參數估計值。檢查固定效應的結果。給出的係數與使用lm分析的分類變量的解釋相同。
  5. 檢查隨機效應的輸出。咱們的混合效應模型中再次出現了兩個隨機偏差的來源。它們是什麼?其中哪一個對應於輸出中的"(截距)",哪一個對應於 "殘差"?注意,在這個數據集中,其中一個變化源的估計標準差很是小。這就是畸形擬合信息背後的緣由。魚類之間的方差不太可能真的爲零,可是這個數據集很是小,因爲抽樣偏差,可能會出現低方差估計。
  6. 生成基於模型的每一個波長的平均敏感度的估計。
  7. 各個波長之間的差別是否顯著?生成lmer對象的方差分析表。這裏測試的是什麼效應,隨機效應仍是固定效應?解釋方差分析結果。

*這是一個 "按實驗對象 "的重複測量設計,由於每條魚在每一個實驗下被測量一次。它本質上與隨機徹底區塊設計相同(把每條魚看做是 "區塊")。code

*可視化是首選,由於數據和擬合值都被繪製出來。請注意魚與魚之間的預測值是多麼的類似。這代表在這項研究中,個體魚之間的估計差別很是小。對象

***通常來講,在方差分析表中只測試固定效應。使用測試隨機效應中沒有方差的無效假設是可能的。blog

分析步驟

讀取並檢查數據。

x <- read.csv("fish.csv", 
        stringsAsFactors = FALSE)
head(x)

擬合一個線性混合效應模型。

該模型假設全部擬合值的殘差爲正態分佈,方差相等。該方法還假設個體魚之間的隨機截距爲正態分佈。該方法還假設組(魚)的隨機抽樣,對同一魚的測量之間沒有影響。

# # 1. 擬合混合效應模型。
## boundary (singular) fit: see ?isSingular

 

# 2. 這就爲每條魚分別繪製了擬合值。
vis(z)

 

 

 

# 3.測試假設
plot(z)

 

# 4. 提取參數估計值
summary(z)

 

# 6.  基於模型的平均敏感度估計 
means(z)

 

# 7. ANOVA方差分析

 


蓍草酚類物質的濃度

項目實驗性地調查了國家公園的北方森林生態系統中施肥和食草的影響(Krebs, C.J., Boutin, S. & Boonstra, R., eds (2001a) Ecosystem dynamics of the Boreal Forest.Kluane項目. 牛津大學出版社,紐約)) ,目前的數據來自於一項關於植物資源和食草動物對底層植物物種防護性化學的影響的研究。

16個5x5米的小區中的每個都被隨機分配到四個實驗之一。1)用柵欄圍起來排除食草動物;2)用N-P-K肥料施肥;3)用柵欄和施肥;4)未實驗的對照。而後,16塊地中的每一塊被分紅兩塊。每塊地的一側(隨機選擇)在20年的研究中持續接受實驗。每塊地的另外一半在頭十年接受實驗,以後讓它恢復到未實驗的狀態。這裏要分析的數據記錄了歐蓍草(Achillea millefolium)中酚類物質的濃度(對植物防護化合物的粗略測量),歐蓍草是地塊中常見的草本植物。測量單位是每克乾重毫克丹寧酸當量。

 

可視化數據

  1. 從文件中讀取數據。
  2. 檢查前幾行的數據。實驗是做爲一個有四個層次的單一變量給出的(而不是做爲兩個變量,圍牆和肥料,用2x2因子設計的模型)。持續時間表示半塊土地是否接受了整整20年的實驗,或者是否在10年後中止實驗。變量 "ch "是蓍草中酚類物質的濃度。
  3. 畫一張圖來講明不一樣實驗和持續時間類別中蓍草中的酚類物質的濃度。在每一個實驗和持續時間水平的組合中沒有不少數據點,因此按組畫條形圖可能比按組畫箱形圖更好。
  4. 添加線段來鏈接成對的點。

 

擬合一個線性混合效應模型

  1. 使用的是什麼類型的實驗設計?*這將決定對數據的線性混合模型的擬合。
  2. 在沒有實驗和持續時間之間的交互做用的狀況下,對數據進行線性混合模型擬合。使用酚類物質的對數做爲因變量,由於對數轉換改善了數據與線性模型假設的擬合。
  3. 可視化模型對數據的擬合。按持續時間(若是xvar是實驗)或實驗(若是xvar是持續時間)分開面板。visreg()不會保留配對,但會容許你檢查殘差。
  4. 如今重複模型擬合,但此次包括實驗和持續時間之間的相互做用。將模型與數據的擬合狀況可視化。兩個模型擬合之間最明顯的區別是什麼,一個有交互做用,另外一個沒有?描述包括交互項的模型 "容許 "什麼,而沒有交互項的模型則不容許。判斷,哪一個模型最適合數據?
  5. 使用診斷圖檢查包括交互項的模型的線性混合模型的一個關鍵假設。
  6. 使用擬合模型對象估計線性模型的參數(包括交互做用)。請注意,如今固定效應表中有許多係數。
  7. 在上一步的輸出中,你會看到 "隨機效應 "標籤下的 "Std.Dev "的兩個數量。解釋一下這些數量指的是什麼。
  8. 來估計全部固定效應組合的模型擬合平均值。
  9. 生成固定效應的方差分析表。哪些項在統計學上是顯著的?
  10. 默認狀況下,lmerTest將使用Type 3的平方和來測試模型項,而不是按順序(Type 1)。用類型1來重複方差分析表。結果有什麼不一樣嗎?**

*實驗採用了分塊設計,即整個塊被隨機分配到不一樣的實驗,而後將第二種實驗(持續時間)的不一樣水平分配到塊的一半。

*應該沒有差異,由於設計是徹底平衡的。

分析步驟

閱讀並檢查數據。

一個好的策略是對實驗類別進行排序,把對照組放在前面。這將使線性模型的輸出更加有用。

# 1. 讀取數據
# 2. 檢查
head(x)

 

# 3. 分組帶狀圖
# 首先,從新排列實驗類別
factor(treat,levels=c("cont","exc","fer","bo"))
plot(data = x, y = log(phe), x = treat, fill = dura, color = dura)

 

 

# 4. 在多個面板上分別繪製成對的數據
plot(data = x,y = log(ach, x = dur, fill = dur, col = dur)

 

 

擬合一個線性混合效應模型。固定效應是 "實驗 "和 "持續時間",而 "塊"是隨機效應。擬合交互做用時,實驗水平之間的差別大小在持續時間水平之間會有所不一樣。

因爲隨機效應也存在(塊),係數表將顯示兩個隨機變化來源的方差估計。一個是擬合模型的殘差的方差。第二個是(隨機)塊截距之間的方差。

# 2. 擬合混合效應模型-無交互做用
# 3. 可視化
vis(z)

# 4. 包括交互項和再次視覺化
z.int <- lmer(log(phen.ach) ~ treatment * duration + (1|plot), data=x)

vis(z.int, overlay = TRUE)

 

# 5. 繪製圖表以檢驗方差齊性(以及正態性)
plot(z)

 

# 6. 係數
summary(z)

 

# 8. 模型擬合平均值
means(z, data = x)

# 9. 方差分析表
anova(z) # lmerTest中默認爲3類平方和。

 

# 10.  改成1類
anova(z, type = 1)


相關文章
相關標籤/搜索