Distanze di foraggiamento in femmine di Myotis emarginatus.
Quali sono i fattori che possono influenzare la distanza tra roost e aree di foraggiamento?
Che legame ci può essere tra stato riproduttivo, periodo dell’anno e distanza percorsa per alimentarsi?
Il file di dati è in formato dBASE IV (.dbf). Occorre il package foreign per poterli caricare.
library(foreign) # importaizone di file con formati "stranieri"
library(ggplot2) # grafici
library(plyr) # riarrangiamento dati
Caricamento dati tramite read.dbf:
# nome del file di dati
datafile <- "data/dist_tab.dbf"
# carica i dati
dist_tab <- read.dbf(datafile)
Conviene ora esaminare la struttura dei dati ottenuti da dist_tab.dbf: è tutto da rifare!
print(str(dist_tab))
## 'data.frame': 9 obs. of 4 variables:
## $ SRIP : num 0 0 1 1 1 1 0 1 0
## $ MONTH: Factor w/ 3 levels "August","july",..: 1 1 2 2 2 2 3 2 3
## $ ID : Factor w/ 9 levels "Myo_ema1206",..: 9 8 7 6 5 4 3 2 1
## $ DIST : num 745 3900 1390 110 0 ...
## - attr(*, "data_types")= chr "N" "C" "C" "N"
## NULL
Esaminiamo la struttura del dataframe in termini dei contenuti e della “codifica” dei dati.
Sarebbe molto più comodo avere “non riproduttiva” e “riproduttiva” invece che 0 e 1.
È possibile usare il comando factor, che onverte dati numerici in variabili ti tipo “factor”, esattamente ciò che serve.
SRIP, MONTH, ID, DIST: cosa significano esattamente? Chi selo ricorda?
Sarebbe meglio rinominare con nomi più espliciti: “Stato riproduttivo”, “Mese”, “Individuo”, “Distanza percorsa”.
È possibile rinominare le colonne di un dataframe usando il comando names. Ridefinisce i “nomi” di un oggetto che ha “nomi”.
names(dist_tab) <- c('Riproduzione', 'Mese', 'Individuo', 'Distanza')
dist_tab$Riproduzione <- factor(dist_tab$Riproduzione, levels=c(0,1), labels=c('non riproduttiva','riproduttiva'))
La “domanda” ha a che fare con le scelte effettuate da femmine di M. emarginatus: foraggiare è un costo, e diventa ancor più costoso quando una femmina ha dei piccoli da allattare:
Quali sono i fattori che possono influenzare la distanza tra roost e aree di foraggiamento?
Che legame ci può essere tra stato riproduttivo, periodo dell’anno e distanza percorsa per alimentarsi?
Possiamo “sospettare” che le femmine con i piccoli da allattare si comportino in modo differente rispetto a quelle che non hanno piccoli, anche in termini di distanze percorse per foraggiare…
Se si ipotizza che le distanze percorse possano essere diverse nei due gruppi di femmine, allora l’analisi della varianza (ANOVA) potrebbe essere lo strumento opportuno…
Ma l’analisi della varianza richiede che la variabile “responso” (la distanza, nel caso nostro) sia distribuita normalmente…
Occorre fare un “test di normalità”, cioè un test statistico per quantificare la probabilità che i valori di una certa variabile numerica siano distribuiti su una distribuzione di frequenza gaussiana.
shapiro.test(dist_tab$Distanza)
##
## Shapiro-Wilk normality test
##
## data: dist_tab$Distanza
## W = 0.93064, p-value = 0.4875
È anche possibile avere un’idea “visiva” (che però non vale come test statistico): usando il quantile-quantile plot:
{qqnorm(dist_tab$Distanza, pch = 1, frame = FALSE)
qqline(dist_tab$Distanza, qtype=2, col = "steelblue", lwd = 2)}
I punti sperimentali (le “distanze”) stanno sulla retta che indica i valori che si otterrebbero da una distribuzione gaussiana con la stesse media e deviaizone standard.
Il test di Shapiro-Wilk indica che c’è una probabilità molto bassa (48.7%) che i dati siano differenti da una distriuzione normale.
Consideriamo tutte le variabili (stato riproduttivo, periodo dell’anno) come fattori che determinano diverse distanze:
aov.0 <- aov(Distanza ~ Riproduzione * Mese, data=dist_tab)
summary(aov.0)
## Df Sum Sq Mean Sq F value Pr(>F)
## Riproduzione 1 5446896 5446896 4.635 0.0748 .
## Mese 1 8649 8649 0.007 0.9344
## Residuals 6 7050400 1175067
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
C’è una significatività “al limite” (0.74>0.5) per il fattore Riproduzione: il fattore Mese sembra non avere alcun effetto… si può rifare l’analisi escludendo Mese.
aov.1 <- aov(Distanza ~ Riproduzione, data=dist_tab)
summary(aov.1)
## Df Sum Sq Mean Sq F value Pr(>F)
## Riproduzione 1 5446896 5446896 5.401 0.0531 .
## Residuals 7 7059049 1008436
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Siamo al limite della significatività statistica, occorrerebbe un campione più numeroso…
Ma di quanto è la differenza nelle distanze di foraggiamento?
TukeyHSD(aov.1)
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = Distanza ~ Riproduzione, data = dist_tab)
##
## $Riproduzione
## diff lwr upr p adj
## riproduttiva-non riproduttiva -1565.6 -3158.515 27.31456 0.0530748
Esiste una differenza di circa 1500 m.
Non sappiamo ancora quali siano le distanza medie: occorre calcolare la media di Distanza per i due gruppi (Riproduzione==riproduttiva e Riproduzione==non riproduttiva).
È possibile farlo almeno in due modi:
dist_tab.R <- dist_tab[dist_tab$Riproduzione == 'riproduttiva',]
mean(dist_tab$Distanza)
## [1] 1406.222
sd(dist_tab$Distanza)
## [1] 1250.297
dist_tab.R <- dist_tab[dist_tab$Riproduzione == 'non riproduttiva',]
mean(dist_tab$Distanza)
## [1] 1406.222
sd(dist_tab$Distanza)
## [1] 1250.297
by:by(dist_tab$Distanza, dist_tab$Riproduzione, summary)
## dist_tab$Riproduzione: non riproduttiva
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 745 1631 2230 2276 2875 3900
## ------------------------------------------------------------
## dist_tab$Riproduzione: riproduttiva
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0 110.0 600.0 710.4 1390.0 1452.0
Un grafico rende meglio l’idea:
ggplot(dist_tab, aes(x=Riproduzione, y=Distanza)) + geom_boxplot()
Per “vedere” le due differenti gaussiane:
dist_tab.means <- ddply(dist_tab, "Riproduzione", summarise, dmean=mean(Distanza))
{ggplot(dist_tab, aes(x=Distanza, colour=Riproduzione)) + geom_density() + geom_vline(data=dist_tab.means, aes(xintercept=dmean, colour=Riproduzione), linetype="dashed", size=1)}