使用 ggplot2 绘制箱线图并进行两个样本 t 检验
plot boxplot using ggplot2 and conduct two sample t-tests
这是我的数据。你可以打开这个linkhttps://www.dropbox.com/s/3bypmpojkpnomos/trial1.txt?dl=0
我想绘制一个箱线图,其中男性和女性在 x 轴上,他们的频率在 y 轴上。
然后从那里,我想进行两个样本 t 检验。有什么方法可以区分受干扰和未受干扰的栖息地吗?
这是我试过的;
# install and load ggplot2
trial1$Sex <- factor(trial1$Sex,labels = c("Female", "Male"))
P1 <- qplot(trial1$Sex, xlab="Host Sex", ylab="Host caught", main="HOSTS CAUGHT VS SEX")
trial1$Habitat <- factor(trial1$Age,labels = c("Disturb", "Undisturb"))
P2 <- qplot(trial1$Habitat, xlab="Habitat", ylab="Host caught", main="HOSTS CAUGHT VS HABITAT")
# calculatefrequency
library(plyr) #can also count using this package
#calculate frequency and make data frame
library(dplyr)#or this package
f1 <- factor(c(Sex))
T1 <- table(f1) #create table of frequency
f2 <- factor(c(Habitat))
T2 <- table(f2)
a1 <- ggplot(data = trial1, aes(x = Sex, y = Freq, colour = Sex)) +
geom_boxplot() + xlab("Sex") + ylab("Total ectoparasites") +
ggtitle("Sex vs Total ectoparasites")
您应该对此类数据做的第一件事是将其从宽格式重塑为长格式。这意味着创建 2 列,一列用于 P1、P2 等 ,一列用于相应的值。
library(dplyr)
library(tidyr)
library(ggplot2)
trial1 %>%
gather(variable, value, -Habitat, -Sex, -Birds)
在这种情况下我不推荐使用箱线图;鉴于数据中有大量零值,它不会提供信息。我可以建议使用 geom_jitter
来绘制计数与性别的关系图,并使用分面根据栖息地进一步子集化吗:
trial1 %>%
gather(variable, value, -Habitat, -Sex, -Birds) %>%
ggplot(aes(Sex, value)) +
geom_jitter(width = 0.2, alpha = 0.3) +
facet_grid(Habitat ~ .) +
labs(y = "total ectoparasites", title = "Total ectoparasites by Sex and Habitat") +
theme_light()
您可以通过多种方式汇总数据以进行后续统计测试。例如,要按性别和栖息地获得 2 x 2 table 的计数(实际上是 2 x 3,因为性别是第一列:
trial1 %>%
gather(variable, value, -Habitat, -Sex, -Birds) %>%
group_by(Sex, Habitat) %>%
summarise(count = sum(value)) %>%
spread(Habitat, count)
Sex Disturb Undisturb
* <chr> <int> <int>
1 Female 6 23
2 Male 69 117
这是我的数据。你可以打开这个linkhttps://www.dropbox.com/s/3bypmpojkpnomos/trial1.txt?dl=0
我想绘制一个箱线图,其中男性和女性在 x 轴上,他们的频率在 y 轴上。 然后从那里,我想进行两个样本 t 检验。有什么方法可以区分受干扰和未受干扰的栖息地吗?
这是我试过的;
# install and load ggplot2
trial1$Sex <- factor(trial1$Sex,labels = c("Female", "Male"))
P1 <- qplot(trial1$Sex, xlab="Host Sex", ylab="Host caught", main="HOSTS CAUGHT VS SEX")
trial1$Habitat <- factor(trial1$Age,labels = c("Disturb", "Undisturb"))
P2 <- qplot(trial1$Habitat, xlab="Habitat", ylab="Host caught", main="HOSTS CAUGHT VS HABITAT")
# calculatefrequency
library(plyr) #can also count using this package
#calculate frequency and make data frame
library(dplyr)#or this package
f1 <- factor(c(Sex))
T1 <- table(f1) #create table of frequency
f2 <- factor(c(Habitat))
T2 <- table(f2)
a1 <- ggplot(data = trial1, aes(x = Sex, y = Freq, colour = Sex)) +
geom_boxplot() + xlab("Sex") + ylab("Total ectoparasites") +
ggtitle("Sex vs Total ectoparasites")
您应该对此类数据做的第一件事是将其从宽格式重塑为长格式。这意味着创建 2 列,一列用于 P1、P2 等 ,一列用于相应的值。
library(dplyr)
library(tidyr)
library(ggplot2)
trial1 %>%
gather(variable, value, -Habitat, -Sex, -Birds)
在这种情况下我不推荐使用箱线图;鉴于数据中有大量零值,它不会提供信息。我可以建议使用 geom_jitter
来绘制计数与性别的关系图,并使用分面根据栖息地进一步子集化吗:
trial1 %>%
gather(variable, value, -Habitat, -Sex, -Birds) %>%
ggplot(aes(Sex, value)) +
geom_jitter(width = 0.2, alpha = 0.3) +
facet_grid(Habitat ~ .) +
labs(y = "total ectoparasites", title = "Total ectoparasites by Sex and Habitat") +
theme_light()
您可以通过多种方式汇总数据以进行后续统计测试。例如,要按性别和栖息地获得 2 x 2 table 的计数(实际上是 2 x 3,因为性别是第一列:
trial1 %>%
gather(variable, value, -Habitat, -Sex, -Birds) %>%
group_by(Sex, Habitat) %>%
summarise(count = sum(value)) %>%
spread(Habitat, count)
Sex Disturb Undisturb
* <chr> <int> <int>
1 Female 6 23
2 Male 69 117