Data normalization issue

Hello,

I want to normalize my data (F1, F2, and F3) using the Lobanov method and then transform the data into Hz. The only option for this is through the vowels package in R.

lobanov <- norm.lobanov(vowels, f1.all.mean=NA, f2.all.mean=NA)
lobanov_Hz <- scalevowels(lobanov)

The problem is that it does not transform F3 (see figure below)

I know I can normalize my data through other packages such as phonR, but these do not transform the data into Hz after normalization.

Any ideas?

From help(scalevowels)

Scaling is necessary to convert the output from some normalization methods to values that appear Hertz-like (and are thus more familiar). However, scaling is rarely recommended as in someways it undoes the process of normalization. See NORM: Vowel Normalization Suite | About NORM for some important details.

That said, looking at the source for scalevowel() it's not obvious how treatment of F3 is supposed to work. I don't see any difference whether or not the normed object has the attribute no.f3

function (normed.vowels) 
{
    f3.plus <- 0
    if (is.null(attributes(normed.vowels)$no.f3s)) {
        f3.plus <- 1
        min.f3 <- min(c(normed.vowels[, 6], normed.vowels[, 9]), 
            na.rm = TRUE)
        max.f3 <- max(c(normed.vowels[, 6], normed.vowels[, 9]), 
            na.rm = TRUE)
    }
    min.f1 <- min(c(normed.vowels[, 4], normed.vowels[, 6 + f3.plus]), 
        na.rm = TRUE)
    max.f1 <- max(c(normed.vowels[, 4], normed.vowels[, 6 + f3.plus]), 
        na.rm = TRUE)
    min.f2 <- min(c(normed.vowels[, 5], normed.vowels[, 7 + f3.plus]), 
        na.rm = TRUE)
    max.f2 <- max(c(normed.vowels[, 5], normed.vowels[, 7 + f3.plus]), 
        na.rm = TRUE)
    normed.vowels[, 4] <- round((500 * (normed.vowels[, 4] - 
        min.f1)/(max.f1 - min.f1)) + 250, 3)
    normed.vowels[, 6 + f3.plus] <- round((500 * (normed.vowels[, 
        6 + f3.plus] - min.f1)/(max.f1 - min.f1)) + 250, 3)
    normed.vowels[, 5] <- round((1400 * (normed.vowels[, 5] - 
        min.f2)/(max.f2 - min.f2)) + 850, 3)
    normed.vowels[, 7 + f3.plus] <- round((1400 * (normed.vowels[, 
        7 + f3.plus] - min.f2)/(max.f2 - min.f2)) + 850, 3)
    if (f3.plus > 0) {
        normed.vowels[, 6] <- round((1200 * (normed.vowels[, 
            6] - min.f1)/(max.f3 - min.f3)) + 2000, 3)
        normed.vowels[, 9] <- round((1200 * (normed.vowels[, 
            9] - min.f1)/(max.f3 - min.f3)) + 2000, 3)
    }
    attr(normed.vowels, "scaled.values") <- TRUE
    normed.vowels
}

So, is there any other option to convert Lobanov normalized data into Hz?

This topic was automatically closed 42 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.