R-companion to: Estimation of the Thurstonian model for the 2-AC protocol

Similar documents
Outline. The ordinal package: Analyzing ordinal data. Ordinal scales are commonly used (attribute rating or liking) Ordinal data the wine data

Christine Borgen Linander 1,, Rune Haubo Bojesen Christensen 1, Rebecca Evans 2, Graham Cleaver 2, Per Bruun Brockhoff 1. University of Denmark

Main purposes of sensr. The sensr package: Difference and similarity testing. Main functions in sensr

A Tutorial on fitting Cumulative Link Models with the ordinal Package

A Handbook of Statistical Analyses Using R. Brian S. Everitt and Torsten Hothorn

How to work correctly statistically about sex ratio

A Handbook of Statistical Analyses Using R 2nd Edition. Brian S. Everitt and Torsten Hothorn

Models for Replicated Discrimination Tests: A Synthesis of Latent Class Mixture Models and Generalized Linear Mixed Models

A Handbook of Statistical Analyses Using R 2nd Edition. Brian S. Everitt and Torsten Hothorn

A brief introduction to mixed models

Hypothesis Tests and Confidence Intervals Involving Fitness Landscapes fit by Aster Models By Charles J. Geyer and Ruth G. Shaw Technical Report No.

A Handbook of Statistical Analyses Using R 2nd Edition. Brian S. Everitt and Torsten Hothorn

Inference with Heteroskedasticity

Hypothesis Tests and Confidence Intervals Involving Fitness Landscapes fit by Aster Models By Charles J. Geyer and Ruth G. Shaw Technical Report No.

Package CorrMixed. R topics documented: August 4, Type Package

CGEN(Case-control.GENetics) Package

An Analysis. Jane Doe Department of Biostatistics Vanderbilt University School of Medicine. March 19, Descriptive Statistics 1

Package bpp. December 13, 2016

Advances in Sensory Discrimination Testing: Thurstonian-Derived Models, Covariates, and Consumer Relevance

Finite Mixture Model Diagnostics Using Resampling Methods

Robust Inference in Generalized Linear Models

Power analysis examples using R

Fitting mixed models in R

Inferences on Linear Combinations of Coefficients

BIOL 458 BIOMETRY Lab 9 - Correlation and Bivariate Regression

Yet More Supporting Data Analysis for Unifying Life History Analysis for Inference of Fitness and Population Growth By Ruth G. Shaw, Charles J.

Aster Models and Lande-Arnold Beta By Charles J. Geyer and Ruth G. Shaw Technical Report No. 675 School of Statistics University of Minnesota January

A Handbook of Statistical Analyses Using R 3rd Edition. Torsten Hothorn and Brian S. Everitt

A Handbook of Statistical Analyses Using R. Brian S. Everitt and Torsten Hothorn

Cumulative Link Models for Ordinal Regression with the R Package ordinal

Follow-up data with the Epi package

Handout 4: Simple Linear Regression

A Handbook of Statistical Analyses Using R 3rd Edition. Torsten Hothorn and Brian S. Everitt

Stat 8053 Lecture Notes An Example that Shows that Statistical Obnoxiousness is not Related to Dimension Charles J. Geyer November 17, 2014

8 Nominal and Ordinal Logistic Regression

Outline. Mixed models in R using the lme4 package Part 3: Longitudinal data. Sleep deprivation data. Simple longitudinal data

The gpca Package for Identifying Batch Effects in High-Throughput Genomic Data

Online Appendix to Mixed Modeling for Irregularly Sampled and Correlated Functional Data: Speech Science Spplications

Statistical methodology for sensory discrimination tests and its implementation in sensr

Introduction to Statistics and R

BIOS 625 Fall 2015 Homework Set 3 Solutions

Value Added Modeling

Lecture 3: Inference in SLR

Introductory Statistics with R: Simple Inferences for continuous data

Gov 2000: 9. Regression with Two Independent Variables

A Handbook of Statistical Analyses Using R. Brian S. Everitt and Torsten Hothorn

Fitting Cox Regression Models

Math 70 Homework 8 Michael Downs. and, given n iid observations, has log-likelihood function: k i n (2) = 1 n

You can specify the response in the form of a single variable or in the form of a ratio of two variables denoted events/trials.

Model selection and comparison

STA 4504/5503 Sample Exam 1 Spring 2011 Categorical Data Analysis. 1. Indicate whether each of the following is true (T) or false (F).

Exam 2 (KEY) July 20, 2009

Binary Dependent Variables

Introduction and Background to Multilevel Analysis

Exercise 5.4 Solution

fishr Vignette - Age-Length Keys to Assign Age from Lengths

First steps of multivariate data analysis

NATIONAL UNIVERSITY OF SINGAPORE EXAMINATION. ST3241 Categorical Data Analysis. (Semester II: ) April/May, 2011 Time Allowed : 2 Hours

Package sklarsomega. May 24, 2018

ST3241 Categorical Data Analysis I Multicategory Logit Models. Logit Models For Nominal Responses

Ch 6: Multicategory Logit Models

Statistics 5100 Spring 2018 Exam 1

Metric Predicted Variable on Two Groups

Solution pigs exercise

Models for Binary Outcomes

Threshold models with fixed and random effects for ordered categorical data

Chapter 3: Testing alternative models of data

Using R in 200D Luke Sonnet

Statistical Computing with R

samplesizelogisticcasecontrol Package

f Simulation Example: Simulating p-values of Two Sample Variance Test. Name: Example June 26, 2011 Math Treibergs

Two Correlated Proportions Non- Inferiority, Superiority, and Equivalence Tests

Aedes egg laying behavior Erika Mudrak, CSCU November 7, 2018

The coxvc_1-1-1 package

BIOS 312: Precision of Statistical Inference

Generalized linear models

Two sample Hypothesis tests in R.

Package msir. R topics documented: April 7, Type Package Version Date Title Model-Based Sliced Inverse Regression

Jian WANG, PhD. Room A115 College of Fishery and Life Science Shanghai Ocean University

Logistic Regression. 1 Analysis of the budworm moth data 1. 2 Estimates and confidence intervals for the parameters 2

Holiday Assignment PS 531

STA 4504/5503 Sample Exam 1 Spring 2011 Categorical Data Analysis. 1. Indicate whether each of the following is true (T) or false (F).

Consider fitting a model using ordinary least squares (OLS) regression:

Q30b Moyale Observed counts. The FREQ Procedure. Table 1 of type by response. Controlling for site=moyale. Improved (1+2) Same (3) Group only

Review. Timothy Hanson. Department of Statistics, University of South Carolina. Stat 770: Categorical Data Analysis

1 Use of indicator random variables. (Chapter 8)

Mixed-effects Maximum Likelihood Difference Scaling

Package touchard. February 8, 2019

Lecture 14: Introduction to Poisson Regression

Modelling counts. Lecture 14: Introduction to Poisson Regression. Overview

NATIONAL UNIVERSITY OF SINGAPORE EXAMINATION (SOLUTIONS) ST3241 Categorical Data Analysis. (Semester II: )

The reldist Package. April 5, 2006

Survival Regression Models

Gaussian copula regression using R

R code and output of examples in text. Contents. De Jong and Heller GLMs for Insurance Data R code and output. 1 Poisson regression 2

Multivariate Dose-Response Meta-Analysis: the dosresmeta R Package

Package pearson7. June 22, 2016

Mixed models in R using the lme4 package Part 7: Generalized linear mixed models

7/28/15. Review Homework. Overview. Lecture 6: Logistic Regression Analysis

STAT3401: Advanced data analysis Week 10: Models for Clustered Longitudinal Data

Transcription:

R-companion to: Estimation of the Thurstonian model for the 2-AC protocol Rune Haubo Bojesen Christensen, Hye-Seong Lee & Per Bruun Brockhoff August 24, 2017 This document describes how the examples in Estimation of the Thurstonian model for the 2-AC protocol (Christensen et al., 2011) can be executed in the free statistical software R (R Development Core Team, 2011) using the free R packages sensr and ordinal (Christensen, 2011; Christensen and Brockhoff, 2011) developed by the authors. 1 Example 1: Estimation of d and τ It is assumed that we have n = (2,2,6) observations in the three categories. We may estimate τ, d and their standard errors with the twoac function in the sensr package: > library(sensr) > fit <- twoac(c(2, 2, 6)) > fit Results for the 2-AC protocol with data c(2, 2, 6): Estimate Std. Error tau 0.4160 0.2674 d.prime 0.7743 0.5417 Two-sided 95% confidence interval for d-prime based on the likelihood root statistic: Lower Upper d.prime -0.271 1.859 Significance test: Likelihood root statistic = 1.446718 p-value = 0.14798 Alternative hypothesis: d-prime is different from 0 Alternatively we may compute τ and d manually: > n <- c(2, 2, 6) > gamma <- cumsum(n/sum(n)) > z <- qnorm(gamma)[-3] 1

> z <- z * sqrt(2) > (tau <- (z[2] - z[1])/2) [1] 0.4159726 > (d <- -z[1] - tau) [1] 0.7742595 2 Example 2: Inference for d-prime The likelihood based confidence intervals and the one-sided discrimination significance test where the null hypothesis is no sensory difference, i.e., d 0 = 0 using the likelihood root statistic are immediately available using the twoac function: > twoac(c(2, 2, 6), d.prime0 = 0, conf.level = 0.95, statistic = "likelihood", alternative = "greater") Results for the 2-AC protocol with data c(2, 2, 6): Estimate Std. Error tau 0.4160 0.2674 d.prime 0.7743 0.5417 Two-sided 95% confidence interval for d-prime based on the likelihood root statistic: Lower Upper d.prime -0.271 1.859 Significance test: Likelihood root statistic = 1.446718 p-value = 0.073988 Alternative hypothesis: d-prime is greater than 0 The relative profile likelihood and Wald approximation can be obtained with: > pr <- profile(fit) > plot(pr) > z <- pr$d.prime$d.prime > w <- (coef(fit)[2, 1] - z)/coef(fit)[2, 2] > lines(z, exp(-w^2/2), lty = 2) 3 Example 3: Power calculations The function twoacpwr computes the power for the 2-AC protocol and a significance test of the users choice. The power assuming τ = 0.5, d = 1, the sample size is N = 20 for a two-sided preference test with α = 0.5 is found with: > twoacpwr(tau = 0.5, d.prime = 1, size = 20, d.prime0 = 0, alpha = 0.05, alternative = "two.sided", tol = 1e-05) power actual.alpha samples discarded kept p.1 p.2 p.3 1 0.777677 0.04960103 231 94 137 0.1444 0.2174 0.6382 2

Relative profile likelihood 0.0 0.2 0.4 0.6 0.8 1.0 1.0 0.0 0.5 1.0 1.5 2.0 2.5 d.prime Figure 1: Relative profile likelihood curve (solid) and Wald approximation (dashed) for the data in example 1 and 2. The horizontal lines indicate 95% and 99% confidence intervals based on the likelihood function and the Wald approximation. Apart from the power, we are told that the actual size of the test, α is close to the nominal 5%. The reason that the two differ is due to the discreteness of the observations, and hence the teststatistic. Weare alsotoldthatwithn = 20thereare 231possibleoutcomesofthe2- AC protocol. In computing the power 94 of these are discarded and power is computed based on the remaining 137 samples. The fraction of samples that are discarded is determined by the tol parameter. If we set this to zero, then no samples are discarded, however, the increase in precision is irrelevant: > twoacpwr(tau = 0.5, d.prime = 1, size = 20, d.prime0 = 0, alpha = 0.05, alternative = "two.sided", tol = 0) power actual.alpha samples discarded kept p.1 p.2 p.3 1 0.7776788 0.04960103 231 0 231 0.1444 0.2174 0.6382 The last three numbers in the output are the cell probabilities, so with τ = 0.5 and d = 1 we should, for example, expect around 22% of the answers in the no difference or no preference category. 4 Example 4: Estimation and standard errors via cumulative probit models Estimates of τ and d and their standard errors can be obtained from a cumulative probit model. We begin by defining the three leveled response variable resp and fitting a cumulative link model (CLM) using the function clm in package ordinal with weights equal to the observed counts and a probit link. Standard output contains the following coefficient table: 3

> library(ordinal) > response <- gl(3, 1) > fit.clm <- clm(response ~ 1, weights = c(2, 2, 6), link = "probit") > (tab <- coef(summary(fit.clm))) 1 2-0.8416212 0.4518154-1.8627547 0.06249679 2 3-0.2533471 0.4009896-0.6318047 0.52751451 The τ and d estimates are obtained by: > theta <- tab[, 1] > (tau <- (theta[2] - theta[1])/sqrt(2)) 2 3 0.4159726 > (d.prime <- (-theta[2] - theta[1])/sqrt(2)) 2 3 0.7742595 The variance-covariance matrix of the parameters can be extracted by the vcov method and the standard errors computed via the provided formulas: > VCOV <- vcov(fit.clm) > (se.tau <- sqrt((vcov[1, 1] + VCOV[2, 2] - 2 * VCOV[2, 1])/2)) [1] 0.2674311 > (se.d.prime <- sqrt((vcov[1, 1] + VCOV[2, 2] + 2 * VCOV[2, 1])/2)) [1] 0.5416737 Observe how these estimates and standard errors are identical to those in Example 1. We could also have used the clm2twoac function from package sensr which extract estimates and standard errors from a clm model fit object: > clm2twoac(fit.clm) tau 0.4159726 0.2674311 1.555439 0.11984 d-prime 0.7742595 0.5416737 1.429384 0.15289 5 Example 5: A regression model for d Assume that a study is performed and gender differences in the discrimination ability is of interest. Suppose that (20,20,60) is observed for women and (10,20,70) is observed for men. The standard output from a cumulative probit model contains the coefficient table: > n.women <- c(2, 2, 6) * 10 > n.men <- c(1, 2, 7) * 10 > wt <- c(n.women, n.men) > response <- gl(3, 1, length = 6) > gender <- gl(2, 3, labels = c("women", "men")) 4

> fm2 <- clm(response ~ gender, weights = wt, link = "probit") > (tab2 <- coef(summary(fm2))) 1 2-0.8887474 0.1346051-6.602627 4.039349e-11 2 3-0.2283095 0.1238663-1.843194 6.530068e-02 gendermen 0.3205403 0.1741445 1.840658 6.567176e-02 The estimate of τ (assumed constant between genders) and the gender specific estimates of d can be extracted by: > theta <- fm2$alpha > (tau <- (theta[2] - theta[1])/sqrt(2)) 2 3 0.4670001 > (d.women <- (-theta[2] - theta[1])/sqrt(2)) 2 3 0.7898785 > (d.men <- d.women + fm2$beta * sqrt(2)) 2 3 1.243191 Again we could use the clm2twoac function to get the coefficient table for the 2-AC model from the CLM-model: > clm2twoac(fm2) tau 0.4670001 0.06700014 6.970135 3.1664e-12 d-prime 0.7898785 0.17021271 4.640538 3.4750e-06 gendermen 0.4533125 0.24627746 1.840658 0.065672 Observe that d for women is given along with the difference in d for men and women rather than d for each of the genders. The Wald test for gender differences is directly available from the coefficient table with p = 0.0657. The corresponding likelihood ratio test can be obtained by: > fm3 <- update(fm2, ~. - gender) > anova(fm2, fm3) Likelihood ratio tests of cumulative link models: formula: link: threshold: fm3 response ~ 1 probit flexible fm2 response ~ gender probit flexible no.par AIC loglik LR.stat df Pr(>Chisq) fm3 2 358.59-177.29 fm2 3 357.19-175.59 3.3997 1 0.06521. --- Signif. codes: 0 ^aăÿ***^aăź 0.001 ^aăÿ**^aăź 0.01 ^aăÿ*^aăź 0.05 ^aăÿ.^aăź 0.1 ^aăÿ ^aăź 1 5

which is slightly closer to significance. The 95% profile likelihood confidence interval for the difference between men and women on the d -scale is: > confint(fm2) * sqrt(2) 2.5 % 97.5 % gendermen -0.02850933 0.9372283 The likelihood ratio test for the assumption of constant τ is computed in the following. The likelihood ratio statistic and associated p-value are > loglik(fm2) 'log Lik.' -175.593 (df=3) > tw <- twoac(n.women) > tm <- twoac(n.men) > (LR <- 2 * (tw$loglik + tm$loglik - fm2$loglik)) [1] 0.7682623 > pchisq(lr, 1, lower.tail = FALSE) [1] 0.3807552 The Pearson X 2 test of the same hypothesis is given by > freq <- matrix(fitted(fm2), nrow = 2, byrow = TRUE) * 100 > Obs <- matrix(wt, nrow = 2, byrow = TRUE) > (X2 <- sum((obs - freq)^2/freq)) [1] 0.7657565 > pchisq(x2, df = 1, lower.tail = FALSE) [1] 0.381533 so the Pearson and likelihood ratio tests are very closely equivalent as it is so often the case. 6 Regression model for replicated 2-AC data The data used in example 6 are not directly available at the time of writing. Assume however, that data are available in the R data.frame repdata. Then the cumulative probit mixed model where preference depends on reference and consumers (cons) are random can be fitted with: > fm3.agq <- clmm2(preference ~ reference, random = cons, nagq = 10, data = repdata, link = "probit", Hess = TRUE) > summary(fm3.agq) Cumulative Link Mixed Model fitted with the adaptive Gauss-Hermite quadrature approximation with 10 quadrature points Call: clmm2(location = preference ~ reference, random = cons, data = repdata, Hess = TRUE, link = "probit", nagq = 10) 6

Random effects: Var Std.Dev cons 1.367074 1.16922 Location coefficients: referenceb 0.4059 0.1002 4.0519 5.0809e-05 No scale coefficients Threshold coefficients: Estimate Std. Error z value A N 0.4823 0.1130 4.2679 N B 0.8488 0.1166 7.2800 log-likelihood: -668.9122 AIC: 1345.824 Condition number of Hessian: 36.79843 Here we asked for the accurate 10-point adaptive Gauss-Hermite quadrature approximation. The 2-AC estimates are available using the clm2twoac function: > clm2twoac(fm3.agq) tau 0.2592192 0.02902574 8.930665 < 2.22e-16 d-prime -0.9412296 0.15975323-5.891772 3.8208e-09 referenceb 0.5740294 0.14167004 4.051876 5.0809e-05 The standard deviation of the consumer-specific d s is given by: > fm3.agq$stdev * sqrt(2) cons 1.653526 The profile likelihood curve can be obtained using the profile method: > pr <- profile(fm3.agq, range = c(0.7, 1.8)) And then plottet using: > plpr <- plot(pr, fig = FALSE) > plot(sqrt(2) * plpr$stdev$x, plpr$stdev$y, type = "l", xlab = expression(sigma[delta]), ylab = "Relative profile likelihood", xlim = c(1, 2.5), axes = FALSE) > axis(1) > axis(2, las = 1) > abline(h = attr(plpr, "limits")) > text(2.4, 0.17, "95% limit") > text(2.4, 0.06, "99% limit") The resulting figure is shown in Figure 2. The profile likelihood confidence intervals are obtained using: > confint(pr, level = 0.95) * sqrt(2) 7

1.0 Relative profile likelihood 0.8 0.6 0.4 0.2 0.0 95% limit 99% limit 1.0 1.5 2.0 2.5 σ δ Figure 2: Profile likelihood for σ δ Horizontal lines indicate 95% and 99% confidence limits. 2.5 % 97.5 % stdev 1.362331 2.00148 The probabilities that consumers prefer yoghurt A, have no preference or prefer yoghurt B can, for an average consumer be obtained by predicting from the CLMM: > newdat <- expand.grid(preference = factor(c("a", "N", "B"), levels = c("a", "N", "B"), ordered = TRUE), reference = factor(c("a", "B"))) > pred <- predict(fm3.agq, newdata = newdat) The predictions for the extreme consumers have to be obtained by hand. Here we ask for the predictions for the 5th percentile and 95th percentile of the consumer population for reference A and B: > q95.refa <- diff(c(0, pnorm(fm3.agq$theta - qnorm(1-0.05) * fm3.agq$stdev), 1)) > q05.refa <- diff(c(0, pnorm(fm3.agq$theta - qnorm(0.05) * fm3.agq$stdev), 1)) > q95.refb <- diff(c(0, pnorm(fm3.agq$theta - fm3.agq$beta - qnorm(1-0.05) * fm3.agq$stdev), 1)) > q05.refb <- diff(c(0, pnorm(fm3.agq$theta - fm3.agq$beta - qnorm(0.05) * fm3.agq$stdev), 1)) Plotting follows the standard methods: > par(mar = c(0, 2, 0, 0.5) + 0.5) > plot(1:3, pred[1:3], ylim = c(0, 1), axes = FALSE, xlab = "", ylab = "", pch = 19) > axis(1, lwd.ticks = 0, at = c(1, 3), labels = c("", "")) > axis(2, las = 1) > points(1:3, pred[4:6], pch = 1) > lines(1:3, pred[1:3]) > lines(1:3, pred[4:6], lty = 2) 8

1.0 0.8 0.6 0.4 0.2 0.0 Average consumer Reference A Reference B 1.0 0.8 0.6 0.4 0.2 0.0 1.0 0.8 0.6 0.4 0.2 0.0 5th percentile consumer 95th percentile consumer prefer A no preference prefer B Figure 3: The probabilities of prefering yoghurt A, having no preference, or prefering yoghurt B for an average consumer (b = 0) and for fairly extreme consumers (b = ±1.64σ b ). > text(2, 0.6, "Average consumer") > legend("topright", c("reference A", "Reference B"), lty = 1:2, pch = c(19, 1), bty = "n") > par(mar = c(0, 2, 0, 0.5) + 0.5) > plot(1:3, q05.refa, ylim = c(0, 1), axes = FALSE, xlab = "", ylab = "", pch = 19) > axis(1, lwd.ticks = 0, at = c(1, 3), labels = c("", "")) > axis(2, las = 1) > points(1:3, q05.refb, pch = 1) > lines(1:3, q05.refa) > lines(1:3, q05.refb, lty = 2) > text(2, 0.6, "5th percentile consumer") > par(mar = c(2, 2, 0, 0.5) + 0.5) > plot(1:3, q95.refa, ylim = c(0, 1), axes = FALSE, xlab = "", ylab = "", pch = 19) > axis(1, at = 1:3, labels = c("prefer A", "no preference", "prefer B")) > axis(2, las = 1) > points(1:3, q95.refb, pch = 1) > lines(1:3, q95.refa) > lines(1:3, q95.refb, lty = 2) > text(2, 0.6, "95th percentile consumer") The resulting figure is shown in Fig. 3. 9

7 End note Versions details for R and the packages sensr and ordinal appear below: > sessioninfo() R version 3.4.1 (2017-06-30) Platform: x86_64-apple-darwin15.6.0 (64-bit) Running under: OS X El Capitan 10.11.6 Matrix products: default BLAS: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRblas.0.dylib LAPACK: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRlapack.dylib locale: [1] en_us.utf-8/en_us.utf-8/en_us.utf-8/c/en_us.utf-8/en_us.utf-8 attached base packages: [1] stats graphics grdevices utils datasets methods base other attached packages: [1] ordinal_2015.6-28 sensr_1.5-0 loaded via a namespace (and not attached): [1] lattice_0.20-35 codetools_0.2-15 mvtnorm_1.0-6 [4] zoo_1.8-0 ucminf_1.1-4 MASS_7.3-47 [7] grid_3.4.1 multcomp_1.4-6 Matrix_1.2-11 [10] sandwich_2.4-0 splines_3.4.1 TH.data_1.0-8 [13] tools_3.4.1 numderiv_2016.8-1 survival_2.41-3 [16] compiler_3.4.1 References Christensen, R. H. B. (2011). ordinal regression models for ordinal data. R package version 2010.10-22 http://www.cran.r-project.org/package=ordinal/. Christensen, R. H. B. and P. B. Brockhoff (2011). sensr: An R-package for Thurstonian modelling of discrete sensory data. R package version 1.2.8 http://www.cran.rproject.org/package=sensr/. Christensen, R. H. B., H.-S. Lee, and P. B. Brockhoff (2011). Estimation of the Thurstonian model for the 2-AC protocol. In review at Food Quality and Preference. R Development Core Team (2011). R: A Language and Environment for Statistical Computing. Vienna, Austria: R Foundation for Statistical Computing. ISBN 3-900051-07-0. 10