Auswertung Daten Fledermäuse - GLM richtig?

Berechnung von deskriptiven Statistiken mit R.

Auswertung Daten Fledermäuse - GLM richtig?

Beitragvon Fledermaus » Do 22. Mär 2018, 20:09

Hallo,
ich bin Masterstudentin und sitze gerade an meiner Statistik und ich brauche wirklich ganz dringend ein Feedback :cry: Ich habe u.A. untersucht, ob die Fledermäuse, die sich im Winterschlaf befinden, durch meine Arbeit im Winterquartier (Monitoring) aufwachen und es dadurch eine vermehrte Aktivität in den Lichtschranken, die am Eingang des Quartiers angebracht wurden, zu erkennen ist.
Außerdem habe ich noch andere Umweltparameter erfasst um zu Überprüfen ob die Flugaktivität auch durch andere Faktoren beeinflusst wird wie z.B. die Außentemperatur, Luftfeuchte, temperatur im Bunker, die Jahreszeit oder die Anzahl der Individuen die in einem Bunker gesessen haben.
Ich habe nun ein Model erstellt und bräuchte ganz dringend ein Feedback ob das so in Ordnung ist was ich gemacht habe.
In der Dropbox habe ich meine Dateien (einmal als txt und einmal als excel)

https://www.dropbox.com/s/tjkmjm6j20b4o ... .xlsx?dl=0
https://www.dropbox.com/s/y14zoweccru8r80/LiBa.txt?dl=0

Dazu Erklärug:
Bunker: (1,2,3,4,5,6,7,8) sind die acht verschiedenen Bunker die ich regelmäßig auf den Fledermausbesatz kontrolliert habe
Date: Jeweils das Datum des Kontrolltages (Tag vor dem Monitoring) und der Monitoringtag.
NoF: Number of flight movements .. Die Summe der Flugbewegungen in den Lichtschranken (innerhalb meines bereits definierten Zeitraumes)
Treatment: Kontrolltag oder Monitoringtag
NoI : Number of Individuals, wie Viele Tiere insgesamt an dem jeweiligen Tag in den jeweiligen Bunker gehangen haben
Temp_Bunker: Temperatur im Bunker
Hum_Bunker: Feuchtigkeit im Bunker
Temp_outside: Aussentemperatur
Season: eine von mir definierte Unterteilung in Anfangssaison des Winterschlafs und Saisonende.



Hier nun mein Skript:
#Hauptfrage: Fliegen mehr Tiere am Monitoringtag durch die Lichtschranke oder am Kontrolltag (Tag davor) -
#--------------------------------------------------------------------------------------------------------------
#--------------------------------------------------------------------------------------------------------------
Dataset <-
read.table("C:/Users/Bianca/Documents/Uni/Master/Masterarbeit/Statistik/Tabellen/LiBa.txt",
header=TRUE, sep="", na.strings="NA", dec=".", strip.white=TRUE)


#Data exploration
#-----------------

normalityTest(~NoF, test="shapiro.test", data=Dataset)

# Shapiro-Wilk normality test

#data: NoF
#W = 0.77188, p-value < 2.2e-16

#Nicht normal verteilt.

scatterplotMatrix(~Hum_Bunker+NoF+NoI+Season+Temp_Bunker+Temp_outside,
reg.line=FALSE, smooth=FALSE, spread=FALSE, span=0.5, ellipse=FALSE,
levels=c(.5, .9), id.n=0, diagonal = 'histogram', data=Dataset)

#die Anzahl der Flugbewegungen NoF sieht poisson verteilt aus. Muss man bei solch einem Model eigentlich auch die unabhängigen Variablen auf ihre Verteilung messen ?
#Bei number of Individuals (NoI) und humidity Bunker scheint es einen Zusammenhang zu geben, das untersuche ich aber in einem zweiten model
#Temp_Bunker und Temp_ outside korrelieren (natürlich) aber um zu Testen ob es hier eine Interaktion gibt benutze ich nachher den VIF


#Model selection
------------------
LinearModel.1 <- lm(NoF ~ NoI + Season + Temp_Bunker + Temp_outside + Treatment +
Hum_Bunker, data=Dataset)
summary(LinearModel.1)
AIC(LinearModel.1)

#Call:
#lm(formula = NoF ~ NoI + Season + Temp_Bunker + Temp_outside +
Treatment + Hum_Bunker, data = Dataset)

#Residuals:
# Min 1Q Median 3Q Max
#-26.103 -8.226 -2.291 5.619 65.373

#Coefficients:
Estimate Std. Error t value Pr(>|t|)
#(Intercept) -15.26569 11.42002 -1.337 0.182903
#NoI 0.20971 0.04015 5.223 0.00000046 ***
#Season 7.84640 3.33686 2.351 0.019726 *
#Temp_Bunker 3.46660 0.87401 3.966 0.000103 ***
#Temp_outside 1.00189 0.27125 3.694 0.000289 ***
#Treatment[T.Monitoring] 5.02466 1.97038 2.550 0.011558 *
#Hum_Bunker -0.13040 0.07570 -1.723 0.086570 .
#---
#Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

#Residual standard error: 13.72 on 190 degrees of freedom
# (11 observations deleted due to missingness)
#Multiple R-squared: 0.2474, Adjusted R-squared: 0.2236
#F-statistic: 10.41 on 6 and 190 DF, p-value: 5.714e-10


> AIC(LinearModel.1)
#[1] 1599.823

#-->Schrittweise modelselektion nach AIC hat auch keine verbesserungsvorschläge. Interaktion von Temp_outside:Temp_Bunker nicht signifikant, deshalb habe ich die Interaktion aus dem model raus gelassen.

#Suchen nach Interaktion/ Collinearität
#------------------------------------------

vif(LinearModel.1)
# NoI Season Temp_Bunker Temp_outside Treatment Hum_Bunker
# 1.365622 2.512431 2.914203 1.233297 1.015443 1.110728

#keine Kollinearität (keines >10)

#Model validierung
#-----------------------


Dataset<- within(Dataset, {
fitted.LinearModel.1 <- fitted(LinearModel.1)
residuals.LinearModel.1 <- residuals(LinearModel.1)
rstudent.LinearModel.1 <- rstudent(LinearModel.1)
hatvalues.LinearModel.1 <- hatvalues(LinearModel.1)
cooks.distance.LinearModel.1 <- cooks.distance(LinearModel.1)
obsNumber <- 1:nrow(Dataset)
})


scatterplot(fitted.LinearModel.1~residuals.LinearModel.1, reg.line=FALSE,
smooth=FALSE, spread=FALSE, boxplots=FALSE, span=0.5, ellipse=FALSE,
levels=c(.5, .9), data=Dataset)
oldpar <- par(oma=c(0,0,3,0), mfrow=c(2,2))
plot(LinearModel.1)
par(oldpar)

#Betrachtung der diagnostischen Graphen

#Homoskedastizität: Residuals vs. fitted, ist ok oder?
#Normalverteilung: Normal Q-Q-plot, sieht nicht nach normalverteilung aus. Rechtsschief. Vielleicht wird das besser wenn ich ein glm mit einer poisson verteilung wähle?
#Cook distance auch ok, oder?

#Prüfen auf unabhängigkeit. Dafür Residuals gegen alle erklärenden Variablen geplottet. Kein Muster zu sehen.

scatterplotMatrix(~Hum_Bunker+NoF+NoI+residuals.LinearModel.1+Season+Temp_Bunker+Temp_outside,
reg.line=FALSE, smooth=FALSE, spread=FALSE, span=0.5, ellipse=FALSE, levels=c(.5, .9), id.n=0,
diagonal = 'density', data=Dataset)

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#Problem ist nun, dass meine Residuen nicht normal verteilt sind und ich somit die Voraussetzung eines linearen modelles nicht mehr erfülle.
#Deshalb versuche ich es jetzt mit einem glm

GLM.5 <- glm(NoF ~ NoI + Season + Temp_Bunker + Temp_outside + Treatment +
+ Hum_Bunker, family=poisson(log), data=Dataset)

summary(GLM.5)

#Call:
#glm(formula = NoF ~ NoI + Season + Temp_Bunker + Temp_outside +
# Treatment + Hum_Bunker, family = poisson(log), data = Dataset)

#Deviance Residuals:
# Min 1Q Median 3Q Max
#-6.9503 -2.4242 -0.8772 1.2364 10.8613

#Coefficients:
# Estimate Std. Error z value Pr(>|z|)
#(Intercept) 0.5483058 0.2491235 2.201 0.0277 *
#NoI 0.0146728 0.0007625 19.243 < 2e-16 ***
#Season 0.5622197 0.0737185 7.627 2.41e-14 ***
#Temp_Bunker 0.2412360 0.0172221 14.007 < 2e-16 ***
#Temp_outside 0.0900575 0.0059392 15.163 < 2e-16 ***
#Treatment[T.Monitoring] 0.3418947 0.0388474 8.801 < 2e-16 ***
#Hum_Bunker -0.0108332 0.0016904 -6.409 1.47e-10 ***
#---
#Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

#(Dispersion parameter for poisson family taken to be 1)

# Null deviance: 2651.5 on 196 degrees of freedom
#Residual deviance: 1785.8 on 190 degrees of freedom
# (11 observations deleted due to missingness)
#AIC: 2554.8

#Number of Fisher Scoring iterations: 5


> exp(coef(GLM.5)) # Exponentiated coefficients
# (Intercept) NoI Season
# 1.7303190 1.0147810 1.7545627
# Temp_Bunker Temp_outside Treatment[T.Monitoring]
# 1.2728213 1.0942372 1.4076120
# Hum_Bunker
# 0.9892252


#Anschließend noch AIC backward/forward modellselektion gemacht aber es gab keinen besseren Vorschlag.
#Dann Interaktionen eingebaut die ich aus einer Streuungsmatrix entnommen habe. Das Model hatte einen niedrigereren AIC als das
#ohne Interaktionen

GLM.7 <- glm(NoF ~ NoI + Season + Temp_Bunker * Temp_outside * Hum_Bunker + Treatment, family=poisson(log),
data=Dataset)
summary(GLM.7)

#Call:
#glm(formula = NoF ~ NoI + Season + Temp_Bunker * Temp_outside *
# Hum_Bunker + Treatment, family = poisson(log), data = Dataset)

#Deviance Residuals:
# Min 1Q Median 3Q Max
#-7.308 -2.390 -0.839 1.305 11.896

#Coefficients:
# Estimate Std. Error z value Pr(>|z|)
#(Intercept) 2.5507609 0.4679785 5.451 5.02e-08 ***
#NoI 0.0154151 0.0007835 19.675 < 2e-16 ***
#Season 0.5836995 0.0757559 7.705 1.31e-14 ***
#Temp_Bunker -0.1409994 0.0815377 -1.729 0.0838 .
#Temp_outside -0.1275101 0.0709328 -1.798 0.0722 .
#Hum_Bunker -0.0374406 0.0053334 -7.020 2.22e-12 ***
#Treatment[T.Monitoring] 0.3751392 0.0396056 9.472 < 2e-16 ***
#Temp_Bunker:Temp_outside 0.0347641 0.0169447 2.052 0.0402 *
#Temp_Bunker:Hum_Bunker 0.0048477 0.0010007 4.844 1.27e-06 ***
#Temp_outside:Hum_Bunker 0.0028211 0.0008712 3.238 0.0012 **
#Temp_Bunker:Temp_outside:Hum_Bunker -0.0004497 0.0002028 -2.218 0.0266 *
#---
#Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

#(Dispersion parameter for poisson family taken to be 1)

# Null deviance: 2651.5 on 196 degrees of freedom
#Residual deviance: 1742.0 on 186 degrees of freedom
# (11 observations deleted due to missingness)
#AIC: 2519

#Number of Fisher Scoring iterations: 5

vif(GLM.7)
# NoI Season
# 1.623205 2.870362
# Temp_Bunker Temp_outside
# 69.868462 171.922953
# Hum_Bunker Treatment
# 12.750599 1.054920
# Temp_Bunker:Temp_outside Temp_Bunker:Hum_Bunker
# 313.505445 92.461581
# Temp_outside:Hum_Bunker Temp_Bunker:Temp_outside:Hum_Bunker
# 173.216313 328.841561
#Modelvalidierung
-----------------------
#Diagnostische Graphen anschauen

oldpar <- par(oma=c(0,0,3,0), mfrow=c(2,2))
plot(GLM.7)
par(oldpar)


#Homostedastizität ist erfüllt
#Normalverteilung ist nun auch erfüllt (außer die paar Ausreißer aber um diese Ausreißer ging es mir ja)
#Bei der cook distance fällt ein einziger punkt ganz leicht aus der Grenze von 1.

scatterplotMatrix(~Hum_Bunker+NoF+NoI+residuals.LinearModel.1+Season+Temp_Bunker+Temp_outside, reg.line=FALSE,
smooth=FALSE, spread=FALSE, span=0.5, ellipse=FALSE, levels=c(.5, .9), id.n=0, diagonal = 'histogram',
data=Dataset)

#Prüfen auf unabhängigkeit. Dafür Residuals gegen alle erklärenden Variablen geplottet. Kein Muster zu sehen.

#Post Hoc
#----------------
#Die faktoriellen Variablen waten treatment und season. Da sich es hier aber nur um 2 Gruppen handelt die verglichen werden (Monitoring und control bzw 1 und 2)
#ist hier kein post hoc von nöten sondern der signifikante Unterschied dieser zwei Gruppen wird in einem t Test (oder Wilcox, je nach Verteilung) getestet.
#Die anderen Variablen wie Temp_Bunker, Temp_outside usw kann ich soweit ich das verstanden habe nicht mit einem post hoc untersuchen weil es sind ja keine Gruppen
#sondern metrische Daten. Die würde ich dann eher plotten und optisch interpretieren.


Vielen Dank, ich würde mich wirklich sehr über Antwort freuen bzw wenn jemand, der Ahnung hat, mal drüber schauen könnte. :D
LG
Bianca
Fledermaus
 
Beiträge: 11
Registriert: Do 15. Mär 2018, 15:44
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Auswertung Daten Fledermäuse - GLM richtig?

Beitragvon jogo » Fr 23. Mär 2018, 09:01

Hallo Bianca,

ich bin kein Freund von schrittweise adaptierten Modellen - eventuell ist das bedingt durch die Disziplin, in der ich arbeite.
Auch bin ich nicht besonders firm in verallgemeinerten linearen Modellen - da gibt es einige Experten in dem anderen Forum:
http://forum.r-statistik.de/
Ansonsten scheint mir Dein Vorgehen als schlüssig. Die Variable Season ist als integer kodiert. Wenn Du sie als Faktor behandeln möchtest, dann eventuell explizit umwandeln:
Code: Alles auswählen
Dataset$Season <- as.factor(Dataset$Season)
oder einfach in der Modellformel:
Code: Alles auswählen
... ~ ... + as.factor(Season) + ...
Im Ergebnis macht es diesmal keinen Unterschied, das Season nur zwei Werte annimmt.

Gruß, Jörg
p.s. Es heißt Homoskedastizität
jogo
 
Beiträge: 42
Registriert: Mo 26. Feb 2018, 09:56
Danke gegeben: 3
Danke bekommen: 0 mal in 0 Post

Re: Auswertung Daten Fledermäuse - GLM richtig?

Beitragvon Fledermaus » Fr 23. Mär 2018, 12:09

Vielen Dank,
dann stelle ich das in diesem Forum auch mal rein.
LG
Bianca
Fledermaus
 
Beiträge: 11
Registriert: Do 15. Mär 2018, 15:44
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Auswertung Daten Fledermäuse - GLM richtig?

Beitragvon Hufeisen » Fr 23. Mär 2018, 13:03

Ich habe nur deinen Text überflogen und nicht mit den bereitgestellten Daten(sehr löblich) gearbeitet . Für die Lesbarkeit wäre es besser, wenn du den Output von R in Code-Blöcke setzt. Ich kenne mich zwar mit glm nicht aus. Aber das sieht alles sehr gut aus.
Muss man bei solch einem Model eigentlich auch die unabhängigen Variablen auf ihre Verteilung messen ?

Es gehört formal zum Vorgehen dazu, dass man sich die vorliegenden Daten mit Methoden der deskriptiven Statistik anschaut. Hier reicht ja ein Histogramm. Notwendig für das Regressionsmodell ist es aber nicht, da dieses keine Annahmen über die Verteilung der Variablen trifft und Probleme bei der Residualdiagnostik festgestellt werden können. Also alles gut.
Neu in R, versuche trotzdem zu helfen.
Hufeisen
 
Beiträge: 115
Registriert: Di 31. Jan 2017, 19:15
Danke gegeben: 0
Danke bekommen: 1 mal in 1 Post

Re: Auswertung Daten Fledermäuse - GLM richtig?

Beitragvon Fledermaus » Fr 23. Mär 2018, 13:41

Klasse, vielen Dank :)
Fledermaus
 
Beiträge: 11
Registriert: Do 15. Mär 2018, 15:44
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Auswertung Daten Fledermäuse - GLM richtig?

Beitragvon grawhill » Mo 11. Jun 2018, 11:34

Nice!Thanks for sharing here..
grawhill
 
Beiträge: 6
Registriert: Do 1. Jun 2017, 13:16
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post


Zurück zu Deskriptive Statistik

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron