Verileri keşfetmek için bazı grafikler
Aşağıda sekiz, her bir yüzey teması sayısı için bir tane, eldivenlere karşı eldiven gösteren xy grafikleri.
Her bireye bir nokta çizilir. Ortalama ve varyans ve kovaryans, kırmızı bir nokta ve elips ile (nüfusun% 97.5'ine karşılık gelen Mahalanobis mesafesi) gösterilir.
Etkilerin popülasyonun yayılmasına kıyasla sadece küçük olduğunu görebilirsiniz. Ortalama 'eldivensiz' için daha yüksektir ve daha fazla yüzey teması için ortalama biraz daha fazla değişir (bu önemli olduğu gösterilebilir). Ancak etki sadece küçüktür (genel olarak14) log azalma ve aslında daha yüksek bakteri sayımı orada kim için birçok kişi vardır ile eldiven.
Küçük korelasyon, bireylerden gerçekten rastgele bir etki olduğunu gösterir (eğer kişiden bir etki yoksa, eşleştirilmiş eldivenler ve eldivenler arasında hiçbir ilişki olmamalıdır). Ancak bu sadece küçük bir etkidir ve bir birey 'eldiven' ve 'eldiven yok' için farklı rastgele etkilere sahip olabilir (örneğin, tüm farklı temas noktaları için, birey 'eldiven' için 'eldiven yok' dan sürekli olarak daha yüksek / daha düşük sayılara sahip olabilir) .
Aşağıdaki grafik 35 kişinin her biri için ayrı arazilerdir. Bu planın fikri, davranışın homojen olup olmadığını ve ayrıca ne tür bir fonksiyonun uygun göründüğünü görmektir.
'Eldivensiz' kırmızı olduğunu unutmayın. Çoğu durumda kırmızı çizgi daha yüksektir, 'eldivensiz' vakalar için daha fazla bakteri.
Buradaki eğilimleri yakalamak için doğrusal bir grafiğin yeterli olması gerektiğine inanıyorum. İkinci dereceden grafiğin dezavantajı, katsayıların yorumlanmasının daha zor olacağıdır (hem eğimin pozitif mi negatif mi olduğunu doğrudan göremezsiniz çünkü hem doğrusal terimin hem de kuadratik terimin bu konuda bir etkisi vardır).
Ancak daha da önemlisi, eğilimlerin farklı bireyler arasında çok farklı olduğunu görüyorsunuz ve bu nedenle sadece kesişme değil, aynı zamanda bireyin eğimi için rastgele bir etki eklemek yararlı olabilir.
model
Aşağıdaki model ile
- Her birey kendi eğrisini yerleştirir (doğrusal katsayılar için rastgele etkiler).
- Model log dönüştürülmüş verileri kullanır ve normal (gauss) doğrusal bir modele uyar. Yorumlarda amip, bir log bağlantısının lognormal bir dağılımla ilişkili olmadığını belirtti. Ama bu farklı.y∼N(log(μ),σ2) farklı log(y)∼N(μ,σ2)
- Veriler heteroskedastik olduğu için ağırlıklar uygulanır. Varyasyon yüksek sayılara göre daha dardır. Muhtemelen bakteri sayımının bir tavana sahip olması ve varyasyonun çoğunlukla yüzeyden parmağa iletiminin başarısız olmasından kaynaklanmaktadır (= daha düşük sayımlarla ilişkili). Ayrıca bkz. 35 parsel. Varyasyonun diğerlerinden çok daha yüksek olduğu birkaç kişi vardır. (qq-parsellerinde daha büyük kuyruklar, aşırı dağılım da görüyoruz)
- Kesişim terimi kullanılmaz ve bir 'kontrast' terimi eklenir. Bu, katsayıların yorumlanmasını kolaylaştırmak için yapılır.
.
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)
Bu verir
> 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
parsel elde etmek için kod
chemometrics :: drawMahal işlevi
# 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 arsa
#### 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 arsa
#### 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
Sayısal bir faktör olarak kullanabilir ve karesel / kübik polinom terimleri ekleyebilirsiniz . Veya Genelleştirilmiş Katkı Maddeli Karma Modellere bakın.