2016-06-18 2 views
4

Je travaille actuellement sur une recherche impliquant différentes espèces de chauves-souris et la fragmentation de l'habitat. Mon jeu de données contient des données de présence (1 = présent, 0 = absent) et des données sur la taille des fragments, la masse corporelle (continue) et les guildes alimentaires (Feeding.Guild; catégoriel, 6 niveaux: carnivore, frugivore insectivore, nectarivore, omnivore et sanguinivore). Les tailles des fragments (logFrag) et les masses corporelles (logMass) sont transformées en utilisant le log naturel pour se conformer à la distribution normale. Je ne peux pas présenter l'ensemble de données complet (bats2) en raison de la classification.Interprétation et traçage de la régression logistique

Pour analyser ces données, j'utilise une régression logistique. En R, c'est la fonction glm avec la famille binomiale.

bats2 <- read.csv("Data_StackExchange.csv", 
       quote = "", sep=";", dec = ".", header=T, row.names=NULL) 
bats2$presence <- ifelse(bats2$Corrected.Abundance == 0, 0, 1) 
bats2$logFrag <- log(bats2$FragSize) 
bats2$logMass <- log(bats2$Mass) 
str(bats2$Feeding.Guild) 
    Factor w/ 6 levels "carnivore","frugivore",..: 6 1 5 5 2 2 2 2 2 2 ...  
levels(bats2$Feeding.Guild) 
    [1] "carnivore" "frugivore" "insectivore" "nectarivore" "omnivore"  "sanguinivore" 


regPresence <- glm(bats2$presence~(logFrag+logMass+Feeding.Guild), 
        family="binomial", data=bats2) 

Les résultats de cette régression sont obtenus par la fonction summary() et sont les suivants.

Coefficients: 
          Estimate Std. Error z value Pr(>|z|)  
(Intercept)    -4.47240 0.64657 -6.917 4.61e-12 *** 
logFrag     0.10448 0.03507 2.979 0.002892 ** 
logMass     0.39404 0.09620 4.096 4.20e-05 *** 
Feeding.Guildfrugivore  3.36245 0.49378 6.810 9.78e-12 *** 
Feeding.Guildinsectivore 1.97198 0.51136 3.856 0.000115 *** 
Feeding.Guildnectarivore 3.85692 0.55379 6.965 3.29e-12 *** 
Feeding.Guildomnivore  1.75081 0.51864 3.376 0.000736 *** 
Feeding.Guildsanguinivore 1.73381 0.56881 3.048 0.002303 ** 
--- 
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Ma première question est de vérifier que j'interprète correctement ces données: comment interpréter ces données correctement? J'ai utilisé this website pour m'aider à interpréter.

De plus, j'ai essayé de tracer ces données afin de les visualiser. Cependant, lorsque vous ajoutez la fonction facet_wrap pour créer des graphiques séparés pour les différentes guildes d'alimentation, les interceptions et les pentes changent par rapport à la coloration des différentes guildes d'alimentation dans une seule parcelle. J'ai utilisé le code suivant:

Terrain 1:

library(ggplot2) 
qplot(logFrag, bats2$presence, colour=Feeding.Guild, data=bats2, se=F) + 
    geom_smooth(method = glm, family = "binomial", se=F, na.rm=T) + theme_bw() 

Terrain 2:

qplot(logFrag, bats2$presence, data=bats2, se=F) + facet_wrap(~Feeding.Guild, 
                   scales="free") + 
    geom_smooth(method = glm, family = "binomial", se=F, na.rm=T) + theme_bw() 

résultant dans les images suivantes:

Plot 1 (left) and plot 2 (right).

Quelles sont les causes de ces différences et lequel serait le bon?

Sample data set (partie de l'ensemble de données qui n'est pas classée).

+0

Il serait plus facile de vous aider si vous donniez des données pour rendre le problème reproductible. Ce ne doit pas être les vraies données, juste quelque chose qui lui ressemble. –

+0

Le fichier CSV des exemples de données est inclus dans le lien suivant: http://pastebin.com/cHXp0ivG –

+0

Cela peut être un bon démarrage [http://stackoverflow.com/q/8845279/707145]. – MYaseen208

Répondre

1

La ressource à laquelle vous avez lié a une explication de l'interprétation dans la section à puce sous la rubrique Using the logit model. Estimate est l'effet additif de chaque covariable sur les probabilités logarithmiques de présence. Ceci est par augmentation de 1 unité d'une co-variance continue ou par instance de la catégorique. Un couple de points sur ceci:

  • Parce que vous avez pris le journal des covariables continues, leur effet est par unité sur l'échelle log - assez difficile à interpréter. Je conseillerais fortement contre cela. Il n'y a aucune exigence de normalité de FragSize ou Mass pour s'adapter à ce modèle.
  • Notez qu'une de vos catégories est manquante dans la liste? L'effet des covariables doit être mesuré par rapport à une référence. Dans ce cas, la référence est carnivores avec logFrag = 0 et logMass = 0. Ces 0 valeurs sont impossibles. C'est habituel, et pourquoi l'interprétation du (Intercept) n'est pas utile pour vous.

Sur à Std. Error, ceci est une mesure de votre confiance dans vos effets Estimate.Les gens utilisent souvent une approximation normale de + - 2 * Std. Error autour du Estimate pour former des intervalles de confiance et faire des déclarations les utilisant. Lorsque l'intervalle de + - 2 * Std. Error contient 0 il y a une probabilité que l'effet réel est égal à 0. Vous ne voulez pas que, si vous êtes à la recherche pour les petites valeurs de Std. Error par rapport à la Estimate

z value et Pr(>|z|) se rapportent à l'approximation normale que j'ai mentionnée. Vous savez probablement déjà ce qu'est un score Z (Standard Normal) et comment les gens les utilisent pour effectuer des tests de signification.

Maintenant à vos parcelles: Les parcelles ne sont pas en train de tracer votre modèle. Vous utilisez le lisseur pour adapter un nouveau modèle d'un type similaire mais sur un ensemble de données différent. Le lisseur considère seulement l'effet de logFrag pour s'adapter à un mini modèle logistique dans chaque guilde.

Nous nous attendons donc à ce que les graphiques diffèrent de summary(), mais pas les uns des autres. La raison pour laquelle cela est arrivé est intéressante et il s'agit d'utiliser bats2$presence au lieu de presence. Lorsque vous passez dans bats2$presence, cela ressemble effectivement à passer à ggplot2 une liste de données anonyme distincte. Tant que cette liste est alignée sur la base de données comme vous vous en doutez, tout va bien. Il semble que facet_wrap() mélange les données lors de l'utilisation de bats2$presence, probablement en raison du tri bats2 par guilde. Utilisez le vieux presence et ils sortiront pareil.

+0

Merci beaucoup pour votre explication! –

+0

Aussi, puis-je utiliser 'FragSize' et' Mass' dans ce modèle au lieu des logs? Comment tester les hypothèses de la régression logistique? J'ai eu l'idée de les tester, mais je voulais juste être sûr. –