The Positive and Negative Affect Schedule (PANAS) is a self-report questionnaire that consists of two 10-item scales to measure both positive and negative affect. Each item is rated on a 5-point scale of 1 (not at all) to 5 (very much). The measure has been used mainly as a research tool in group studies, but can be utilized within clinical and non-clinical populations as well.[1] Shortened, elongated, and children’s versions of the PANAS have been developed, taking approximately 5–10 minutes to complete.[2] Clinical and non-clinical studies have found the PANAS to be a reliable and valid instrument in the assessment of positive and negative affect.[3]
The PANAS-SF, comprises 10 items that were determined through the highest factor loadings on the exploratory factor analysis reported by Watson et al. (1988) in his original PANAS.
Separate from the PANAS-SF, Edmund Thompson created the international PANAS short form (I-PANAS-SF) in order to make a 10 item mood scale that can be implemented effectively on an international level, provide more clarity on the content of the items, reduce ambiguities, address the limitations of the original and the previous short form of the PANAS, and also to provide a shorter, yet dependable and valid scale.
The i-PANAS-SF is not translated but an English version, optimized also for the understanding of non native English speakers.
Paper by Thompson (2007)
Question: Thinking about yourself and how you normally feel, to what extent do you generally feel (normally/generally or for a specified period): Items in order: Upset Hostile Alert Ashamed Inspired Nervous Determined Attentive Afraid Active Interval measure: never 1 2 3 4 5 always
Respondents are asked to rate these positive and negative adjectives according to the extent to which each describes the way they have felt during a specified time.
We refer to Sample 4: Sport students
Measured the last training day before a competition.
A convenience sample of 533 sports athletes from Cór-doba, Argentina (173 female, 32.5%) completed the PANAS 1 to 72 hours prior to competing (M = 3 4.9, SD = 20.51). The sample was made up of soccer players (n = 197), hockey players (n = 184), basketball players (n = 46), handball play-ers (n = 52), indoor soccer players (n = 22) and martial arts practitioners (n = 32), from 14 to 50 years old (M = 21.22, SD = 5.71). On average they trained 4.20 days per week (SD = 1.21), between 3 and 10 hours per day. Athletes overall av-eraged 10 or more years practicing their respective sports and they had all competed at province to international lev-els at least three times a year. [manches ist Unsinn]
Type of sport categories are “soccer”, “hockey”, “martial_arts”, “handball”, “indoor_soccer”
Procedure
After initial contacts, data collection was done on the last training day before competition. All other procedures were like Study 2. The questionnaires were collectively ad-ministered in the locker room, but each participant com-pleted the questionnaire individually.
no | german | english | quality |
---|---|---|---|
1 | aktiv | active | PA |
2 | bekümmert | distressed | NA |
3 | interessiert | interested | PA |
4 | freudig erregt | excited | PA |
5 | verärgert | upset | NA |
6 | stark | strong | PA |
7 | schuldig | guilty | NA |
8 | erschrocken | scared | NA |
9 | feindselig | hostile | NA |
10 | angeregt | inspired | PA |
11 | stolz | proud | PA |
12 | gereizt | irritable | NA |
13 | begeistert | enthusiastic | PA |
14 | beschämt | ashamed | NA |
15 | wach | alert | PA |
16 | nervös | nervous | NA |
17 | entschlossen | determined | PA |
18 | aufmerksam | attentive | PA |
19 | durcheinander | jittery | NA |
20 | ängstlich | afraid | NA |
no | german | spanish | english | quality |
---|---|---|---|---|
1 | aktiv | 20- Activo | active | p |
5 | verärgert | 4- Disgustado | upset | n |
9 | feindelig | 8- Hostil | hostile | n |
10 | angeregt | 15- Inspirado | inspired | p |
14 | beschämt | 14- Avergonzado | ashamed | n |
15 | wach | 13- Alerta | alert | p |
16 | nervös | 16- Nervioso | nervous | n |
17 | entschlossen | 17- Decidido | determined | p |
18 | aufmerksam | 18- Atento | attentive | p |
20 | ängstlich | 11- Temeroso | afraid | n |
variable english | spanish | comment |
---|---|---|
id | ID | Número de caso |
gender | Sexo | 1 = femenino, 2 = masculino |
age | Edad | Edad |
days_till_match | DíasPartido | ¿Cuántos días faltan para la competencia? |
hours_till_match | HorasPartido | Tiempo hasta la competencia |
n_type_of_sport | Deporte | ¿Qué deporte practicas? |
weekly_training_days | DíasEntrenamiento | Cantidad de días de entrenamiento semanal |
daily_training_hours | HorasEntrenamiento | Cantidad de horas de entrenamiento diarias |
training_years | AñosPráctica | Hace cuántos años practicas tu deporte |
matches_per_year | CantidadCompetencias | Cuántas competencias (torneos, campeonatos) tienes por año |
level_in_matches | NivelCompetición | Cuál es tu máximo nivel de competición actual |
See unit dplyr.html
We use piping (%>%) here.
# we need the packages of tidyverse
require(tidyverse)
## Loading required package: tidyverse
## ── Attaching packages ────────────────────────────────────────────────────────────────────────────────── tidyverse 1.2.1 ──
## ✔ ggplot2 3.1.1 ✔ purrr 0.3.2
## ✔ tibble 2.1.1 ✔ dplyr 0.8.0.1
## ✔ tidyr 0.8.3 ✔ stringr 1.4.0
## ✔ readr 1.3.1 ✔ forcats 0.4.0
## ── Conflicts ───────────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
# read data
# dd <- read_tsv("arg_panas_sf_20.txt")
dd <- readr::read_tsv("http://md.psych.bio.uni-goettingen.de/data/div/arg_panas_sf_533.txt")
## Parsed with column specification:
## cols(
## .default = col_double()
## )
## See spec(...) for full column specifications.
# we check for ranges
# apply(dd, 2, range)
# dd %>% summarise(mean = mean(.), min=min(), max=max(), n = n())
# erg <- dd %>% select(age:afraid) %>% summarise_all(funs(mean, min, max))
# View(erg)
# as always it's a good idea to look for the range
# we want to see all columns
dd %>% select(age:afraid) %>% summarise_all(funs(min)) %>% print(width = Inf)
## Warning: funs() is soft deprecated as of dplyr 0.8.0
## please use list() instead
##
## # Before:
## funs(name = f(.)
##
## # After:
## list(name = ~f(.))
## This warning is displayed once per session.
## # A tibble: 1 x 19
## age days_till_match hours_till_match n_type_of_sport
## <dbl> <dbl> <dbl> <dbl>
## 1 14 0 1 1
## weekly_training_days daily_training_hours training_years matches_per_year
## <dbl> <dbl> <dbl> <dbl>
## 1 2 1 1 1
## level_in_matches active upset hostile inspired ashamed alert nervous
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 1 1 1 1 1 1 1
## determine attentive afraid
## <dbl> <dbl> <dbl>
## 1 1 1 1
dd %>% select(age:afraid) %>% summarise_all(funs(max)) %>% print(width = Inf)
## # A tibble: 1 x 19
## age days_till_match hours_till_match n_type_of_sport
## <dbl> <dbl> <dbl> <dbl>
## 1 50 3 72 6
## weekly_training_days daily_training_hours training_years matches_per_year
## <dbl> <dbl> <dbl> <dbl>
## 1 9 4 9 9
## level_in_matches active upset hostile inspired ashamed alert nervous
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 9 9 9 9 9 9 9 9
## determine attentive afraid
## <dbl> <dbl> <dbl>
## 1 9 9 9
# alternatively
# dd %>% summarise_at(vars(age:afraid), max) %>% print(width = Inf)
# select columns by excluding those we don't need and use the rest
# dd %>% summarise_at(vars(-id, -n_gender), max) %>% print(width = Inf)
# there are strange values
# we take a closer look by applying a command to all columns
# this is nothing that has to do with dplyr
# apply(dd[,7:ncol(dd)], 2, table)
# we have probably an old style SPSS data file and 9 specifies missings
# we set all 9 in suspected columns to NA
dd %>% select(age:afraid) %>% mutate_all(~ replace(.x, .x == 9, NA))
## # A tibble: 533 x 19
## age days_till_match hours_till_match n_type_of_sport weekly_training…
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 25 2 48 3 5
## 2 22 2 48 3 3
## 3 16 2 48 3 6
## 4 29 2 48 3 6
## 5 15 2 48 3 6
## 6 26 2 48 3 5
## 7 22 2 48 3 3
## 8 21 2 48 3 3
## 9 16 2 48 3 3
## 10 19 2 48 3 3
## # … with 523 more rows, and 14 more variables: daily_training_hours <dbl>,
## # training_years <dbl>, matches_per_year <dbl>, level_in_matches <dbl>,
## # active <dbl>, upset <dbl>, hostile <dbl>, inspired <dbl>,
## # ashamed <dbl>, alert <dbl>, nervous <dbl>, determine <dbl>,
## # attentive <dbl>, afraid <dbl>
# this replaces the existing tibble dd
dd <- dd %>% mutate_at(.vars = vars(active:afraid),
.funs = funs(ifelse(. == 9, NA, .)))
# we convert numeric coded grouping variables to type factor and give appropriate labels to factor levels
dd <- dd %>% mutate(gender = factor(n_gender,
levels = c(1,2),
labels = c("female", "male")))
dd <- dd %>% mutate(type_of_sport = factor(n_type_of_sport,
levels = c(1,2,3,4,5),
labels = c("soccer", "hockey", "martial_arts", "handball", "indoor_soccer")))
# we calculate the positive and negative affect as mean value of the appropriate variables
# we use function rowMeans() for that and select the adequate variables
dd <- dd %>% mutate(p_aff = rowMeans(select(., c(active, inspired, alert, determine, attentive))))
dd <- dd %>% mutate(n_aff = rowMeans(select(., c(upset, hostile, ashamed, nervous, afraid))))
Instead of factor()
which applies to nominal data, we have ordered()
for ordered data, f. e. low, medium, high.
There is a parallel version where these transformations are done with base R commands.
Other sample data, maybe to play with ;-)