Einige Diagramme zum Erkunden der Daten
Unten sind acht, eine für jede Anzahl von Oberflächenkontakten, xy-Diagramme, die Handschuhe gegen keine Handschuhe zeigen.
Jedes Individuum ist mit einem Punkt versehen. Der Mittelwert sowie die Varianz und Kovarianz sind mit einem roten Punkt und der Ellipse angegeben (Mahalanobis-Abstand entspricht 97,5% der Bevölkerung).
14
Die kleine Korrelation zeigt, dass es tatsächlich einen zufälligen Effekt von den Individuen gibt (wenn es keinen Effekt von der Person gab, sollte es keine Korrelation zwischen den gepaarten Handschuhen und keinen Handschuhen geben). Dies ist jedoch nur ein kleiner Effekt, und eine Person kann unterschiedliche zufällige Effekte für "Handschuhe" und "keine Handschuhe" haben (z. B. kann die Person für alle unterschiedlichen Kontaktpunkte durchweg höhere / niedrigere Werte für "Handschuhe" als "keine Handschuhe" haben). .
Unterhalb des Diagramms befinden sich separate Diagramme für jede der 35 Personen. Die Idee dieses Diagramms ist es, zu sehen, ob das Verhalten homogen ist und welche Art von Funktion geeignet erscheint.
Beachten Sie, dass das "ohne Handschuhe" rot ist. In den meisten Fällen ist die rote Linie höher, mehr Bakterien für die Fälle "ohne Handschuhe".
Ich glaube, dass eine lineare Darstellung ausreichen sollte, um die Trends hier zu erfassen. Der Nachteil des quadratischen Diagramms besteht darin, dass die Koeffizienten schwieriger zu interpretieren sind (Sie werden nicht direkt sehen, ob die Steigung positiv oder negativ ist, da sowohl der lineare Term als auch der quadratische Term einen Einfluss darauf haben).
Aber was noch wichtiger ist, Sie sehen, dass die Trends zwischen den verschiedenen Individuen sehr unterschiedlich sind und es daher nützlich sein kann, einen zufälligen Effekt nicht nur für den Achsenabschnitt, sondern auch für die Steigung des Individuums hinzuzufügen.
Modell
Mit dem Modell unten
- Jedes Individuum erhält eine eigene angepasste Kurve (zufällige Effekte für lineare Koeffizienten).
- y∼N(log(μ),σ2)log(y)∼N(μ,σ2)
- Gewichte werden angewendet, weil die Daten heteroskedastisch sind. Die Variation ist zu den höheren Zahlen hin enger. Dies liegt wahrscheinlich daran, dass die Bakterienzahl eine gewisse Obergrenze hat und die Variation hauptsächlich auf eine fehlerhafte Übertragung von der Oberfläche auf den Finger zurückzuführen ist (= im Zusammenhang mit niedrigeren Zählungen). Siehe auch in den 35 Plots. Es gibt hauptsächlich einige wenige Personen, bei denen die Abweichung viel höher ist als bei den anderen. (Wir sehen auch größere Schwänze, Überdispersion, in den qq-Plots)
- Es wird kein Intercept-Term verwendet und ein "Kontrast" -Term hinzugefügt. Dies geschieht, um die Interpretation der Koeffizienten zu erleichtern.
.
K <- read.csv("~/Downloads/K.txt", sep="")
data <- K[K$Surface == 'P',]
Contactsnumber <- data$NumberContacts
Contactscontrast <- data$NumberContacts * (1-2*(data$Gloves == 'U'))
data <- cbind(data, Contactsnumber, Contactscontrast)
m <- lmer(log10CFU ~ 0 + Gloves + Contactsnumber + Contactscontrast +
(0 + Gloves + Contactsnumber + Contactscontrast|Participant) ,
data=data, weights = data$log10CFU)
Das gibt
> summary(m)
Linear mixed model fit by REML ['lmerMod']
Formula: log10CFU ~ 0 + Gloves + Contactsnumber + Contactscontrast + (0 +
Gloves + Contactsnumber + Contactscontrast | Participant)
Data: data
Weights: data$log10CFU
REML criterion at convergence: 180.8
Scaled residuals:
Min 1Q Median 3Q Max
-3.0972 -0.5141 0.0500 0.5448 5.1193
Random effects:
Groups Name Variance Std.Dev. Corr
Participant GlovesG 0.1242953 0.35256
GlovesU 0.0542441 0.23290 0.03
Contactsnumber 0.0007191 0.02682 -0.60 -0.13
Contactscontrast 0.0009701 0.03115 -0.70 0.49 0.51
Residual 0.2496486 0.49965
Number of obs: 560, groups: Participant, 35
Fixed effects:
Estimate Std. Error t value
GlovesG 4.203829 0.067646 62.14
GlovesU 4.363972 0.050226 86.89
Contactsnumber 0.043916 0.006308 6.96
Contactscontrast -0.007464 0.006854 -1.09
Code, um Diagramme zu erhalten
Chemometrie :: drawMahal-Funktion
# editted from chemometrics::drawMahal
drawelipse <- function (x, center, covariance, quantile = c(0.975, 0.75, 0.5,
0.25), m = 1000, lwdcrit = 1, ...)
{
me <- center
covm <- covariance
cov.svd <- svd(covm, nv = 0)
r <- cov.svd[["u"]] %*% diag(sqrt(cov.svd[["d"]]))
alphamd <- sqrt(qchisq(quantile, 2))
lalpha <- length(alphamd)
for (j in 1:lalpha) {
e1md <- cos(c(0:m)/m * 2 * pi) * alphamd[j]
e2md <- sin(c(0:m)/m * 2 * pi) * alphamd[j]
emd <- cbind(e1md, e2md)
ttmd <- t(r %*% t(emd)) + rep(1, m + 1) %o% me
# if (j == 1) {
# xmax <- max(c(x[, 1], ttmd[, 1]))
# xmin <- min(c(x[, 1], ttmd[, 1]))
# ymax <- max(c(x[, 2], ttmd[, 2]))
# ymin <- min(c(x[, 2], ttmd[, 2]))
# plot(x, xlim = c(xmin, xmax), ylim = c(ymin, ymax),
# ...)
# }
}
sdx <- sd(x[, 1])
sdy <- sd(x[, 2])
for (j in 2:lalpha) {
e1md <- cos(c(0:m)/m * 2 * pi) * alphamd[j]
e2md <- sin(c(0:m)/m * 2 * pi) * alphamd[j]
emd <- cbind(e1md, e2md)
ttmd <- t(r %*% t(emd)) + rep(1, m + 1) %o% me
# lines(ttmd[, 1], ttmd[, 2], type = "l", col = 2)
lines(ttmd[, 1], ttmd[, 2], type = "l", col = 1, lty=2) #
}
j <- 1
e1md <- cos(c(0:m)/m * 2 * pi) * alphamd[j]
e2md <- sin(c(0:m)/m * 2 * pi) * alphamd[j]
emd <- cbind(e1md, e2md)
ttmd <- t(r %*% t(emd)) + rep(1, m + 1) %o% me
# lines(ttmd[, 1], ttmd[, 2], type = "l", col = 1, lwd = lwdcrit)
invisible()
}
5 x 7 Grundstück
#### getting data
K <- read.csv("~/Downloads/K.txt", sep="")
### plotting 35 individuals
par(mar=c(2.6,2.6,2.1,1.1))
layout(matrix(1:35,5))
for (i in 1:35) {
# selecting data with gloves for i-th participant
sel <- c(1:624)[(K$Participant==i) & (K$Surface == 'P') & (K$Gloves == 'G')]
# plot data
plot(K$NumberContacts[sel],log(K$CFU,10)[sel], col=1,
xlab="",ylab="",ylim=c(3,6))
# model and plot fit
m <- lm(log(K$CFU[sel],10) ~ K$NumberContacts[sel])
lines(K$NumberContacts[sel],predict(m), col=1)
# selecting data without gloves for i-th participant
sel <- c(1:624)[(K$Participant==i) & (K$Surface == 'P') & (K$Gloves == 'U')]
# plot data
points(K$NumberContacts[sel],log(K$CFU,10)[sel], col=2)
# model and plot fit
m <- lm(log(K$CFU[sel],10) ~ K$NumberContacts[sel])
lines(K$NumberContacts[sel],predict(m), col=2)
title(paste0("participant ",i))
}
2 x 4 Grundstück
#### plotting 8 treatments (number of contacts)
par(mar=c(5.1,4.1,4.1,2.1))
layout(matrix(1:8,2,byrow=1))
for (i in c(1:8)) {
# plot canvas
plot(c(3,6),c(3,6), xlim = c(3,6), ylim = c(3,6), type="l", lty=2, xlab='gloves', ylab='no gloves')
# select points and plot
sel1 <- c(1:624)[(K$NumberContacts==i) & (K$Surface == 'P') & (K$Gloves == 'G')]
sel2 <- c(1:624)[(K$NumberContacts==i) & (K$Surface == 'P') & (K$Gloves == 'U')]
points(K$log10CFU[sel1],K$log10CFU[sel2])
title(paste0("contact ",i))
# plot mean
points(mean(K$log10CFU[sel1]),mean(K$log10CFU[sel2]),pch=21,col=1,bg=2)
# plot elipse for mahalanobis distance
dd <- cbind(K$log10CFU[sel1],K$log10CFU[sel2])
drawelipse(dd,center=apply(dd,2,mean),
covariance=cov(dd),
quantile=0.975,col="blue",
xlim = c(3,6), ylim = c(3,6), type="l", lty=2, xlab='gloves', ylab='no gloves')
}
NumberContacts
einen numerischen Faktor verwenden und quadratische / kubische Polynomterme einschließen. Oder schauen Sie sich Generalized Additive Mixed Models an.