Dalam ulat, apakah diet lebih penting daripada ukuran dalam perlawanan terhadap predator?

8

Saya mencoba menentukan apakah ulat yang memakan makanan alami (bunga kera) lebih tahan terhadap predator (semut) daripada ulat yang memakan makanan buatan (campuran kuman gandum dan vitamin). Saya melakukan studi percobaan dengan ukuran sampel kecil (20 ulat; 10 per diet). Saya menimbang masing-masing ulat sebelum percobaan. Saya menawarkan sepasang ulat (satu per diet) kepada sekelompok semut selama lima menit, dan menghitung berapa kali setiap ulat ditolak. Saya mengulangi proses ini sepuluh kali.

Seperti inilah data saya (A = diet buatan, N = diet alami):

Trial A_Weight   N_Weight   A_Rejections N_Rejections
1     0.0496     0.1857     0     1 
2     0.0324     0.1112     0     2
3     0.0291     0.3011     0     2
4     0.0247     0.2066     0     3
5     0.0394     0.1448     3     1
6     0.0641     0.0838     1     3
7     0.0360     0.1963     0     2
8     0.0243     0.145      0     3
9     0.0682     0.1519     0     3
10    0.0225     0.1571     1     0

Saya mencoba menjalankan ANOVA di R. Beginilah kode saya terlihat (0 = Makanan buatan, 1 = Makanan alami; semua vektor diatur dengan data untuk sepuluh ulat makanan buatan pertama, diikuti oleh data untuk sepuluh makanan alami ulat):

diet <- factor (rep (c (0, 1), each = 10) 
rejections <- c(0,0,0,0,3,1,0,0,0,1,1,2,2,3,1,3,2,3,3,0) 
weight <- c(0.0496,0.0324,0.0291,0.0247,0.0394,0.0641,0.036,0.0243,0.0682,0.0225,0.1857,0.1112,0.3011,0.2066,0.1448,0.0838,0.1963,0.145,0.1519,0.1571)   
all.data <- data.frame(Diet=diet, Rejections = rejections, Weight = weight)  
fit.all <- lm(Rejections ~ Diet * Weight, all.data)  
anova(fit.all)  

Dan ini adalah apa hasil saya terlihat:

Analysis of Variance Table  

Response: Rejections  
            Df  Sum Sq Mean Sq F value   Pr(>F)    
Diet         1 11.2500 11.2500  9.8044 0.006444 ** 
Weight       1  0.0661  0.0661  0.0576 0.813432    
Diet:Weight  1  0.0748  0.0748  0.0652 0.801678    
Residuals   16 18.3591  1.1474                     
--- 
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

Pertanyaan saya adalah:

  • Apakah ANOVA cocok di sini? Saya menyadari ukuran sampel yang kecil akan menjadi masalah dengan uji statistik apa pun; ini hanya sebuah studi percobaan yang saya ingin menjalankan statistik untuk presentasi kelas. Saya berencana untuk mengulang penelitian ini dengan ukuran sampel yang lebih besar.
  • Sudahkah saya memasukkan data saya ke R dengan benar?
  • Apakah ini memberitahu saya bahwa diet itu penting, tetapi berat badan tidak?
meong
sumber
7
Karena berat badan benar-benar dikacaukan dengan diet - mereka yang melakukan diet alami secara seragam lebih berat daripada yang melakukan diet buatan - sulit untuk melihat bagaimana Anda bisa menyimpulkan apa pun tentang hubungan antara salah satu dari mereka dan penolakan.
whuber
Ya, saya setuju dengan Anda. Ketika saya mengulangi ini, saya berencana untuk memberi makan semua ulat diet buatan (satu dengan allelochemical terisolasi) sehingga mereka akan tumbuh pada tingkat yang sama.
Meow

Jawaban:

14

tl; dr @whuber benar bahwa diet dan berat badan dikacaukan dalam analisis Anda: seperti inilah gambarannya.

masukkan deskripsi gambar di sini

Titik-titik lemak + rentang menunjukkan interval kepercayaan rata-rata dan bootstrap untuk diet saja; interval garis abu-abu + keyakinan menunjukkan hubungan keseluruhan dengan berat badan; garis individual + CI menunjukkan hubungan dengan bobot untuk masing-masing kelompok. Ada lebih banyak penolakan untuk diet = N, tetapi orang-orang itu juga memiliki bobot lebih tinggi.

Masuk ke detail mekanis berdarah: Anda berada di jalur yang benar dengan analisis Anda, tetapi (1) ketika Anda menguji efek diet, Anda harus memperhitungkan efek berat badan, dan sebaliknya ; secara default R melakukan ANOVA berurutan , yang menguji efek diet saja; (2) untuk data seperti ini, Anda mungkin harus menggunakan Poisson generalized linear model (GLM), meskipun tidak terlalu banyak membuat perbedaan dengan kesimpulan statistik dalam kasus ini.

Jika Anda melihat summary()alih-alih anova(), yang menguji efek marginal, Anda akan melihat bahwa tidak ada yang terlihat sangat signifikan (Anda juga harus berhati-hati dengan menguji efek utama di hadapan interaksi: dalam hal ini efek diet dievaluasi pada tingkat Bobot nol : mungkin tidak masuk akal, tetapi karena interaksinya tidak signifikan (walaupun memiliki efek besar!) mungkin tidak membuat banyak perbedaan.

summary(fit.lm <- lm(rejections~diet*weight,data=dd2))
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)
## (Intercept)    0.3455     0.9119   0.379    0.710
## dietN          1.9557     1.4000   1.397    0.182
## weight         3.9573    21.6920   0.182    0.858
## dietN:weight  -5.7465    22.5013  -0.255    0.802

Memusatkan variabel bobot:

dd2$cweight <- dd2$weight-mean(dd2$weight)
summary(fit.clm <- update(fit.lm,rejections~diet*cweight))
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)
## (Intercept)     0.7559     1.4429   0.524    0.608
## dietN           1.3598     1.5318   0.888    0.388
## cweight         3.9573    21.6920   0.182    0.858
## dietN:cweight  -5.7465    22.5013  -0.255    0.802

Tidak ada perubahan besar dalam cerita di sini.

car::Anova(fit.clm,type="3")
## Response: rejections
##               Sum Sq Df F value Pr(>F)
## (Intercept)   0.3149  1  0.2744 0.6076
## diet          0.9043  1  0.7881 0.3878
## cweight       0.0382  1  0.0333 0.8575
## diet:cweight  0.0748  1  0.0652 0.8017
## Residuals    18.3591 16               

Ada beberapa argumen tentang apakah yang disebut tes "tipe 3" masuk akal; mereka tidak selalu, meskipun memusatkan berat badan membantu. Analisis tipe 2, yang menguji efek utama setelah mengeluarkan interaksi dari model, mungkin lebih dapat dipertahankan. Dalam hal ini, diet dan berat badan diuji di hadapan satu sama lain, tetapi tanpa interaksi.

car::Anova(fit.clm,type="2")
## Response: rejections
##               Sum Sq Df F value  Pr(>F)  
## diet          4.1179  1  3.5888 0.07639 .
## cweight       0.0661  1  0.0576 0.81343  
## diet:cweight  0.0748  1  0.0652 0.80168  
## Residuals    18.3591 16                  

Kita dapat melihat bahwa jika kita menganalisis pola makan mengabaikan efek berat badan kita akan mendapatkan hasil yang sangat signifikan - ini pada dasarnya adalah apa yang Anda temukan dalam analisis Anda, karena ANOVA berurutan.

fit.lm_diet <- update(fit.clm,. ~ diet)
car::Anova(fit.lm_diet)
## Response: rejections
##           Sum Sq Df F value   Pr(>F)   
## diet       11.25  1  10.946 0.003908 **
## Residuals  18.50 18                    

Akan lebih standar untuk mencocokkan data semacam ini dengan Poisson GLM ( glm(rejections~diet*cweight,data=dd2,family=poisson)), tetapi dalam kasus ini tidak banyak membuat perbedaan pada kesimpulan.

Ngomong-ngomong, lebih baik mengatur ulang data Anda secara terprogram daripada dengan tangan jika Anda bisa. Untuk referensi, ini adalah bagaimana saya melakukannya (maaf untuk jumlah "sihir" yang saya gunakan):

library(tidyr)
library(dplyr)

dd <- read.table(header=TRUE,text=
"Trial A_Weight   N_Weight   A_Rejections N_Rejections
1     0.0496     0.1857     0     1 
2     0.0324     0.1112     0     2
3     0.0291     0.3011     0     2
4     0.0247     0.2066     0     3
5     0.0394     0.1448     3     1
6     0.0641     0.0838     1     3
7     0.0360     0.1963     0     2
8     0.0243     0.145      0     3
9     0.0682     0.1519     0     3
10    0.0225     0.1571     1     0
")

## pick out weight and rearrange to long format
dwt <- dd %>% select(Trial,A_Weight,N_Weight) %>%
    gather(diet,weight,-Trial) %>%
    mutate(diet=gsub("_.*","",diet))
## ditto, rejections
drej <- dd %>% select(Trial,A_Rejections,N_Rejections) %>%
    gather(diet,rejections,-Trial) %>%
    mutate(diet=gsub("_.*","",diet))
## put them back together
dd2 <- full_join(dwt,drej,by=c("Trial","diet"))

Merencanakan kode:

dd_sum <- dd2 %>% group_by(diet) %>%
   do(data.frame(weight=mean(.$weight),
              rbind(mean_cl_boot(.$rejections))))

library(ggplot2); theme_set(theme_bw())
ggplot(dd2,aes(weight,rejections,colour=diet))+
geom_point()+
scale_colour_brewer(palette="Set1")+
scale_fill_brewer(palette="Set1")+
geom_pointrange(data=dd_sum,aes(y=y,ymin=ymin,ymax=ymax),
                size=4,alpha=0.5,show.legend=FALSE)+
geom_smooth(method="lm",aes(fill=diet),alpha=0.1)+
geom_smooth(method="lm",aes(group=1),colour="darkgray",
            alpha=0.1)+
scale_y_continuous(limits=c(0,3),oob=scales::squish)
Ben Bolker
sumber
2
Terima kasih banyak atas bantuan Anda. Saya tidak menyadari ANOVA berurutan, dan mengabaikan berat dalam hal ini - baik untuk diketahui!
Meow