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?

Come sono “fatti” i dati?

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.

names(dist_tab) <- c('Riproduzione', 'Mese', 'Individuo', 'Distanza')

dist_tab$Riproduzione <- factor(dist_tab$Riproduzione, levels=c(0,1), labels=c('non riproduttiva','riproduttiva'))

Come analizzare i dati

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.

Analisi della varianza

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:

  1. usando la “forza bruta”: estrarre i dati dal dataframe e calcolare media e deviazione standard
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
  1. facendo gestire a R la suddivisione in gruppi con il comando 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)}