Analiza zbioru danych PlantGrowth

Author

Patrycja Kozik


Wprowadzenie

Zbiór danych PlantGrowth zawiera informacje o wzroście roślin w zależności od zastosowanego typu odżywki. Eksperyment miał na celu sprawdzenie, czy zastosowanie różnych typów nawozów wpływa na masę rośliny. Analiza tego zbioru pozwala zrozumieć wpływ różnych czynników na rozwój roślin.

Informacje o zbiorze: - Zbiór danych zawiera 30 obserwacji.

  1. Zmienna zależna: masa rośliny (weight).

  2. Zmienna grupująca: typ odżywki (group).

  • ctrl (kontrola, bez odżywki),

  • trt1 (pierwszy typ odżywki),

  • trt2 (drugi typ odżywki).

Wczytanie danych PlantGrowth

data(PlantGrowth) 
head(PlantGrowth)
  weight group
1   4.17  ctrl
2   5.58  ctrl
3   5.18  ctrl
4   6.11  ctrl
5   4.50  ctrl
6   4.61  ctrl

Podsumowanie zbioru

summary(PlantGrowth)
     weight       group   
 Min.   :3.590   ctrl:10  
 1st Qu.:4.550   trt1:10  
 Median :5.155   trt2:10  
 Mean   :5.073            
 3rd Qu.:5.530            
 Max.   :6.310            

Struktura danych

str(PlantGrowth)
'data.frame':   30 obs. of  2 variables:
 $ weight: num  4.17 5.58 5.18 6.11 4.5 4.61 5.17 4.53 5.33 5.14 ...
 $ group : Factor w/ 3 levels "ctrl","trt1",..: 1 1 1 1 1 1 1 1 1 1 ...

Wykres skrzynkowy

boxplot(weight ~ group, data = PlantGrowth,
        main = "Porównanie masy roślin w grupach",
        xlab = "Typ odżywki", ylab = "Masa rośliny (g)",
        col = c("lightblue", "darkblue", "blue"))

Histogram masy roślin

hist(PlantGrowth$weight, 
     main = "Histogram masy roślin",
     xlab = "Masa rośliny (g)", 
     col = "skyblue", 
     border = "white")

Obliczanie średnich i przedziałów ufności

library(dplyr)

Dołączanie pakietu: 'dplyr'
Następujące obiekty zostały zakryte z 'package:stats':

    filter, lag
Następujące obiekty zostały zakryte z 'package:base':

    intersect, setdiff, setequal, union
srednie <- PlantGrowth %>%
  group_by(grupa = group) %>%
  summarise(srednia_masa = mean(weight),
            odchylenie_standardowe = sd(weight),
            liczebnosc = n(),
            blad_standardowy = odchylenie_standardowe / sqrt(liczebnosc))

srednie <- srednie %>%
  mutate(dolny_przedzial = srednia_masa - qt(0.975, df = liczebnosc - 1) * blad_standardowy,
         gorny_przedzial = srednia_masa + qt(0.975, df = liczebnosc - 1) * blad_standardowy)

srednie
# A tibble: 3 × 7
  grupa srednia_masa odchylenie_standardowe liczebnosc blad_standardowy
  <fct>        <dbl>                  <dbl>      <int>            <dbl>
1 ctrl          5.03                  0.583         10            0.184
2 trt1          4.66                  0.794         10            0.251
3 trt2          5.53                  0.443         10            0.140
# ℹ 2 more variables: dolny_przedzial <dbl>, gorny_przedzial <dbl>

Wykres słupkowy z przedziałami ufności

library(ggplot2)

ggplot(srednie, aes(x = grupa, y = srednia_masa, fill = grupa)) +
  geom_bar(stat = "identity", color = "black", width = 0.6) +
  geom_errorbar(aes(ymin = dolny_przedzial, ymax = gorny_przedzial), 
                width = 0.2, color = "black") +
  labs(title = "Średnia masa roślin z przedziałami ufności",
       x = "Grupa", y = "Średnia masa rośliny (g)") +
  scale_fill_manual(values = c("lightblue", "blue", "darkblue")) +
  theme_minimal()

Analiza statystyczna - Test ANOVA

ANOVA bada, czy istnieją statystycznie istotne różnice między grupami.

anova_result <- aov(weight ~ group, data = PlantGrowth)
summary(anova_result)
            Df Sum Sq Mean Sq F value Pr(>F)  
group        2  3.766  1.8832   4.846 0.0159 *
Residuals   27 10.492  0.3886                 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Suma kwadratów (Sum Sq): Mierzy całkowitą zmienność w danych, która jest rozkładana na część wyjaśnioną przez model (grupy) oraz część błędu.

Średnia suma kwadratów (Mean Sq): Obliczana przez podzielenie sumy kwadratów przez stopnie swobody. To miara rozrzutu.

F-statystyka (F value): Testuje, czy zmienność między grupami jest większa niż zmienność wewnątrz grup. Duża wartość F sugeruje, że różnice między grupami są istotne.

Wartość p (Pr(>F)): Ocenia, czy F-statystyka jest statystycznie istotna. Jeśli wartość p jest mniejsza niż 0.05, odrzucamy hipotezę zerową, co oznacza, że średnie różnią się między grupami w sposób statystycznie istotny.

Test Tukeya

Test Tukeya pozwala na identyfikację par grup, które różnią się istotnie.

tukey_result <- TukeyHSD(anova_result)
tukey_result
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = weight ~ group, data = PlantGrowth)

$group
            diff        lwr       upr     p adj
trt1-ctrl -0.371 -1.0622161 0.3202161 0.3908711
trt2-ctrl  0.494 -0.1972161 1.1852161 0.1979960
trt2-trt1  0.865  0.1737839 1.5562161 0.0120064

Różnica: Określa, o ile różnią się średnie między grupami.

Dolny przedział i Górny przedział: Określają zakres, w którym spodziewamy się prawdziwej różnicy średnich z 95% pewnością.

Wartość p: Pokazuje, czy różnica jest statystycznie istotna. Jeśli wartość p jest mniejsza niż 0.05, różnica jest statystycznie istotna.

Wykres Tukeya

tukey_df <- as.data.frame(tukey_result$group)

ggplot(tukey_df, aes(x = diff, y = rownames(tukey_df))) + 
  geom_point(color = "darkblue") +
  geom_errorbarh(aes(xmin = lwr, xmax = upr), height = 0.2, color = "darkblue") +
  labs(title = "Wyniki testu Tukeya",
       x = "Różnica średnich mas roślin (g)",
       y = "Porównanie grup") +
  theme_minimal()

Podsumowanie

Zbiór danych PlantGrowth pozwala na analizę wpływu różnych typów odżywek na wzrost roślin. Powyższe obliczenia i wykresy ukazują, że:

  1. Typ odżywki ma istotny wpływ na wzrost roślin.

  2. Test ANOVA wykazał istotne różnice między grupami.

  3. Test Tukeya pomógł określić, które grupy różnią się od siebie w sposób statystycznie istotny.