Texture Analysis of Plant-based and Conventional Hotdogs and Italian Sausages

Final paper

Sasi Tansaraviput
2022-05-11

Introduction

plant-based diet consumption has grown significantly following the rise in health awareness in consumers. With the majority of the consumers desiring for plant-based products that imitated the taste and texture of the conventional ones, the food science community has taken interest in the development of plant-based food. However, the plant-based sausages that were commercially available in the market are still lacking. To develop more meat-like plant-based sausages, the textural attributes of the conventional sausages should be considered. With the texture data that I gather from the commercially available plant-based hotdogs and sausages and the even number of conventional meat products using texture profile analysis (TPA), I analyzed the data with analysis of variance (ANOVA) and plotting the principal component analysis (PCA) plot to answer the research questions.

Research questions

To develop accurate imitation of conventional meat hotdogs and sausages, there are 2 questions that need to be answered in this study. The first one is “How are the plant-based products’ texture attributes different from meat-based one?” while the second research questions is “What is the best available commercially plant protein option between vital wheat gluten, pea protein, and soy protein to imitate the texture of meat-based hotdogs and Italian sausages?”

Data

This data was gathered from research in the plant-based hotdogs and sausages using texture profile analysis (TPA). There are totally 7 textural attributes collected, i.e. Hardness, Adhesiveness, Resilience, Cohesion, Springiness, Gumminess, and Chewiness.

Read in dataset

library(readxl)
TPA <- read_excel("TPA_all.xlsx")
TPA
# A tibble: 145 x 14
   Product             Brand Type  Protein Component Sampling Hardness
   <chr>               <chr> <chr> <chr>   <chr>        <dbl>    <dbl>
 1 BallPark Beef Fran~ Ball~ HD    M       B                1    3820.
 2 BallPark Beef Fran~ Ball~ HD    M       B                2    4522.
 3 BallPark Beef Fran~ Ball~ HD    M       B                3    3653.
 4 BallPark Beef Fran~ Ball~ HD    M       B                4    3594.
 5 BAR S FRANKS        Bar S HD    M       CP               1    2886.
 6 BAR S FRANKS        Bar S HD    M       CP               2    3773.
 7 BAR S FRANKS        Bar S HD    M       CP               3    3948.
 8 BAR S FRANKS        Bar S HD    M       CP               4    3439.
 9 BAR S FRANKS        Bar S HD    M       CP               5    3792.
10 BAR S FRANKS        Bar S HD    M       CP               6    3875.
# ... with 135 more rows, and 7 more variables: Adhesiveness <dbl>,
#   Resilence <dbl>, Cohesion <dbl>, Springiness <dbl>,
#   Gumminess <dbl>, Chewiness <dbl>, Diameter <dbl>
#delete diameter
TPA <- TPA[,c("Product","Brand","Type","Protein","Component","Sampling","Hardness","Adhesiveness","Resilence","Cohesion","Springiness","Gumminess","Chewiness")]
TPA
# A tibble: 145 x 13
   Product             Brand Type  Protein Component Sampling Hardness
   <chr>               <chr> <chr> <chr>   <chr>        <dbl>    <dbl>
 1 BallPark Beef Fran~ Ball~ HD    M       B                1    3820.
 2 BallPark Beef Fran~ Ball~ HD    M       B                2    4522.
 3 BallPark Beef Fran~ Ball~ HD    M       B                3    3653.
 4 BallPark Beef Fran~ Ball~ HD    M       B                4    3594.
 5 BAR S FRANKS        Bar S HD    M       CP               1    2886.
 6 BAR S FRANKS        Bar S HD    M       CP               2    3773.
 7 BAR S FRANKS        Bar S HD    M       CP               3    3948.
 8 BAR S FRANKS        Bar S HD    M       CP               4    3439.
 9 BAR S FRANKS        Bar S HD    M       CP               5    3792.
10 BAR S FRANKS        Bar S HD    M       CP               6    3875.
# ... with 135 more rows, and 6 more variables: Adhesiveness <dbl>,
#   Resilence <dbl>, Cohesion <dbl>, Springiness <dbl>,
#   Gumminess <dbl>, Chewiness <dbl>
#change type of sausages
TPA <- TPA %>% dplyr::mutate(Type = ifelse(as.character(Type) != "HD","IT",as.character(Type)))
TPA
# A tibble: 145 x 13
   Product             Brand Type  Protein Component Sampling Hardness
   <chr>               <chr> <chr> <chr>   <chr>        <dbl>    <dbl>
 1 BallPark Beef Fran~ Ball~ HD    M       B                1    3820.
 2 BallPark Beef Fran~ Ball~ HD    M       B                2    4522.
 3 BallPark Beef Fran~ Ball~ HD    M       B                3    3653.
 4 BallPark Beef Fran~ Ball~ HD    M       B                4    3594.
 5 BAR S FRANKS        Bar S HD    M       CP               1    2886.
 6 BAR S FRANKS        Bar S HD    M       CP               2    3773.
 7 BAR S FRANKS        Bar S HD    M       CP               3    3948.
 8 BAR S FRANKS        Bar S HD    M       CP               4    3439.
 9 BAR S FRANKS        Bar S HD    M       CP               5    3792.
10 BAR S FRANKS        Bar S HD    M       CP               6    3875.
# ... with 135 more rows, and 6 more variables: Adhesiveness <dbl>,
#   Resilence <dbl>, Cohesion <dbl>, Springiness <dbl>,
#   Gumminess <dbl>, Chewiness <dbl>

The data was cleaned, remove unnecessary column, and made to be more uniformed using readxl and dplyr functions.

#Explain the variables
str(TPA)
tibble [145 x 13] (S3: tbl_df/tbl/data.frame)
 $ Product     : chr [1:145] "BallPark Beef Franks" "BallPark Beef Franks" "BallPark Beef Franks" "BallPark Beef Franks" ...
 $ Brand       : chr [1:145] "Ballpark" "Ballpark" "Ballpark" "Ballpark" ...
 $ Type        : chr [1:145] "HD" "HD" "HD" "HD" ...
 $ Protein     : chr [1:145] "M" "M" "M" "M" ...
 $ Component   : chr [1:145] "B" "B" "B" "B" ...
 $ Sampling    : num [1:145] 1 2 3 4 1 2 3 4 5 6 ...
 $ Hardness    : num [1:145] 3820 4522 3653 3594 2886 ...
 $ Adhesiveness: num [1:145] -11.35 -10.63 -11.91 -8.65 -8.82 ...
 $ Resilence   : num [1:145] 32.2 34.2 34.1 25.3 40.6 ...
 $ Cohesion    : num [1:145] 0.6 0.679 0.607 0.468 0.726 0.743 0.724 0.738 0.721 0.746 ...
 $ Springiness : num [1:145] 92 88.2 90.4 86.8 93.3 ...
 $ Gumminess   : num [1:145] 2292 3072 2217 1683 2094 ...
 $ Chewiness   : num [1:145] 2107 2710 2005 1461 1953 ...

TPA data has 13 variables. Product (Variable 1), Brand (Variable 2), Type (Variable 3), Protein (Variable 4), and Component (Variable 5) variables are characters type while Sampling (Variable 6) is integer. The other variables, i.e. Hardness (Variable 7), Adhesiveness (Variable 8), Resilence (Variable 9), Cohesion (Variable 10), Springiness (Variable 11), Gumminess (Variable 12), Chewiness (Variable 13) are numeric.

Statistical Analysis of the data and visualizations

Mean, median, and standard deviations of each hotdog and sausage

TPA_mean <- TPA %>% group_by(Product,Type,Protein,Component) %>% summarise_at(vars(Hardness:Chewiness), list(mean = mean))
#round to 3 digits
TPA_mean <- mutate_if(TPA_mean , is.numeric, round, 3)
TPA_mean
# A tibble: 27 x 11
# Groups:   Product, Type, Protein [27]
   Product      Type  Protein Component Hardness_mean Adhesiveness_me~
   <chr>        <chr> <chr>   <chr>             <dbl>            <dbl>
 1 ALL NATULRA~ IT    M       P                10547.           -10.6 
 2 BallPark Be~ HD    M       B                 3897.           -10.6 
 3 BAR S FRANKS HD    M       CP                3619.           -37.9 
 4 BEYOND MEAT~ IT    PB      PP                1518.           -30.9 
 5 Beyond Saus~ IT    PB      PP                2132.           -17.7 
 6 BIGY SWEET ~ IT    M       P                11149.            -7.39
 7 FIELD ROAST~ HD    PB      VWG               5135.           -24.3 
 8 FIELD ROAST~ IT    PB      VWG               5440.            -5.07
 9 FIELD ROAST~ HD    PB      PP                2699.           -71.3 
10 Flame grill~ IT    M       P                 7794.            -5.48
# ... with 17 more rows, and 5 more variables: Resilence_mean <dbl>,
#   Cohesion_mean <dbl>, Springiness_mean <dbl>,
#   Gumminess_mean <dbl>, Chewiness_mean <dbl>
TPA_med <- TPA %>% group_by(Product,Type,Protein,Component) %>% summarise_at(vars(Hardness:Chewiness), list(med = median))
#round to 3 digits
TPA_med <- mutate_if(TPA_med , is.numeric, round, 3)
TPA_med
# A tibble: 27 x 11
# Groups:   Product, Type, Protein [27]
   Product       Type  Protein Component Hardness_med Adhesiveness_med
   <chr>         <chr> <chr>   <chr>            <dbl>            <dbl>
 1 ALL NATULRAL~ IT    M       P               10305.            -2.11
 2 BallPark Bee~ HD    M       B                3737.           -11.0 
 3 BAR S FRANKS  HD    M       CP               3782.           -40.3 
 4 BEYOND MEAT ~ IT    PB      PP               1551.           -29.4 
 5 Beyond Sausa~ IT    PB      PP               2142.           -18.7 
 6 BIGY SWEET I~ IT    M       P               11556.            -9.18
 7 FIELD ROAST ~ HD    PB      VWG              5122.           -22.5 
 8 FIELD ROAST ~ IT    PB      VWG              5456.            -5.03
 9 FIELD ROAST ~ HD    PB      PP               2705.           -78.4 
10 Flame grille~ IT    M       P                7696.            -6.47
# ... with 17 more rows, and 5 more variables: Resilence_med <dbl>,
#   Cohesion_med <dbl>, Springiness_med <dbl>, Gumminess_med <dbl>,
#   Chewiness_med <dbl>
TPA_sd <- TPA %>% group_by(Product,Type,Protein,Component) %>% summarise_at(vars(Hardness:Chewiness), list(sd = sd))
#round to 3 digits
TPA_sd <- mutate_if(TPA_sd , is.numeric, round, 3)
TPA_sd
# A tibble: 27 x 11
# Groups:   Product, Type, Protein [27]
   Product         Type  Protein Component Hardness_sd Adhesiveness_sd
   <chr>           <chr> <chr>   <chr>           <dbl>           <dbl>
 1 ALL NATULRAL S~ IT    M       P               843.            14.3 
 2 BallPark Beef ~ HD    M       B               427.             1.42
 3 BAR S FRANKS    HD    M       CP              399.            30.0 
 4 BEYOND MEAT HO~ IT    PB      PP              257.            12.6 
 5 Beyond Sausage~ IT    PB      PP               68.0           10.4 
 6 BIGY SWEET ITA~ IT    M       P              1426.             4.96
 7 FIELD ROAST CL~ HD    PB      VWG             643.             7.4 
 8 FIELD ROAST GA~ IT    PB      VWG             950.             1.84
 9 FIELD ROAST SI~ HD    PB      PP              237.            21.4 
10 Flame grilled ~ IT    M       P               610.             3.99
# ... with 17 more rows, and 5 more variables: Resilence_sd <dbl>,
#   Cohesion_sd <dbl>, Springiness_sd <dbl>, Gumminess_sd <dbl>,
#   Chewiness_sd <dbl>

These 3 tables demonstrated the mean, median, and standard deviations of each hotdog and Italian sausage.

ANOVA and Tukey’s post hoc test

Hotdogs dataset

The hotdogs and Italian sausages should be individually analyzed, thus I wrote this code to seperate them using data-wrangling operations. First, I analyzed the hotdogs dataset.

#For hotdogs
HD <- TPA_mean %>%
  filter(Type == "HD")

HD_M <- HD %>%
  filter(Protein == "M")
  
  
#Hardness
A_M_Hardness_HD <- aov(Hardness_mean ~ Component, data = HD_M)
summary(A_M_Hardness_HD)
            Df  Sum Sq Mean Sq F value Pr(>F)
Component    3 3747142 1249047   0.483  0.728
Residuals    2 5168328 2584164               
#Adhesiveness
A_M_Adhesiveness_HD <- aov(Adhesiveness_mean ~ Component, data = HD_M)
summary(A_M_Adhesiveness_HD)
            Df Sum Sq Mean Sq F value Pr(>F)
Component    3  570.4   190.1   1.375  0.447
Residuals    2  276.5   138.3               
#Resilence
A_M_Resilence_HD <- aov(Resilence_mean ~ Component, data = HD_M)
summary(A_M_Resilence_HD)
            Df Sum Sq Mean Sq F value Pr(>F)
Component    3  35.03   11.68   1.154  0.495
Residuals    2  20.24   10.12               
#Cohesion
A_M_Cohesion_HD <- aov(Cohesion_mean ~ Component, data = HD_M)
summary(A_M_Cohesion_HD)
            Df   Sum Sq  Mean Sq F value Pr(>F)
Component    3 0.016121 0.005374   4.376  0.192
Residuals    2 0.002456 0.001228               
#Springiness
A_M_Springiness_HD <- aov(Springiness_mean ~ Component, data = HD_M)
summary(A_M_Springiness_HD)
            Df Sum Sq Mean Sq F value Pr(>F)  
Component    3  37.68  12.561   23.96 0.0403 *
Residuals    2   1.05   0.524                 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#Gumminess
A_M_Gumminess_HD <- aov(Gumminess_mean ~ Component, data = HD_M)
summary(A_M_Gumminess_HD)
            Df  Sum Sq Mean Sq F value Pr(>F)
Component    3  705663  235221   0.173  0.906
Residuals    2 2716263 1358132               
#Chewiness
A_M_Chewiness_HD <- aov(Chewiness_mean ~ Component, data = HD_M)
summary(A_M_Chewiness_HD)
            Df  Sum Sq Mean Sq F value Pr(>F)
Component    3  383833  127944   0.126  0.937
Residuals    2 2032661 1016331               

After separate the hotdogs from Italian sausage, the analysis of variance (ANOVA) was used to determine whether the plant-based hotdogs should be compared with individual component of meat-based hotdogs. From the ANOVA result, the only attribute that is significantly different at 95% confidence interval for meat-based hotdogs is springiness.

TukeyHSD(A_M_Springiness_HD)
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = Springiness_mean ~ Component, data = HD_M)

$Component
           diff         lwr       upr     p adj
BP-B   2.804667 -2.98819995  8.597533 0.1871227
CP-B   5.373667 -0.41919995 11.166533 0.0577043
TCP-B  5.780667 -0.01219995 11.573533 0.0502022
CP-BP  2.569000 -4.52578368  9.663784 0.2966390
TCP-BP 2.976000 -4.11878368 10.070784 0.2365905
TCP-CP 0.407000 -6.68778368  7.501784 0.9739568
TK_M_Springiness_HD <- TukeyHSD(A_M_Springiness_HD)
plot(TK_M_Springiness_HD, las = 1)

The Tukey’s post hoc test was then conducted to determine how each component is different. Only the Turkey-Chicken-Pork meat blended and Beef is significantly different with each other; however, it is narrowly different. Thus, it was determined that plant-based hotdogs should be compared with overall meat-based hotdogs.

#For hotdogs
HD <- HD %>% dplyr::mutate(Component = ifelse(as.character(Component) != "PP" & as.character(Component) != "SP"& as.character(Component) != "VWG","M",as.character(Component)))
HD <- HD %>% arrange(Protein)
HD$Product = c('M1','M2','M3','M4','M5','M6','PB1','PB2','PB3','PB4','PB5','PB6')

With this code, the individual component of meat products were changed into overall meat component to do the statistical analysis.

Analysis of variance between individual plant-based hotdogs’ components and overall meat hotdog

#Anova for HD
#Hardness
A_HD_hardness <- aov(Hardness_mean ~ Component, data = HD)
summary(A_HD_hardness)
            Df   Sum Sq Mean Sq F value Pr(>F)
Component    3  7946174 2648725   1.593  0.266
Residuals    8 13301120 1662640               
#Adhesiveness
A_HD_Adhesiveness <- aov(Adhesiveness_mean ~ Component, data = HD)
summary(A_HD_Adhesiveness)
            Df Sum Sq Mean Sq F value Pr(>F)  
Component    3   4931  1643.5   5.351 0.0258 *
Residuals    8   2457   307.1                 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#Resilence
A_HD_Resilence <- aov(Resilence_mean ~ Component, data = HD)
summary(A_HD_Resilence)
            Df Sum Sq Mean Sq F value Pr(>F)  
Component    3  174.4   58.13    3.18 0.0848 .
Residuals    8  146.2   18.28                 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#Cohesion
A_HD_Cohesion <- aov(Cohesion_mean ~ Component, data = HD)
summary(A_HD_Cohesion)
            Df  Sum Sq  Mean Sq F value Pr(>F)
Component    3 0.01177 0.003922    1.16  0.383
Residuals    8 0.02704 0.003380               
#Springiness
A_HD_Springiness <- aov(Springiness_mean ~ Component, data = HD)
summary(A_HD_Springiness)
            Df Sum Sq Mean Sq F value Pr(>F)  
Component    3 137.72   45.91   3.961  0.053 .
Residuals    8  92.71   11.59                 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#Gumminess
A_HD_Gumminess <- aov(Gumminess_mean ~ Component, data = HD)
summary(A_HD_Gumminess)
            Df  Sum Sq Mean Sq F value Pr(>F)
Component    3 2866681  955560   1.273  0.348
Residuals    8 6006044  750755               
#Chewiness
A_HD_Chewiness <- aov(Chewiness_mean ~ Component, data = HD)
summary(A_HD_Chewiness)
            Df  Sum Sq Mean Sq F value Pr(>F)
Component    3 3001488 1000496    1.68  0.248
Residuals    8 4765487  595686               
#Tukey for HD
TK_HD_Adhesiveness <- TukeyHSD(A_HD_Adhesiveness)
plot(TK_HD_Adhesiveness, las = 1)

ANOVA was conducted to compare each attributes between individual plant based hotdogs’ component and overall meat hotdogs. Only adhesiveness of the hotdogs is significantly different at 95% confidence interval. The Tukey’s post hoc test was then conducted to determine the different. From the Tukey’s plot of the adhesiveness, it can be determined that only soy protein component hotdogs are significantly different from meat hotdogs. This means that pea protein and vital wheat gluten are better than soy protein in imitating the adhesiveness of meat hotdogs.

Italian sausages dataset

#For Italian sausages
IT <- TPA_mean %>%
  filter(Type == "IT")

IT_M <- IT %>%
  filter(Protein == "M")
  
  
#Hardness
A_M_Hardness_IT <- aov(Hardness_mean ~ Component, data = IT_M)
summary(A_M_Hardness_IT)
            Df   Sum Sq Mean Sq F value Pr(>F)
Component    1   792104  792104    0.29   0.61
Residuals    6 16409919 2734986               
#Adhesiveness
A_M_Adhesiveness_IT <- aov(Adhesiveness_mean ~ Component, data = IT_M)
summary(A_M_Adhesiveness_IT)
            Df Sum Sq Mean Sq F value Pr(>F)
Component    1     12    12.0   0.026  0.877
Residuals    6   2750   458.4               
#Resilence
A_M_Resilence_IT <- aov(Resilence_mean ~ Component, data = IT_M)
summary(A_M_Resilence_IT)
            Df Sum Sq Mean Sq F value Pr(>F)
Component    1  49.31   49.31   1.493  0.268
Residuals    6 198.14   33.02               
#Cohesion
A_M_Cohesion_IT <- aov(Cohesion_mean ~ Component, data = IT_M)
summary(A_M_Cohesion_IT)
            Df  Sum Sq  Mean Sq F value Pr(>F)
Component    1 0.01594 0.015939   2.045  0.203
Residuals    6 0.04677 0.007795               
#Springiness
A_M_Springiness_IT <- aov(Springiness_mean ~ Component, data = IT_M)
summary(A_M_Springiness_IT)
            Df Sum Sq Mean Sq F value Pr(>F)  
Component    1  8.314   8.314   4.674 0.0739 .
Residuals    6 10.672   1.779                 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#Gumminess
A_M_Gumminess_IT <- aov(Gumminess_mean ~ Component, data = IT_M)
summary(A_M_Gumminess_IT)
            Df   Sum Sq Mean Sq F value Pr(>F)
Component    1  2870804 2870804   1.396  0.282
Residuals    6 12335681 2055947               
#Chewiness
A_M_Chewiness_IT <- aov(Chewiness_mean ~ Component, data = IT_M)
summary(A_M_Chewiness_IT)
            Df  Sum Sq Mean Sq F value Pr(>F)
Component    1 1685890 1685890   1.186  0.318
Residuals    6 8529505 1421584               

As for the Italian sausages, there is no significant different at 95% confidence interval for any of the attributes for meat-based sausages, which means that plant-based sausages should also be compared with overall meat-based sausages.

#For Italian sausages
IT <- IT %>% dplyr::mutate(Component = ifelse(as.character(Component) != "PP" & as.character(Component) != "SP"& as.character(Component) != "VWG","M",as.character(Component)))
IT <- IT %>% arrange(Protein)
IT$Product = c('M1','M2','M3','M4','M5','M6','M7','M8','PB1','PB2','PB3','PB4','PB5','PB6','PB7')

With this code, the individual component of meat sausages were changed into overall meat component to do the statistical analysis.

Analysis of variance between individual plant-based sausages’ components and overall meat sausage

#Anova for IT
#Hardness
A_IT_hardness <- aov(Hardness_mean ~ Component, data = IT)
summary(A_IT_hardness)
            Df    Sum Sq  Mean Sq F value   Pr(>F)    
Component    3 123755140 41251713   14.62 0.000374 ***
Residuals   11  31045055  2822278                     
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#Adhesiveness
A_IT_Adhesiveness <- aov(Adhesiveness_mean ~ Component, data = IT)
summary(A_IT_Adhesiveness)
            Df Sum Sq Mean Sq F value Pr(>F)
Component    3   1887   628.9   2.048  0.166
Residuals   11   3378   307.1               
#Resilence
A_IT_Resilence <- aov(Resilence_mean ~ Component, data = IT)
summary(A_IT_Resilence)
            Df Sum Sq Mean Sq F value Pr(>F)  
Component    3  487.3  162.45   5.241 0.0173 *
Residuals   11  340.9   30.99                 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#Cohesion
A_IT_Cohesion <- aov(Cohesion_mean ~ Component, data = IT)
summary(A_IT_Cohesion)
            Df Sum Sq Mean Sq F value Pr(>F)  
Component    3 0.1265 0.04217   6.104 0.0106 *
Residuals   11 0.0760 0.00691                 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#Springiness
A_IT_Springiness <- aov(Springiness_mean ~ Component, data = IT)
summary(A_IT_Springiness)
            Df Sum Sq Mean Sq F value   Pr(>F)    
Component    3  835.6  278.52   17.32 0.000177 ***
Residuals   11  176.8   16.08                     
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#Gumminess
A_IT_Gumminess <- aov(Gumminess_mean ~ Component, data = IT)
summary(A_IT_Gumminess)
            Df   Sum Sq  Mean Sq F value Pr(>F)  
Component    3 30116483 10038828   4.441 0.0282 *
Residuals   11 24865014  2260456                 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#Chewiness
A_IT_Chewiness <- aov(Chewiness_mean ~ Component, data = IT)
summary(A_IT_Chewiness)
            Df   Sum Sq Mean Sq F value Pr(>F)  
Component    3 24502666 8167555   4.693  0.024 *
Residuals   11 19144592 1740417                 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#Tukey for IT
TK_IT_hardness <- TukeyHSD(A_IT_hardness)
plot(TK_IT_hardness, las = 1)
TK_IT_Resilence <- TukeyHSD(A_IT_Resilence)
plot(TK_IT_Resilence, las = 1)
TK_IT_Cohesion <- TukeyHSD(A_IT_Cohesion)
plot(TK_IT_Cohesion, las = 1)
TK_IT_Springiness <- TukeyHSD(A_IT_Springiness)
plot(TK_IT_Springiness, las = 1)
TK_IT_Gumminess <- TukeyHSD(A_IT_Gumminess)
plot(TK_IT_Gumminess, las = 1)
TK_IT_Chewiness <- TukeyHSD(A_IT_Chewiness)
plot(TK_IT_Chewiness, las = 1)

As for the Italian sausages, the only attribute that is not significantly different is adhesiveness.

In conclusion based on the Anova test, to make the accurate imitation of conventional meat sausages, the best protein to use as a main component of Italian sausages is soy protein as it can accurately imitate the all texture attributes of meat-based sausages while the vital wheat gluten can only imitate the resilience, springiness, gumminess, and chewiness of the conventional sausages. Additionally, only texture attributes of soy protein that similar to meat sausages are resilience and cohesiveness.

Principal component analysis

These are visualization of every texture attributes, i.e. Hardness, adhesiveness, resilience, cohesiveness, springiness, gumminess, and chewiness, and how every hotdogs and sausages are influenced by those attributes, and how are they similar or different to each other, which can be used to determine the best commercially used plant protein to imitate the meat hotdogs and sausages.

Principal component analysis of hotdogs

PCA_HD <- prcomp(HD[,c(5:11)], center = TRUE, scale. = TRUE)
ggbiplot(PCA_HD, choices = c(1,2), obs.scale = 1, var.scale = 1, ellipse = TRUE, labels = HD$Product, groups = HD$Component, varname.adjust = 1, varname.size = 2.5)+ scale_color_discrete(name = 'Protein Component') + theme_classic() + theme(legend.direction = 'horizontal', legend.position = 'bottom') 

Principal component analysis of Italian sausages

PCA_IT <- prcomp(IT[,c(5:11)], center = TRUE, scale. = TRUE)
ggbiplot(PCA_IT, obs.scale = 1, var.scale = 1.8, ellipse = TRUE, labels = IT$Product, groups = IT$Component, varname.adjust = 1, varname.size = 2.5)+ scale_color_discrete(name = 'Protein Component') + theme_classic() + theme(legend.direction = 'horizontal', legend.position = 'bottom')

Reflection

I chose this data because it is the project that I am currently working on and would like to do the data analysis on. It is fun and challenging as I hadn’t dived deeply into R before. I decided to do the analysis on the dataset as I would in my research project so I could also use it and improve on. As for the most challenging aspect of this project, it is to make the visualizations to be more appealing. The statistical analysis was not the hard part. If you can figure out the code to do it then it is done. but it is hard to make it more presentable and publishable. I wish that I known more about how to add the letters to show significant differences into the graph. There could be an improvement in the visualizations of this project such as the results of the Tukey’s post hoc test. However, I couldn’t seem to work out the code to make the results showing in the boxplot but I still have fun with this project.

Conclusion

This project can partially answer the questions that were asked. In conclusion based on the Anova test, Only the adhesiveness of soy protein-based hotdogs is significantly different from conventional meat hotdogs; however, the value is almost significantly different. This means that the ratio of soy protein used in plant-based hotdogs should be considered carefully to accurately imitate the meat-based ones.In addition, when looking at the PCA plot for the overall likeness, vital wheat gluten and soy protein also good options for making plant-based imitation of hotdogs.

Based on ANOVA results, to make the accurate imitation of conventional meat sausages, the best protein to use as a main component of Italian sausages is soy protein as it can accurately imitate the all texture attributes of meat-based sausages while the vital wheat gluten can only imitate the resilience, springiness, gumminess, and chewiness of the conventional sausages. Additionally, only texture attributes of soy protein that similar to meat sausages are resilience and cohesiveness. However, when looking at the overall attributes in PCA, all of the 3 plant protein based sausages are not good enough imitation of meat based one.

Bibliography

Reuse

Text and figures are licensed under Creative Commons Attribution CC BY-NC 4.0. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".

Citation

For attribution, please cite this work as

Tansaraviput (2022, May 11). Data Analytics and Computational Social Science: Texture Analysis of Plant-based and Conventional Hotdogs and Italian Sausages. Retrieved from https://github.com/DACSS/dacss_course_website/posts/httprpubscomsnoutsnake901250/

BibTeX citation

@misc{tansaraviput2022texture,
  author = {Tansaraviput, Sasi},
  title = {Data Analytics and Computational Social Science: Texture Analysis of Plant-based and Conventional Hotdogs and Italian Sausages},
  url = {https://github.com/DACSS/dacss_course_website/posts/httprpubscomsnoutsnake901250/},
  year = {2022}
}