Ich habe folgende Art von Daten. Ich habe 10 Personen bewertet, die jeweils 10 Mal wiederholt wurden. Ich habe eine 10x10 Beziehungsmatrix (Beziehung zwischen allen Kombinationen der Individuen).
set.seed(1234)
mydata <- data.frame (gen = factor(rep(1:10, each = 10)),
repl = factor(rep(1:10, 10)),
yld = rnorm(10, 5, 0.5))
Bei diesem Gen handelt es sich um verschiedene Pflanzensorten, so dass jede wiederholt angebaut werden kann und der Ertrag gemessen wird. Die Kovarianzmatrix ist ein Maß für die Verwandtschaft durch genetische Ähnlichkeit, berechnet durch ibd-Wahrscheinlichkeiten in separaten Experimenten.
library(lme4)
covmat <- round(nearPD(matrix(runif(100, 0, 0.2), nrow = 10))$mat, 2)
diag(covmat) <- diag(covmat)/10+1
rownames(covmat) <- colnames(covmat) <- levels(mydata$gen)
> covmat
10 x 10 Matrix of class "dgeMatrix"
1 2 3 4 5 6 7 8 9 10
1 1.00 0.08 0.06 0.03 0.09 0.09 0.10 0.08 0.07 0.10
2 0.08 1.00 0.08 0.09 0.04 0.12 0.08 0.08 0.11 0.09
3 0.06 0.08 1.00 0.10 0.05 0.09 0.09 0.07 0.04 0.13
4 0.03 0.09 0.10 1.00 0.02 0.11 0.09 0.06 0.04 0.12
5 0.09 0.04 0.05 0.02 1.00 0.06 0.07 0.05 0.02 0.08
6 0.09 0.12 0.09 0.11 0.06 1.00 0.12 0.08 0.07 0.14
7 0.10 0.08 0.09 0.09 0.07 0.12 1.00 0.08 0.03 0.15
8 0.08 0.08 0.07 0.06 0.05 0.08 0.08 1.00 0.06 0.09
9 0.07 0.11 0.04 0.04 0.02 0.07 0.03 0.06 1.00 0.03
10 0.10 0.09 0.13 0.12 0.08 0.14 0.15 0.09 0.03 1.00
Mein Modell ist:
yld = gen + repl + error
Sowohl gen als auch repl werden als zufällig betrachtet und ich möchte die zufälligen Effektschätzungen erhalten, die jedem Gen zugeordnet sind, jedoch muss ich die Beziehungsmatrix berücksichtigen.
Wenn es zu komplex ist, um verschachtelte Modelle anzupassen, würde ich repl einfach aus dem Modell entfernen, aber im Idealfall werde ich es behalten.
yld = gen + error
Wie kann ich dies mit R-Paketen erreichen, vielleicht mit nlme oder lme4? Ich weiß, dass ASREML das kann, aber ich habe keinen Halt und ich liebe R, weil es sowohl robust als auch frei ist.
quelle
Antworten:
Probieren Sie das
kinship
Paket aus, auf dem basiertnlme
. Weitere Informationen finden Sie in diesem Thread zu R-Sig-Mixed-Modellen. Ich hatte das vergessen, als ich versuchte, es für ein logistisches Modell zu tun. Ein ausgearbeitetes Beispiel finden Sie unter /programming/8245132 .Für nicht normale Antworten müssen Sie das pedigreemm-Paket ändern, das auf lme4 basiert. Es bringt Sie in die Nähe, aber die Beziehungsmatrix muss aus einem Stammbaum erstellt werden. Die folgende Funktion ist eine Modifikation der
pedigreemm
Funktion, die stattdessen eine beliebige Beziehungsmatrix verwendet.Die Verwendung ähnelt der,
pedigreemm
außer dass Sie die Beziehungsmatrix alsrelmat
Argument anstelle des Stammbaums alspedigree
Argument angeben.Dies gilt hier nicht, da Sie zehn Beobachtungen / Einzelperson haben, aber für eine Beobachtung / Einzelperson benötigen Sie eine weitere Zeile in dieser Funktion und einen kleinen Patch
lme4
, um nur eine Beobachtung pro Zufallseffekt zu ermöglichen.quelle
nlme
und es wird etwas Komplizierteres benötigt, dasgen + repl
; Ich denke auch, dass die Korrelation eine dernlme
Kovarianz- / Korrelationsfunktionencovmat
als Parameter aufrufen muss . Die Notation dafür ist wirklich schwierig, um mehr zu sagen, ich würde Pinhiero / Bates zur Hand haben, was ich heute nicht tue.lme(yld ~ 1, data = mydata, random = ~ 1 | gen, correlation = corSymm(value=covmatX, form= ~ gen, fixed=TRUE))
, wocovmatX
eine modifizierte Version von istcovmat
, um es zu machen, wie escorSymm
will. Ich bin mir auch nicht ganz sicher, ob derform
Begriff richtig ist.Diese Antwort ist eine mögliche Erweiterung des Vorschlags von Aaron, der vorgeschlagen hat, Pedigreem zu verwenden. Das Pedigreem kann die Beziehung aus den Projekten wie folgt berechnen: Ich weiß nicht, wie wir eine solche Beziehungsausgabe auf unterschiedliche Weise verwenden können.
Die gemischte Modellanpassung des Pakets basiert auf lme4, da die Syntax für die Hauptfunktion der lmer4-Paketfunktion lmer ähnelt, außer dass Sie das Stammbaumobjekt darin einfügen können.
Ich weiß, dass dies keine perfekte Antwort auf Ihre Frage ist, aber dies kann ein wenig helfen. Ich bin froh, dass Sie diese für mich interessante Frage gestellt haben!
quelle
require(kinship); model1 <- lmekin(yld ~1, random = ~ 1|gen, varlist =list(covmat), data=mydata)
.model1 <- lmekin(yld ~1, random = ~ 1|gen, varlist =list(covmat), data=mydata)
gibt immer noch ein Problem. Entschuldigen Sie die vorzeitige Veröffentlichung. Kann jemand es reparieren?lmer()
in derlme4
Packung erlaubt gekreuzte zufällige Effekte. Hier würden Sie so etwas wie verwendeny ~ (1|gen) + (1|repl)
Für eine vollständige Referenz;
http://www.stat.wisc.edu/~bates/PotsdamGLMM/LMMD.pdf
quelle