R 对重复处理而不是参数执行pca

R 对重复处理而不是参数执行pca,r,statistics,pca,R,Statistics,Pca,我有一个数据集,第1列包含治疗名称,其余列包含这些治疗的值,每个治疗有三个重复。为了便于说明,我使用iris数据集创建了模拟数据集,如下所示: df <- read.table(text = '"Treatment" "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "treatment_a" 5.1 3.5 1.4 0.2 "treatment_a" 4.9 3 1.4 0.2 "treatment_a" 4.7 3.2

我有一个数据集,第1列包含治疗名称,其余列包含这些治疗的值,每个治疗有三个重复。为了便于说明,我使用iris数据集创建了模拟数据集,如下所示:

df <- read.table(text = '"Treatment" "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
"treatment_a" 5.1 3.5 1.4 0.2
"treatment_a" 4.9 3 1.4 0.2
"treatment_a" 4.7 3.2 1.3 0.2
"treatment_b" 4.6 3.1 1.5 0.2
"treatment_b" 5 3.6 1.4 0.2
"treatment_b" 5.4 3.9 1.7 0.4
"treatment_c" 4.6 3.4 1.4 0.3
"treatment_c" 5 3.4 1.5 0.2
"treatment_c" 4.4 2.9 1.4 0.2
"treatment_d" 4.9 3.1 1.5 0.1
"treatment_d" 5.4 3.7 1.5 0.2
"treatment_d" 4.8 3.4 1.6 0.2
"treatment_e" 4.8 3 1.4 0.1
"treatment_e" 4.3 3 1.1 0.1
"treatment_e" 5.8 4 1.2 0.2
"treatment_f" 5.7 4.4 1.5 0.4
"treatment_f" 5.4 3.9 1.3 0.4
"treatment_f" 5.1 3.5 1.4 0.3
"treatment_g" 5.7 3.8 1.7 0.3
"treatment_g" 5.1 3.8 1.5 0.3
"treatment_g" 5.4 3.4 1.7 0.2
"treatment_h" 5.1 3.7 1.5 0.4
"treatment_h" 4.6 3.6 1 0.2
"treatment_h" 5.1 3.3 1.7 0.5', header = TRUE)
df原始响应
您是否希望分别在x轴和y轴上绘制第一个和第二个主分量的散点图?然后你想在这些点上贴上治疗标签?如果是这样,你可以试一试。我正在使用
ggplot2
软件包

我还增加了一个颜色审美的锅。如果你不想要的话,可以随意放下那部分

df <- read.table(text = '"Treatment" "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
"treatment_a" 5.1 3.5 1.4 0.2
"treatment_a" 4.9 3 1.4 0.2
"treatment_a" 4.7 3.2 1.3 0.2
"treatment_b" 4.6 3.1 1.5 0.2
"treatment_b" 5 3.6 1.4 0.2
"treatment_b" 5.4 3.9 1.7 0.4
"treatment_c" 4.6 3.4 1.4 0.3
"treatment_c" 5 3.4 1.5 0.2
"treatment_c" 4.4 2.9 1.4 0.2
"treatment_d" 4.9 3.1 1.5 0.1
"treatment_d" 5.4 3.7 1.5 0.2
"treatment_d" 4.8 3.4 1.6 0.2
"treatment_e" 4.8 3 1.4 0.1
"treatment_e" 4.3 3 1.1 0.1
"treatment_e" 5.8 4 1.2 0.2
"treatment_f" 5.7 4.4 1.5 0.4
"treatment_f" 5.4 3.9 1.3 0.4
"treatment_f" 5.1 3.5 1.4 0.3
"treatment_g" 5.7 3.8 1.7 0.3
"treatment_g" 5.1 3.8 1.5 0.3
"treatment_g" 5.4 3.4 1.7 0.2
"treatment_h" 5.1 3.7 1.5 0.4
"treatment_h" 4.6 3.6 1 0.2
"treatment_h" 5.1 3.3 1.7 0.5', header = TRUE)

# run principle components, ignore first column
pr <- prcomp(df[, 2:5])

# run predict to get the first and second principle components
pr_pred <- predict(pr)

# put this into a data frame so we can use ggplot
df2 <- data.frame(Treatment = df$Treatment,
                  pr_pred[, 1:2])

library(ggplot2)

ggplot(data = df2, aes(x = PC1, y = PC2, 
                       colour = Treatment, 
                       label = Treatment)) + 
    geom_text()

df我们可以根据处理方法将椭球添加到此绘图中吗?您可以尝试执行
+stat\u eliple()
。但是,每个类别只有三分,我认为这不足以让
ggplot
绘制一个椭圆。用修改后的数据框更新了答案,使
stat_ellipse
工作的处理选项更少。这非常有帮助,所以我了解到,当你只有三到四种治疗方法时,像派一样的椭圆是有用的。
df_mod <- read.table(text = '"Treatment" "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
"treatment_a" 5.1 3.5 1.4 0.2
                 "treatment_a" 4.9 3 1.4 0.2
                 "treatment_a" 4.7 3.2 1.3 0.2
                 "treatment_b" 4.6 3.1 1.5 0.2
                 "treatment_b" 5 3.6 1.4 0.2
                 "treatment_b" 5.4 3.9 1.7 0.4
                 "treatment_c" 4.6 3.4 1.4 0.3
                 "treatment_c" 5 3.4 1.5 0.2
                 "treatment_c" 4.4 2.9 1.4 0.2
                 "treatment_a" 4.9 3.1 1.5 0.1
                 "treatment_a" 5.4 3.7 1.5 0.2
                 "treatment_a" 4.8 3.4 1.6 0.2
                 "treatment_b" 4.8 3 1.4 0.1
                 "treatment_b" 4.3 3 1.1 0.1
                 "treatment_b" 5.8 4 1.2 0.2
                 "treatment_c" 5.7 4.4 1.5 0.4
                 "treatment_c" 5.4 3.9 1.3 0.4
                 "treatment_c" 5.1 3.5 1.4 0.3
                 "treatment_a" 5.7 3.8 1.7 0.3
                 "treatment_a" 5.1 3.8 1.5 0.3
                 "treatment_b" 5.4 3.4 1.7 0.2
                 "treatment_b" 5.1 3.7 1.5 0.4
                 "treatment_c" 4.6 3.6 1 0.2
                 "treatment_c" 5.1 3.3 1.7 0.5', header = TRUE)


pr_mod <- prcomp(df_mod[, 2:5])
pr_pred_mod <- predict(pr_mod)

df2_mod <- data.frame(Treatment = df_mod$Treatment,
                  pr_pred_mod[, 1:2])

ggplot(data = df2_mod, aes(x = PC1, y = PC2, 
                       colour = Treatment, 
                       label = Treatment)) + 
    geom_text() + 
    stat_ellipse(show.legend = FALSE)