Goherr: Fish consumption study: Difference between revisions
(added references) |
|||
(13 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
{{study|moderator=Arja | {{progression class | ||
|progression=Reviewed | |||
|curator=THL | |||
|date=2019-08-26 | |||
}} | |||
{{study|moderator=Arja}} | |||
:''This page contains a detailed description about data management and analysis of an international survey related to scientific article ''Forage Fish as Food: Consumer Perceptions on Baltic Herring'' by Mia Pihlajamäki, Arja Asikainen, Suvi Ignatius, Päivi Haapasaari, and Jouni T. Tuomisto.<ref name="pihlajamaki2019">Mia Pihlajamäki, Arja Asikainen, Suvi Ignatius, Päivi Haapasaari and Jouni T. Tuomisto. Forage Fish as Food: Consumer Perceptions on Baltic Herring. Sustainability 2019, 11(16), 4298; https://doi.org/10.3390/su11164298</ref> The results of this survey where also used in another article ''Health effects of nutrients and environmental pollutants in Baltic herring and salmon: a quantitative benefit-risk assessment'' by the same group.<ref name="tuomisto2020">Tuomisto, J.T., Asikainen, A., Meriläinen, P., Haapasaari, P. Health effects of nutrients and environmental pollutants in Baltic herring and salmon: a quantitative benefit-risk assessment. BMC Public Health 20, 64 (2020). https://doi.org/10.1186/s12889-019-8094-1</ref> | |||
== Question == | == Question == | ||
Line 6: | Line 13: | ||
== Answer == | == Answer == | ||
Original questionnaire analysis results | * Model run with all the results of the article<ref name="pihlajamaki2019"/> [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=B2jMOHfuUSmTjfrn 26.8.2018] | ||
* Original questionnaire analysis results [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=QaMJZqUX0cPaTfOF 13.3.2017] | |||
* Consumption amount estimates | |||
Consumption amount estimates | ** Model run 21.4.2017 [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=xc0kaCs8cgzpjwo9] first distribution | ||
* Model run 21.4.2017 [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=xc0kaCs8cgzpjwo9] first distribution | ** Model run 18.5.2017 [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=YnuQMDJTQgW1Se5a with modelled data]; [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=KXXFiP0aj0DYEPdx with direct survey data] | ||
* Model run 18.5.2017 [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=YnuQMDJTQgW1Se5a with modelled data]; [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=KXXFiP0aj0DYEPdx with direct survey data] | |||
== Rationale == | == Rationale == | ||
Line 288: | Line 247: | ||
This code is used to preprocess the original questionnaire data from the above .csv file and to store the data as a usable variable to Opasnet base. The code stores a data.frame named survey. | This code is used to preprocess the original questionnaire data from the above .csv file and to store the data as a usable variable to Opasnet base. The code stores a data.frame named survey. | ||
* Model run 11.7.2018 [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=Fa8TMg6h8DbEmhjp] | * Model run 11.7.2018 [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=Fa8TMg6h8DbEmhjp] | ||
* Model run 27.3.2019 with country codes DK EE FI SE [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=6UJy6JKNE3EyNHEQ] | |||
<rcode name="preprocess2" label="Preprocess (only for developers)"> | <rcode name="preprocess2" label="Preprocess (only for developers)"> | ||
Line 300: | Line 260: | ||
# Get the data either from Opasnet or your own hard drive. | # Get the data either from Opasnet or your own hard drive. | ||
#survey1 original | #survey1 original fi_le: N:/Ymal/Projects/Goherr/WP5/Goherr_fish_consumption.csv | ||
survey1 <- opasnet.csv( | survey1 <- opasnet.csv( | ||
Line 306: | Line 266: | ||
wiki = "opasnet_en", sep = ";", fill = TRUE, quote = "\"" | wiki = "opasnet_en", sep = ";", fill = TRUE, quote = "\"" | ||
) | ) | ||
#survey1 <- re#ad.csv( | #survey1 <- re#ad.csv(fi_le = "N:/Ymal/Projects/Goherr/WP5/Goherr_fish_consumption.csv", | ||
# header=FALSE, sep=";", fill = TRUE, quote="\"") | # header=FALSE, sep=";", fill = TRUE, quote="\"") | ||
# Data | # Data fi_le is converted to data.frame using levels at row 2121. | ||
survey1 <- webropol.convert(survey1, 2121, textmark = ":Other open") | survey1 <- webropol.convert(survey1, 2121, textmark = ":Other open") | ||
Line 329: | Line 289: | ||
ifelse(as.numeric(as.character(survey1$Age)) < 46, "18-45",">45"), | ifelse(as.numeric(as.character(survey1$Age)) < 46, "18-45",">45"), | ||
levels = c("18-45", ">45"), ordered = TRUE | levels = c("18-45", ">45"), ordered = TRUE | ||
) | |||
survey1$Country <- factor( | |||
survey1$Country, | |||
levels=c("DK","EST","FI","SWE"), | |||
labels=c("DK","EE","FI","SE") | |||
) | ) | ||
# Anonymize data | # Anonymize data | ||
Line 452: | Line 417: | ||
==== Figures, tables and stat analyses for the first manuscript ==== | ==== Figures, tables and stat analyses for the first manuscript ==== | ||
* Model run | * Model run 8.5.2019 with thlVerse code (not run on Opasnet) [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=46qKuh08I7PHqXRX] [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=lnq3yNAPXAJFxwaG] | ||
* Model run 26.8.2018 with fig 6 as table [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=B2jMOHfuUSmTjfrn] | |||
* Previous model runs are [http://en.opasnet.org/en-opwiki/index.php?title=Goherr:_Fish_consumption_study&oldid=42828#Figures.2C_tables_and_stat_analyses_for_the_first_manuscript archived]. | |||
* Model run | |||
* | |||
Methodological concerns: | Methodological concerns: | ||
Line 478: | Line 435: | ||
library(reshape2) | library(reshape2) | ||
library(MASS) | library(MASS) | ||
#library(extrafont) # Needed to save Arial fonts to PDF or EPS | |||
#library(thlVerse) | #library(thlVerse) | ||
#library(car) | #library(car) | ||
Line 483: | Line 441: | ||
BS <- 24 | BS <- 24 | ||
localcomp <- | localcomp <- FALSE | ||
thl <- FALSE | |||
# Set colours | # Set colours | ||
Line 501: | Line 460: | ||
########################## Functions | ########################## Functions | ||
groups <- function(o) { | #### thlLinePlot was adjusted to enable different point shapes | ||
o$Group <- paste(o$Gender, o$Ages) | |||
o$Group <- factor(o$Group, levels = c( | thlLinePlot <- function (data, xvar, yvar, groupvar = NULL, ylabel = yvar, | ||
xlabel = NULL, colors = thlColors(n = 12, type = "quali", | |||
name = "line"), title = NULL, subtitle = NULL, caption = NULL, | |||
legend.position = "none", base.size = 16, linewidth = 3, | |||
show.grid.x = FALSE, show.grid.y = TRUE, lang = "fi", ylimits = NULL, | |||
marked.treshold = 10, plot.missing = FALSE, xaxis.breaks = waiver(), | |||
yaxis.breaks = waiver(), panels = FALSE, nrow.panels = 1, | |||
labels.end = FALSE) | |||
{ | |||
lwd <- thlPtsConvert(linewidth) | |||
gg <- ggplot(data, aes_(x = substitute(xvar), y = substitute(yvar), | |||
group = ifelse(!is.null(substitute(groupvar)), substitute(groupvar), | |||
NA), colour = ifelse(!is.null(substitute(groupvar)), | |||
substitute(groupvar), ""))) + geom_line(size = lwd) | |||
if (isTRUE(plot.missing)) { | |||
df <- thlNaLines(data = data, xvar = deparse(substitute(xvar)), | |||
yvar = deparse(substitute(yvar)), groupvar = unlist(ifelse(deparse(substitute(groupvar)) != | |||
"NULL", deparse(substitute(groupvar)), list(NULL)))) | |||
if (!is.null(df)) { | |||
gg <- gg + geom_line(data = df, aes_(x = substitute(xvar), | |||
y = substitute(yvar), group = ifelse(!is.null(substitute(groupvar)), | |||
substitute(groupvar), NA), colour = ifelse(!is.null(substitute(groupvar)), | |||
substitute(groupvar), "")), linetype = 2, | |||
size = lwd) | |||
} | |||
} | |||
if (!is.null(marked.treshold)) { | |||
if (length(unique(data[, deparse(substitute(xvar))])) > | |||
marked.treshold) { | |||
if (is.factor(data[, deparse(substitute(xvar))]) || | |||
is.character(data[, deparse(substitute(xvar))]) || | |||
is.logical(data[, deparse(substitute(xvar))])) { | |||
levs <- levels(factor(data[, deparse(substitute(xvar))])) | |||
min <- levs[1] | |||
max <- levs[length(levs)] | |||
} | |||
else { | |||
min <- min(data[, deparse(substitute(xvar))]) | |||
max <- max(data[, deparse(substitute(xvar))]) | |||
} | |||
subdata <- data[c(data[, deparse(substitute(xvar))] %in% | |||
c(min, max)), ] | |||
gg <- gg + geom_point(data = subdata, aes_( | |||
x = substitute(xvar), | |||
y = substitute(yvar), | |||
group = ifelse(!is.null(substitute(groupvar)), substitute(groupvar), NA), | |||
colour = ifelse(!is.null(substitute(groupvar)), substitute(groupvar), ""), | |||
shape = substitute(groupvar)), | |||
fill = "white", | |||
stroke = 1.35 * lwd, | |||
size = 10/3 * lwd)+scale_shape_manual(values=21:25) | |||
} | |||
else { | |||
gg <- gg + geom_point( | |||
aes_( | |||
shape = substitute(groupvar) | |||
), | |||
fill = "white", | |||
stroke = 1.35 * lwd, | |||
size = 10/3 * lwd)+scale_shape_manual(values=21:25) | |||
} | |||
} | |||
if (isTRUE(labels.end)) { | |||
if (is.factor(data[, deparse(substitute(xvar))]) || | |||
is.character(data[, deparse(substitute(xvar))]) || | |||
is.logical(data[, deparse(substitute(xvar))])) { | |||
levs <- levels(factor(data[, deparse(substitute(xvar))])) | |||
maxd <- data[data[, deparse(substitute(xvar))] == | |||
levs[length(levs)], ] | |||
} | |||
else { | |||
maxd <- data[data[, deparse(substitute(xvar))] == | |||
max(data[, deparse(substitute(xvar))]), ] | |||
} | |||
brks <- maxd[, deparse(substitute(yvar))] | |||
labsut <- maxd[, deparse(substitute(groupvar))] | |||
} | |||
else (brks <- labsut <- waiver()) | |||
gg <- gg + ylab(ifelse(deparse(substitute(ylabel)) == "yvar", | |||
deparse(substitute(yvar)), ylabel)) + labs(title = title, | |||
subtitle = subtitle, caption = caption) + thlTheme(show.grid.y = show.grid.y, | |||
show.grid.x = show.grid.x, base.size = base.size, legend.position = legend.position, | |||
x.axis.title = ifelse(!is.null(xlabel), TRUE, FALSE)) + | |||
xlab(ifelse(!is.null(xlabel), xlabel, "")) + scale_color_manual(values = colors) + | |||
thlYaxisControl(lang = lang, limits = ylimits, breaks = yaxis.breaks, | |||
sec.axis = labels.end, sec.axis.breaks = brks, sec.axis.labels = labsut) | |||
if (is.factor(data[, deparse(substitute(xvar))]) || is.character(data[, | |||
deparse(substitute(xvar))]) || is.logical(data[, deparse(substitute(xvar))])) { | |||
gg <- gg + scale_x_discrete(breaks = xaxis.breaks, expand = expand_scale(mult = c(0.05))) | |||
} | |||
else (gg <- gg + scale_x_continuous(breaks = xaxis.breaks)) | |||
if (isTRUE(panels)) { | |||
fmla <- as.formula(paste0("~", substitute(groupvar))) | |||
gg <- gg + facet_wrap(fmla, scales = "free", nrow = nrow.panels) | |||
} | |||
gg | |||
} | |||
groups <- function(o) { | |||
o$Group <- paste(o$Gender, o$Ages) | |||
o$Group <- factor(o$Group, levels = c( | |||
"Female 18-45", | "Female 18-45", | ||
"Male 18-45", | "Male 18-45", | ||
Line 521: | Line 580: | ||
title | title | ||
) { | ) { | ||
require(reshape2) | |||
weight <- Ovariable("weight",data=data.frame( | weight <- Ovariable("weight",data=data.frame( | ||
Row=dat$Row, | Row=dat$Row, | ||
Line 548: | Line 608: | ||
oprint(tmp@output) | oprint(tmp@output) | ||
tmp <- ggplot(tmp@output, aes(x=Reason, y=Result,colour=Country, group=Country))+ | if(thl) { | ||
tmp <- thlLinePlot(tmp@output, xvar=Reason, yvar=Result,groupvar=Country, | |||
colors= c("#519B2FFF", "#2F62ADFF", "#BE3F72FF","#88D0E6FF"), # #29A0C1FF"), | |||
# THL colors but fourth is brigter | |||
legend.position = c(0.85,0.2), base.size = BS, title=title, | |||
subtitle="Fraction of population")+ | |||
coord_flip()+ | |||
scale_y_continuous(labels=scales::percent_format(accuracy=1)) | |||
} else { | |||
tmp <- ggplot(tmp@output, aes(x=Reason, y=Result,colour=Country, group=Country))+ | |||
geom_point(shape=21, size=5, fill="Grey", stroke=2)+ | |||
geom_line(size=1.2)+ | |||
coord_flip()+ | |||
theme_gray(base_size=BS)+ | |||
scale_y_continuous(labels=scales::percent_format())+#accuracy=1))+ | |||
scale_colour_manual(values=colors)+ | |||
labs( | |||
title=title, | |||
x="Answer", | |||
y="Fraction of population") | |||
} | |||
return(tmp) | return(tmp) | ||
} | } | ||
Line 681: | Line 751: | ||
} | } | ||
#################### Data for Figure 1. | |||
if(thl) { # Commented out because needs package thlVerse. | |||
dat <- opbase.data("Op_en7749", subset="Fish consumption as food in Finland") # [[Goherr: Fish consumption study]] | |||
dat$Year <- as.numeric(as.character(dat$Year)) | |||
gr <- thlLinePlot( | |||
dat[dat$Species=="Total",], | |||
xvar=Year, | |||
yvar=Result, | |||
ylimits=c(0,12), | |||
groupvar=Origin, | |||
base.size=24, | |||
title="Fish consumption in Finland", | |||
ylabel="", | |||
subtitle="(kg/a per person)", | |||
legend.position = "bottom" | |||
) | |||
if(localcomp) ggsave("Figure 1.pdf", width=8,height=6) | |||
if(localcomp) ggsave("Figure 1.png", width=8,height=6) | |||
} # End if | |||
################## Get data | ################## Get data | ||
Line 689: | Line 782: | ||
openv.setN(50) | openv.setN(50) | ||
survey1 <- groups(survey1) | survey1 <- groups(survey1) | ||
levels(survey1$Country) <- c("FI","SE","DK","EE") | #levels(survey1$Country) <- c("FI","SE","DK","EE") # WHY was this here? It is a potential hazard. | ||
effinfo <- 0 # No policies implemented. | effinfo <- 0 # No policies implemented. | ||
effrecomm <- 0 | effrecomm <- 0 | ||
Line 793: | Line 886: | ||
) | ) | ||
# Figure | # Figure 5 | ||
cat("Figure | cat("Figure 5 (to be converted to text)\n") | ||
reasons( | reasons( | ||
Line 807: | Line 900: | ||
) | ) | ||
if(localcomp) ggsave("Figure | if(localcomp) ggsave("Figure 5.pdf", width=10,height=5) | ||
if(localcomp) ggsave("Figure 5.png", width=10,height=5) | |||
reasons( | reasons( | ||
Line 814: | Line 908: | ||
) | ) | ||
if(localcomp) ggsave("Figure | if(localcomp) ggsave("Figure 6.pdf", width=10,height=5) | ||
if(localcomp) ggsave("Figure 6.png", width=10,height=5) | |||
impacts.sal <- impacts( | impacts.sal <- impacts( | ||
Line 843: | Line 938: | ||
survey1$What <- factor( | survey1$What <- factor( | ||
survey1$What, | survey1$What, | ||
levels= | levels=(c("Yes","I don't know","No","Other fish")), | ||
labels= | labels=(c("Baltic herring","Some herring","Other herring","Other fish")) | ||
) | ) | ||
tmp <- survey1[survey1$Eat.fish=="Yes",] | tmp <- survey1[survey1$Eat.fish=="Yes",] | ||
tmp <- | colnames(tmp)[colnames(tmp)=="Weighting"] <- "Result" | ||
tmp <- EvalOutput(Ovariable("tmp", data=tmp)) | |||
tmp <- oapply(tmp, c("What","Country"), sum) / oapply(tmp,"Country",sum) | |||
tmp$Country <- factor(tmp$Country, levels=rev(levels(tmp$Country))) | |||
ggplot(tmp, aes(x=Country, weight= | if(thl) { | ||
thlBarPlot(tmp@output, xvar=Country, yvar=Result, groupvar=What, horizontal = TRUE, stacked = TRUE, | |||
legend.position = "bottom",, | |||
title="Baltic herring consumption", | |||
subtitle="Fraction of fish consumers", | |||
)+ | |||
scale_y_continuous(labels=scales::percent_format()) | |||
} else { | |||
ggplot(tmp@output, aes(x=Country, weight=Result, fill=What))+geom_bar(position="fill")+ | |||
coord_flip()+#facet_grid(.~Country)+ | |||
theme_gray(base_size=BS)+ | |||
theme(legend.position = "bottom")+ | |||
scale_y_continuous(labels=scales::percent_format())+ | |||
scale_fill_manual(values=c("gray",colors))+ | |||
guides(fill=guide_legend(reverse=TRUE))+ | |||
labs( | |||
title="Baltic herring consumption", | |||
y="Fraction of fish consumers" | |||
) | |||
} | |||
if(localcomp) ggsave("Figure 2.pdf",width=10, height=5) | if(localcomp) ggsave("Figure 2.pdf",width=10, height=5) | ||
if(localcomp) ggsave("Figure 2.png",width=6, height=3) | |||
tmp <- survey1[survey1$Eat.fish=="Yes",] | |||
tmp <- aggregate(tmp$Weighting, tmp[c("What","Country")], sum) | |||
rown <- tmp$What[tmp$Country=="FI"] | rown <- tmp$What[tmp$Country=="FI"] | ||
Line 934: | Line 1,047: | ||
labs(title="Awareness of food recommendations about Baltic fish") | labs(title="Awareness of food recommendations about Baltic fish") | ||
# Figure | # Figure 3. Percentages of reasons to eat Baltic herring | ||
reasons( | reasons( | ||
Line 941: | Line 1,054: | ||
) | ) | ||
if(localcomp) ggsave("Figure | if(localcomp) ggsave("Figure 3.pdf", width=10, height=5) | ||
if(localcomp) ggsave("Figure 3.png", width=10, height=5) | |||
# Figure | # Figure 4. Reasons for not to eat Baltic herring. | ||
# Denmark and Estonia were omitted because they had less than 20 observations. | # Denmark and Estonia were omitted because they had less than 20 observations. | ||
Line 952: | Line 1,066: | ||
!is.na(survey1$Eat.BH),c(1,111:120,154,157)], # 1 Country, 28 Why not Baltic herring | !is.na(survey1$Eat.BH),c(1,111:120,154,157)], # 1 Country, 28 Why not Baltic herring | ||
"Reasons not to eat, Baltic herring non-consumers" | "Reasons not to eat, Baltic herring non-consumers" | ||
) | )+scale_color_manual(values=c("#BE3F72FF","#88D0E6FF"))+ | ||
scale_shape_manual(values=23:24) | |||
if(localcomp) ggsave("Figure 5. | if(localcomp) ggsave("Figure 4.pdf", width=10, height=5) | ||
if(localcomp) ggsave("Figure 4.png", width=10, height=5) | |||
# Figure | # Figure 7. The role of different determinants on Baltic salmon consumption | ||
impacts.herr <- impacts( | impacts.herr <- impacts( | ||
Line 975: | Line 1,091: | ||
) | ) | ||
# | oprint(aggregate(tmp$Result,tmp[c("Reason","Response","Fish")],sum)) | ||
if(thl) { | |||
tmp$Response <- factor(tmp$Response, levels=rev(levels(tmp$Response))) | |||
thlBarPlot(aggregate(tmp$Result,tmp[c("Reason","Response","Fish")],sum), | |||
xvar=Reason, yvar=x, groupvar=Response, legend.position = "bottom", | |||
horizontal = TRUE, stacked = TRUE, | |||
base.size = BS, title="Effect on Baltic fish consumption", | |||
subtitle="Fraction of population")+ | |||
facet_grid(.~Fish)+ | |||
scale_fill_manual(values=rev(c("gray",colors[c(1,6,5)])))+ | |||
scale_y_continuous(breaks=c(0.5,1),labels=scales::percent_format(accuracy=1)) | |||
} else { | |||
ggplot(tmp, aes(x=Reason, weight=Result, fill=Response))+geom_bar()+ | |||
coord_flip()+facet_grid(.~Fish)+ | |||
theme_gray(base_size=BS)+ | |||
theme(legend.position = "bottom")+ | |||
scale_fill_manual(values=c("gray",colors[c(1,6,5)]))+ | |||
scale_y_continuous(breaks=c(0.5,1),labels=scales::percent_format())+#accuracy=1))+ | |||
guides(fill=guide_legend(reverse=TRUE))+ | |||
labs( | |||
title="Effect on Baltic fish consumption", | |||
x="Cause", | |||
y="Fraction of population" | |||
) | |||
} | |||
if(localcomp) ggsave("Figure 7.pdf", width=12, height=7) | |||
if(localcomp) ggsave("Figure 7.png", width=12, height=7) | |||
######### Amounts estimated for each respondent | ######### Amounts estimated for each respondent | ||
Line 1,005: | Line 1,137: | ||
) | ) | ||
# Figure 3. Average consumption (kg/year) of Baltic herring in four countries, | # Figure 3 (old, unused). Average consumption (kg/year) of Baltic herring in four countries, | ||
# calculated with Monte Carlo simulation (1000 iterations). | # calculated with Monte Carlo simulation (1000 iterations). | ||
Line 1,018: | Line 1,150: | ||
y="Average consumption (kg/year)") | y="Average consumption (kg/year)") | ||
if(localcomp) ggsave("Figure3.pdf", width=9, height=10) | # if(localcomp) ggsave("Figure3.pdf", width=9, height=10) | ||
# if(localcomp) ggsave("Figure3.png", width=9, height=10) | |||
tmp$Result <- paste0(sprintf("%.1f",tmp$amountResult), " (",sprintf("%.1f", tmp$SD,1),")") | tmp$Result <- paste0(sprintf("%.1f",tmp$amountResult), " (",sprintf("%.1f", tmp$SD,1),")") | ||
Line 1,153: | Line 1,286: | ||
</rcode> | </rcode> | ||
Luke data about fish consumption in Finland [https://stat.luke.fi/en/fish-consumption-2017_en][http://statdb.luke.fi/PXWeb/pxweb/en/LUKE/LUKE__06%20Kala%20ja%20riista__06%20Muut__02%20Kalan%20kulutus/2_Kalankulutus.px/table/tableViewLayout1/?rxid=dc711a9e-de6d-454b-82c2-74ff79a3a5e0] | |||
<t2b name="Fish consumption as food in Finland" index="Origin,Species,Year" locations="1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017" unit="kg/a per person"> | <t2b name="Fish consumption as food in Finland" index="Origin,Species,Year" locations="1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017" unit="kg/a per person"> | ||
domestic fish|Total|6.1|6.1|5.9|6.2|5.8|5.3|5.2|5.0|5.0|4.4|4.5|4.3|3.8|3.8|3.8|4.0|4.1|4.1|4.1 | domestic fish|Total|6.1|6.1|5.9|6.2|5.8|5.3|5.2|5.0|5.0|4.4|4.5|4.3|3.8|3.8|3.8|4.0|4.1|4.1|4.1 | ||
domestic fish| | domestic fish|Farmed rainbow trout|1.6|1.6|1.6|1.6|1.3|1.3|1.4|1.1|1.1|1.2|1.2|1.1|1.0|1.0|1.1|1.1|1.3|1.2|1.2 | ||
domestic fish| | domestic fish|Baltic herring|0.8|1.2|1.1|1.1|0.9|0.8|0.7|0.5|0.4|0.4|0.4|0.3|0.3|0.3|0.3|0.3|0.3|0.3|0.3 | ||
domestic fish| | domestic fish|Pike|0.8|0.7|0.7|0.7|0.6|0.7|0.7|0.8|0.7|0.6|0.6|0.6|0.5|0.4|0.4|0.5|0.5|0.4|0.4 | ||
domestic fish| | domestic fish|Perch|0.7|0.7|0.7|0.7|0.6|0.6|0.6|0.7|0.7|0.5|0.5|0.5|0.4|0.4|0.4|0.5|0.5|0.4|0.4 | ||
domestic fish| | domestic fish|Vendace|0.7|0.7|0.7|0.7|0.8|0.8|0.7|0.6|0.6|0.6|0.6|0.7|0.6|0.6|0.6|0.6|0.6|0.5|0.6 | ||
domestic fish| | domestic fish|European whitefish|0.4|0.4|0.4|0.4|0.3|0.3|0.3|0.3|0.5|0.3|0.3|0.3|0.3|0.3|0.3|0.3|0.2|0.3|0.3 | ||
domestic fish| | domestic fish|Pike perch|0.3|0.2|0.2|0.2|0.3|0.3|0.3|0.3|0.3|0.3|0.3|0.3|0.3|0.3|0.3|0.3|0.3|0.4|0.4 | ||
domestic fish| | domestic fish|Other domestic fish|0.8|0.6|0.5|0.8|1.0|0.5|0.5|0.7|0.7|0.5|0.6|0.5|0.4|0.5|0.4|0.5|0.4|0.5|0.5 | ||
imported fish|Total|6.0|6.2|7.0|7.1|8.0|8.6|7.9|8.6|9.7|9.7|9.3|10.2|11.1|10.9|10.8|10.9|10.2|9.1|9.8 | imported fish|Total|6.0|6.2|7.0|7.1|8.0|8.6|7.9|8.6|9.7|9.7|9.3|10.2|11.1|10.9|10.8|10.9|10.2|9.1|9.8 | ||
imported fish| | imported fish|Farmed rainbow trout|0.2|0.3|0.4|0.6|0.9|0.6|0.6|0.7|1.0|1.0|0.8|0.8|0.9|1.0|0.9|0.9|0.8|0.9|0.8 | ||
imported fish| | imported fish|Farmed salmon|1.0|0.9|1.2|1.3|1.6|2.2|1.9|2.0|2.7|2.6|2.9|3.1|3.9|4.2|4.0|4.4|4.1|3.5|4.0 | ||
imported fish| | imported fish|Tuna (prepared and preserved)|1.0|1.2|1.4|1.4|1.5|1.6|1.6|1.5|1.7|1.7|1.6|1.7|1.7|1.6|1.9|1.7|1.6|1.4|1.5 | ||
imported fish| | imported fish|Saithe (frozen fillet)|0.7|0.6|0.7|0.7|0.7|0.6|0.4|0.5|0.5|0.5|0.5|0.5|0.6|0.5|0.5|0.5|0.5|0.4|0.4 | ||
imported fish| | imported fish|Shrimps|0.5|0.4|0.5|0.5|0.5|0.5|0.5|0.5|0.6|0.6|0.6|0.7|0.7|0.6|0.6|0.5|0.5|0.4|0.4 | ||
imported fish| | imported fish|Herring and Baltic herring (preserved)|0.6|0.5|0.6|0.6|0.5|0.4|0.5|0.6|0.5|0.6|0.3|0.5|0.4|0.3|0.4|0.5|0.5|0.5|0.5 | ||
imported fish| | imported fish|Other imported fish|2.0|2.3|2.2|2.0|2.3|2.7|2.4|2.8|2.7|2.7|2.6|2.9|2.9|2.7|2.5|2.3|2.3|1.9|2.2 | ||
</t2b> | </t2b> | ||
Line 1,550: | Line 1,684: | ||
==== Initiate ovariables ==== | ==== Initiate ovariables ==== | ||
=====jsp taken directly from data WITHOUT salmpling===== | |||
<rcode name="nonsamplejsp" label="Initiate jsp from data without sampling (for developers only)" embed=1> | <rcode name="nonsamplejsp" label="Initiate jsp from data without sampling (for developers only)" embed=1> | ||
Line 1,617: | Line 1,751: | ||
</rcode> | </rcode> | ||
===== Amount estimated from a bayesian model ===== | |||
* Model run 24.5.2017 [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=3UORzPwospQxp82h] | * Model run 24.5.2017 [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=3UORzPwospQxp82h] | ||
Line 1,661: | Line 1,795: | ||
</rcode> | </rcode> | ||
===== Amount estimates directly from data rather than from a bayesian model ===== | |||
* Initiation run 18.5.2017 [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=crW1kboP72BN1JbK] | * Initiation run 18.5.2017 [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=crW1kboP72BN1JbK] | ||
Line 1,732: | Line 1,866: | ||
</rcode> | </rcode> | ||
===== Initiate other ovariables ===== | |||
* Code stores ovariables assump, often, much, oftenside, muchside, amount. | * Code stores ovariables assump, often, much, oftenside, muchside, amount. | ||
Line 1,861: | Line 1,995: | ||
) | ) | ||
effrecommRaw <- Ovariable( # Effect of recommendations | |||
" | "effrecommRaw", | ||
dependencies = data.frame( | dependencies = data.frame( | ||
Name=c("jsp","assump"), | Name=c("jsp","assump"), | ||
Line 1,893: | Line 2,027: | ||
return(Ovariable(output=out, marginal=colnames(out) %in% c("Iter","Fish","Recommendation"))) | return(Ovariable(output=out, marginal=colnames(out) %in% c("Iter","Fish","Recommendation"))) | ||
}, | |||
unit = "change of amount in fractions" | |||
) | |||
# effrecommRaw and effrecomm are needed to enable decisions to affect the effect of recommendation before | |||
# the ovariable is collapsed. So, target the decisions to effrecommRaw and collapses to effrecomm. | |||
effrecomm <- Ovariable( | |||
"effrecomm", | |||
dependencies = data.frame(Name="effrecommRaw"), | |||
formula = function(...) { | |||
return(effrecommRaw) | |||
} | } | ||
) | ) |
Latest revision as of 15:39, 12 August 2020
In Opasnet many pages being worked on and are in different classes of progression. Thus the information on those pages should be regarded with consideration. The progression class of this page has been assessed:
|
The content and quality of this page is/was being curated by the project that produced the page.
The quality was last checked: 2019-08-26. |
[show] This page is a study.
The page identifier is Op_en7749 |
---|
- This page contains a detailed description about data management and analysis of an international survey related to scientific article Forage Fish as Food: Consumer Perceptions on Baltic Herring by Mia Pihlajamäki, Arja Asikainen, Suvi Ignatius, Päivi Haapasaari, and Jouni T. Tuomisto.[1] The results of this survey where also used in another article Health effects of nutrients and environmental pollutants in Baltic herring and salmon: a quantitative benefit-risk assessment by the same group.[2]
Question
How Baltic herring and salmon are used as human food in Baltic sea countries? Which determinants affect on people’s eating habits of these fish species?
Answer
- Model run with all the results of the article[1] 26.8.2018
- Original questionnaire analysis results 13.3.2017
- Consumption amount estimates
- Model run 21.4.2017 [1] first distribution
- Model run 18.5.2017 with modelled data; with direct survey data
Rationale
Survey of eating habits of Baltic herring and salmon in Denmark, Estonia, Finland and Sweden has been done in September 2016 by Taloustutkimus oy. Content of the questionnaire can be accessed in Google drive. The actual data can be found from the link below (see Data).
Data
Questionnaire
Original datafile File:Goherr fish consumption.csv.
[show]Show details |
---|
Assumptions
The following assumptions are used:
Obs | Variable | Value | Unit | Result | Description |
---|---|---|---|---|---|
1 | freq | 1 | times /a | 0 | Never |
2 | freq | 2 | times /a | 0.5 - 0.9 | less than once a year |
3 | freq | 3 | times /a | 2 - 5 | A few times a year |
4 | freq | 4 | times /a | 12 - 36 | 1 - 3 times per month |
5 | freq | 5 | times /a | 52 | once a week |
6 | freq | 6 | times /a | 104 - 208 | 2 - 4 times per week |
7 | freq | 7 | times /a | 260 - 364 | 5 or more times per week |
8 | amdish | 1 | g /serving | 20 - 70 | 1/6 plate or below (50 grams) |
9 | amdish | 2 | g /serving | 70 - 130 | 1/3 plate (100 grams) |
10 | amdish | 3 | g /serving | 120 - 180 | 1/2 plate (150 grams) |
11 | amdish | 4 | g /serving | 170 - 230 | 2/3 plate (200 grams) |
12 | amdish | 5 | g /serving | 220 - 280 | 5/6 plate (250 grams) |
13 | amdish | 6 | g /serving | 270 - 400 | full plate (300 grams) |
14 | amdish | 7 | g /serving | 400 - 550 | overly full plate (500 grams) |
15 | ingredient | fraction | 0.1 - 0.3 | Fraction of fish in the dish | |
16 | amside | 1 | g /serving | 20 - 70 | 1/6 plate or below (50 grams) |
17 | amside | 2 | g /serving | 70 - 130 | 1/4 plate (100 grams) |
18 | amside | 3 | g /serving | 120 - 180 | 1/2 plate (150 grams) |
19 | amside | 4 | g /serving | 170 - 230 | 2/3 plate (200 grams) |
20 | amside | 5 | g /serving | 220 - 280 | 5/6 plate (250 grams) |
21 | change | 1 | fraction | -1 - -0.8 | Decrease it to zero |
22 | change | 2 | fraction | -0.9 - -0.5 | Decrease it to less than half |
23 | change | 3 | fraction | -0.6 - -0.1 | Decrease it a bit |
24 | change | 4 | fraction | 0 | No effect |
25 | change | 5 | fraction | 0.1 - 0.6 | Increase it a bit |
26 | change | 6 | fraction | 0.5 - 0.9 | Increase it over by half |
27 | change | 7 | fraction | 0.8 - 1.3 | Increase it over to double |
28 | change | 8 | fraction | -0.3 - 0.3 | Don't know |
Preprocessing
This code is used to preprocess the original questionnaire data from the above .csv file and to store the data as a usable variable to Opasnet base. The code stores a data.frame named survey.
Analyses
- Sketches about modelling determinants of eating (spring 2018) [4]
Figures, tables and stat analyses for the first manuscript
- Model run 8.5.2019 with thlVerse code (not run on Opasnet) [5] [6]
- Model run 26.8.2018 with fig 6 as table [7]
- Previous model runs are archived.
Methodological concerns:
- Is the warning in logistic regression important?
- Goodness of fit in logistic regression
- Calculate odds ratios in logistic regression
- You might treat independent ordinal variables as continuous
- Color blindness simulator to adjust colors for the color blind and for black and white printing
Luke data about fish consumption in Finland [8][9]
Obs | Origin | Species | 1999 | 2000 | 2001 | 2002 | 2003 | 2004 | 2005 | 2006 | 2007 | 2008 | 2009 | 2010 | 2011 | 2012 | 2013 | 2014 | 2015 | 2016 | 2017 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | domestic fish | Total | 6.1 | 6.1 | 5.9 | 6.2 | 5.8 | 5.3 | 5.2 | 5.0 | 5.0 | 4.4 | 4.5 | 4.3 | 3.8 | 3.8 | 3.8 | 4.0 | 4.1 | 4.1 | 4.1 |
2 | domestic fish | Farmed rainbow trout | 1.6 | 1.6 | 1.6 | 1.6 | 1.3 | 1.3 | 1.4 | 1.1 | 1.1 | 1.2 | 1.2 | 1.1 | 1.0 | 1.0 | 1.1 | 1.1 | 1.3 | 1.2 | 1.2 |
3 | domestic fish | Baltic herring | 0.8 | 1.2 | 1.1 | 1.1 | 0.9 | 0.8 | 0.7 | 0.5 | 0.4 | 0.4 | 0.4 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 |
4 | domestic fish | Pike | 0.8 | 0.7 | 0.7 | 0.7 | 0.6 | 0.7 | 0.7 | 0.8 | 0.7 | 0.6 | 0.6 | 0.6 | 0.5 | 0.4 | 0.4 | 0.5 | 0.5 | 0.4 | 0.4 |
5 | domestic fish | Perch | 0.7 | 0.7 | 0.7 | 0.7 | 0.6 | 0.6 | 0.6 | 0.7 | 0.7 | 0.5 | 0.5 | 0.5 | 0.4 | 0.4 | 0.4 | 0.5 | 0.5 | 0.4 | 0.4 |
6 | domestic fish | Vendace | 0.7 | 0.7 | 0.7 | 0.7 | 0.8 | 0.8 | 0.7 | 0.6 | 0.6 | 0.6 | 0.6 | 0.7 | 0.6 | 0.6 | 0.6 | 0.6 | 0.6 | 0.5 | 0.6 |
7 | domestic fish | European whitefish | 0.4 | 0.4 | 0.4 | 0.4 | 0.3 | 0.3 | 0.3 | 0.3 | 0.5 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.2 | 0.3 | 0.3 |
8 | domestic fish | Pike perch | 0.3 | 0.2 | 0.2 | 0.2 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.4 | 0.4 |
9 | domestic fish | Other domestic fish | 0.8 | 0.6 | 0.5 | 0.8 | 1.0 | 0.5 | 0.5 | 0.7 | 0.7 | 0.5 | 0.6 | 0.5 | 0.4 | 0.5 | 0.4 | 0.5 | 0.4 | 0.5 | 0.5 |
10 | imported fish | Total | 6.0 | 6.2 | 7.0 | 7.1 | 8.0 | 8.6 | 7.9 | 8.6 | 9.7 | 9.7 | 9.3 | 10.2 | 11.1 | 10.9 | 10.8 | 10.9 | 10.2 | 9.1 | 9.8 |
11 | imported fish | Farmed rainbow trout | 0.2 | 0.3 | 0.4 | 0.6 | 0.9 | 0.6 | 0.6 | 0.7 | 1.0 | 1.0 | 0.8 | 0.8 | 0.9 | 1.0 | 0.9 | 0.9 | 0.8 | 0.9 | 0.8 |
12 | imported fish | Farmed salmon | 1.0 | 0.9 | 1.2 | 1.3 | 1.6 | 2.2 | 1.9 | 2.0 | 2.7 | 2.6 | 2.9 | 3.1 | 3.9 | 4.2 | 4.0 | 4.4 | 4.1 | 3.5 | 4.0 |
13 | imported fish | Tuna (prepared and preserved) | 1.0 | 1.2 | 1.4 | 1.4 | 1.5 | 1.6 | 1.6 | 1.5 | 1.7 | 1.7 | 1.6 | 1.7 | 1.7 | 1.6 | 1.9 | 1.7 | 1.6 | 1.4 | 1.5 |
14 | imported fish | Saithe (frozen fillet) | 0.7 | 0.6 | 0.7 | 0.7 | 0.7 | 0.6 | 0.4 | 0.5 | 0.5 | 0.5 | 0.5 | 0.5 | 0.6 | 0.5 | 0.5 | 0.5 | 0.5 | 0.4 | 0.4 |
15 | imported fish | Shrimps | 0.5 | 0.4 | 0.5 | 0.5 | 0.5 | 0.5 | 0.5 | 0.5 | 0.6 | 0.6 | 0.6 | 0.7 | 0.7 | 0.6 | 0.6 | 0.5 | 0.5 | 0.4 | 0.4 |
16 | imported fish | Herring and Baltic herring (preserved) | 0.6 | 0.5 | 0.6 | 0.6 | 0.5 | 0.4 | 0.5 | 0.6 | 0.5 | 0.6 | 0.3 | 0.5 | 0.4 | 0.3 | 0.4 | 0.5 | 0.5 | 0.5 | 0.5 |
17 | imported fish | Other imported fish | 2.0 | 2.3 | 2.2 | 2.0 | 2.3 | 2.7 | 2.4 | 2.8 | 2.7 | 2.7 | 2.6 | 2.9 | 2.9 | 2.7 | 2.5 | 2.3 | 2.3 | 1.9 | 2.2 |
Descriptive statistics

Model must contain predictors such as country, gender, age etc. Maybe we should first study what determinants are important? Model must also contain determinants that would increase or decrease fish consumption. This should be conditional on the current consumption. How? Maybe we should look at principal coordinates analysis with all questions to see how they behave.
Also look at correlation table to see clusters.
Some obvious results:
- If reports no fish eating, many subsequent answers are NA.
- No vitamins correlates negatively with vitamin intake.
- Unknown salmon correlates negatively with the types of salmon eaten.
- Different age categories correlate with each other.
However, there are also meaningful negative correlations:
- Country vs allergy
- Country vs Norwegian salmon and Rainbow trout
- Country vs not traditional.
- Country vs recommendation awareness
- Allergy vs economic wellbeing
- Baltic salmon use (4 questions) vs Don't like taste and Not used to
- All questions between Easy to cook ... Traditional dish
Meaningful positive correlations:
- All questions between Baltic salmon ... Rainbow trout
- How often Baltic salmon/herring/side salmon/side herring
- How much Baltic salmon/herring/side salmon/side herring
- Better availability ... Recommendation
- All questions between Economic wellbeing...Personal aims
- Omega3, Vitamin D, and Other vitamins
Model runs
- Model run 13.3.2017
- Model run 21.4.2017 [10] old code from Answer merged to this code and debugged
Bayes model
- Model run 3.3.2017. All variables assumed independent. [11]
- Model run 3.3.2017. p has more dimensions. [12]
- Model run 25.3.2017. Several model versions: strange binomial+multivarnormal, binomial, fractalised multivarnormal [13]
- Model run 27.3.2017 [14]
- Other models except multivariate normal were archived and removed from active code 29.3.2017.
- Model run 29.3.2017 with raw data graphs [15]
- Model run 29.3.2017 with salmon and herring ovariables stored [16]
- Model run 13.4.2017 with first version of coordinate matrix and principal coordinate analysis [17]
- Model run 20.4.2017 [18] code works but needs a safety check against outliers
- Model run 21.4.2017 [19] some model results plotted
- Model run 21.4.2017 [20] ovariables produced by the model stored.
- Model run 18.5.2017 [21] small updates
- 13.2.2018 old model run but with new Opasnet [22]
Initiate ovariables
jsp taken directly from data WITHOUT salmpling
Amount estimated from a bayesian model
- Model run 24.5.2017 [23]
Amount estimates directly from data rather than from a bayesian model
- Initiation run 18.5.2017 [24]
- Initiation run 24.2.2018: sampling from survey rather than each respondent once [25]
Initiate other ovariables
- Code stores ovariables assump, often, much, oftenside, muchside, amount.
- Model run 19.5.2017 [26]
- Initiation run 24.5.2017 without jsp [27]
- Model run 8.6.2017 [28]
Other code
This is code for analysing EFSA food intake data about fish for BONUS GOHERR manuscript Ronkainen L, Lehikoinen A, Haapasaari P, Tuomisto JT. 2019.
Dependencies
The survey data will be used as input in the benefit-risk assessment of Baltic herring and salmon intake, which is part of the WP5 work in Goherr-project.
See also
- Useful information about Wishart distribution and related topics:
Keywords
References
- ↑ Jump up to: 1.0 1.1 Mia Pihlajamäki, Arja Asikainen, Suvi Ignatius, Päivi Haapasaari and Jouni T. Tuomisto. Forage Fish as Food: Consumer Perceptions on Baltic Herring. Sustainability 2019, 11(16), 4298; https://doi.org/10.3390/su11164298
- ↑ Tuomisto, J.T., Asikainen, A., Meriläinen, P., Haapasaari, P. Health effects of nutrients and environmental pollutants in Baltic herring and salmon: a quantitative benefit-risk assessment. BMC Public Health 20, 64 (2020). https://doi.org/10.1186/s12889-019-8094-1
Related files