library(readxl)
LSD_data <- read_excel("LSD data.xlsx")
LSD_data
# A tibble: 16 × 4
     Row Column Varieties Yield
   <dbl>  <dbl> <chr>     <dbl>
 1     1      1 B          1.64
 2     1      2 D          1.21
 3     1      3 C          1.42
 4     1      4 A          1.34
 5     2      1 C          1.48
 6     2      2 A          1.18
 7     2      3 D          1.4 
 8     2      4 B          1.29
 9     3      1 A          1.67
10     3      2 C          0.71
11     3      3 B          1.66
12     3      4 D          1.18
13     4      1 D          1.56
14     4      2 B          1.29
15     4      3 A          1.66
16     4      4 C          0.66
head(LSD_data)
# A tibble: 6 × 4
    Row Column Varieties Yield
  <dbl>  <dbl> <chr>     <dbl>
1     1      1 B          1.64
2     1      2 D          1.21
3     1      3 C          1.42
4     1      4 A          1.34
5     2      1 C          1.48
6     2      2 A          1.18
str(LSD_data)
tibble [16 × 4] (S3: tbl_df/tbl/data.frame)
 $ Row      : num [1:16] 1 1 1 1 2 2 2 2 3 3 ...
 $ Column   : num [1:16] 1 2 3 4 1 2 3 4 1 2 ...
 $ Varieties: chr [1:16] "B" "D" "C" "A" ...
 $ Yield    : num [1:16] 1.64 1.21 1.42 1.34 1.48 ...

Changing variables structure into factors

LSD_data$Row <- as.factor(LSD_data$Row)

LSD_data$Column <- as.factor(LSD_data$Column)

LSD_data$Varieties <- as.factor(LSD_data$Varieties)
str(LSD_data)
tibble [16 × 4] (S3: tbl_df/tbl/data.frame)
 $ Row      : Factor w/ 4 levels "1","2","3","4": 1 1 1 1 2 2 2 2 3 3 ...
 $ Column   : Factor w/ 4 levels "1","2","3","4": 1 2 3 4 1 2 3 4 1 2 ...
 $ Varieties: Factor w/ 4 levels "A","B","C","D": 2 4 3 1 3 1 4 2 1 3 ...
 $ Yield    : num [1:16] 1.64 1.21 1.42 1.34 1.48 ...
attach(LSD_data)

Applying analysis of variance model

model <- lm(Yield ~ Row+Column+Varieties)
anova(model)
Analysis of Variance Table

Response: Yield
          Df  Sum Sq  Mean Sq F value   Pr(>F)   
Row        3 0.03015 0.010052  0.4654 0.716972   
Column     3 0.82734 0.275781 12.7692 0.005148 **
Varieties  3 0.42684 0.142281  6.5879 0.025092 * 
Residuals  6 0.12958 0.021597                    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Mean comparison test

library(agricolae)
Warning: package 'agricolae' was built under R version 4.2.2

LSD test

LSD.test(y = model,
         trt = "Varieties",
         DFerror = model$df.residual,
         MSerror = deviance(model)/model$df.residual,
         alpha = 0.05,
         group = TRUE,
         console = TRUE)

Study: model ~ "Varieties"

LSD t Test for Yield 

Mean Square Error:  0.0215974 

Varieties,  means and individual ( 95 %) CI

    Yield       std r       LCL     UCL   Min   Max
A 1.46375 0.2386900 4 1.2839503 1.64355 1.185 1.670
B 1.47125 0.2095382 4 1.2914503 1.65105 1.290 1.665
C 1.06750 0.4426153 4 0.8877003 1.24730 0.660 1.475
D 1.33875 0.1795538 4 1.1589503 1.51855 1.180 1.565

Alpha: 0.05 ; DF Error: 6
Critical Value of t: 2.446912 

least Significant Difference: 0.2542752 

Treatments with the same letter are not significantly different.

    Yield groups
B 1.47125      a
A 1.46375      a
D 1.33875      a
C 1.06750      b

The results showed that varieties B, A and D were statistically at par and yielded more than variety C.

SNK test

SNK.test(y = Yield,
         trt = Varieties,
         DFerror = model$df.residual,
         MSerror = deviance(model)/model$df.residual,
         alpha = 0.05,
         group = TRUE,
         console = TRUE)

Study: Yield ~ Varieties

Student Newman Keuls Test
for Yield 

Mean Square Error:  0.0215974 

Varieties,  means

    Yield       std r   Min   Max
A 1.46375 0.2386900 4 1.185 1.670
B 1.47125 0.2095382 4 1.290 1.665
C 1.06750 0.4426153 4 0.660 1.475
D 1.33875 0.1795538 4 1.180 1.565

Alpha: 0.05 ; DF Error: 6 

Critical Range
        2         3         4 
0.2542752 0.3188452 0.3597299 

Means with the same letter are not significantly different.

    Yield groups
B 1.47125      a
A 1.46375      a
D 1.33875      a
C 1.06750      b