Как установить несколько вложенных уровней в перманенте в R? - PullRequest
0 голосов
/ 27 сентября 2018

Мне нужна помощь в кодировании вложенных анализов пермановых в R. У меня есть матрица расстояний и я хочу разделить дисперсию между 3 вложенными уровнями.Я использую функцию adonis, и из того, что я понял, я также хочу повторить вложенную структуру в параметре слоев, чтобы случайная перетасовка была ограничена в пределах уровней.Я впервые использую такой подход и думаю, что что-то упустил.Можно ли установить несколько вложенных уровней в параметре страты?До сих пор мне удавалось выступать до этого момента, но я не уверен, что это верное направление.Когда я пытаюсь установить вложенные уровни в слоях, я получаю следующую ошибку:

perm = adonis(lma.dist ~ Family/genus/Spec, strata= Family/genus/Spec, data=df)

> Error in getPermuteMatrix(permutations, n, strata = strata):
object 'Family' not found

Но когда я устанавливаю только один уровень в слоях (или даже без уровня), функция adonis работает нормально. (запустить со всеми наборами данных)

perm2 = adonis(lma.dist ~ Family/genus/Spec, strata= df$Spec, data=df)

Call:
adonis(formula = lma.dist ~ Family/genus/Spec, data = df, strata = df$Family) 
Blocks:  strata 
Permutation: free
Number of permutations: 999

Terms added sequentially (first to last)

                   Df SumsOfSqs MeanSqs F.Model      R2 Pr(>F)    
Family             13   110.262  8.4817 20.5826 0.47732  0.001 ***
Family:genus       12    34.755  2.8963  7.0284 0.15046  0.001 ***
Family:genus:Spec   5     3.155  0.6309  1.5311 0.01366  0.056 .  
Residuals         201    82.828  0.4121         0.35856           
Total             231   231.000                 1.00000           
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

lma.dist - это матричный объект (232 x 232) евклидовых расстояний.Это подмножество:

dput(head(lma.dist))structure(c(0, 0.645, 0.538, 0.538, 0.108, 0.43,0.645, 0, 0.108, 0.108, 0.753, 0.215, 0.538, 0.108, 0, 0, 0.645, 0.108, 0.538, 0.108, 0, 0, 0.645, 0.108, 0.108, 0.753, 0.645, 0.645, 0, 0.538, 0.43, 0.215, 0.108, 0.108, 0.538, 0, 0.43, 0.215, 0.108, 0.108, 0.538, 0, 0, 0.645, 0.538, 0.538, 0.108, 0.43, 0.968, 0.323, 0.43, 0.43, 1.075, 0.538, 0.215, 0.86, 0.753, 0.753, 0.108, 0.645, 0.215, 0.86, 0.753, 0.753, 0.108, 0.645, 0.43, 0.215, 0.108, 0.108, 0.538, 0, 0.215, 0.86, 0.753, 0.753, 0.108, 0.645, 0.108, 0.753, 0.645, 0.645, 0, 0.538, 0.215, 0.86, 0.753, 0.753, 0.108, 0.645, 0, 0.645, 0.538, 0.538, 0.108, 0.43, 0.323, 0.968, 0.86, 0.86, 0.215, 0.753, 0.43, 0.215, 0.108, 0.108, 0.538, 0, 0.43, 1.075, 0.968, 0.968, 0.323, 0.86, 0.215, 0.86, 0.753, 0.753, 0.108, 0.645), .Dim = c(6L, 20L), .Dimnames = list(c("Xl_AP_319","Xl_AP_351", "Xl_AP_326", "Xl_AP_422", "Xl_AP_146", "Xl_AP_188"), c("Xl_AP_319", "Xl_AP_351", "Xl_AP_326", "Xl_AP_422", "Xl_AP_146", "Xl_AP_188", "Xl_AP_252", "Xl_AP_101", "Xl_AP_218", "Xl_CE_334", "Vt_Q16_304", "Vt_Q16_124", "Vt_EF_255", "Vt_EF_159", "Vt_EF_191", "Vt_EF_28", "Vt_CE_199", "Vt_CE_185", "Vt_CE_271", "Vp_Q16_297")))

df - это фрейм данных (232 x 3) с метками (факторами) для Family, рода и Spec.имена строк и имена одинаковы в обеих данных.

dput(head(df[1:20,]))structure(list(Family("Xyridaceae","Xyridaceae", "Xyridaceae","Xyridaceae", "Xyridaceae", "Xyridaceae"), genus =c("Xyris","Xyris", "Xyris", "Xyris", "Xyris", "Xyris"), Spec = c("Xyris longiscapa","Xyris longiscapa", "Xyris longiscapa", "Xyris longiscapa", "Xyris longiscapa", "Xyris longiscapa")), .Names = c("Family", "genus", "Spec"), row.names =("Xl_AP_319","Xl_AP_351", "Xl_AP_326", "Xl_AP_422", "Xl_AP_146", "Xl_AP_188"), class = "data.frame")
...