ben-domingue / irw

Code related to data for the Item Response Warehouse
https://datapages.github.io/irw/
7 stars 12 forks source link

Feeling heard: Operationalizing a key concept for social relations #556

Closed ben-domingue closed 3 weeks ago

ben-domingue commented 1 month ago

https://dataverse.nl/dataset.xhtml?persistentId=doi:10.34894/IHNKUN

KingArthur0205 commented 1 month ago

study1_Feeling_Heard_df: Note1: According to paper: A representative sample of the Dutch population through the online panel service PanelInzicht (N =217). Participants were required to be native Dutch and to have at least some experience with online conversations. Based on their descriptions of a past online conversation, we excluded 23 participants who provided nonsensical answers or indicated that they did not have the required experience The final sample consisted of 194 participants

(Q: The origainal dataframe study_1 df has 217 participants, I translated the response in Q3.1 from native Dutch to English, and remove 23 reponses looks like nonsensical)

Note2: Participants were first presented with the central item that formed the kernel of our scale “In this conversation, I felt heard by the other(s)” (Item 1). The rest of the feeling heard scale consisted of the five components: voice items referred to “I”, b) attention, empathy, and respect items were about “the other(s)”, and c) common ground items assessed “we”.

1)heard_df: 18 items, 194 participants, scale from 1 Disagree completely to 7 Agree completely 2)Voice_df: 21 items, 194 participants, scale from 1 = Disagree completely to 5 = Agree completely 3)Attention_df: 19 items, 194 participants, scale from 1 = Disagree completely to 5 = Agree completely 4)Empathy_df: 18 items, 194 participants, scale from 1 = Disagree completely to 5 = Agree completely 5)Respect_df: 18 items, 194 participants, scale from 1 = Disagree completely to 5 = Agree completely 6)Common_ground_df: 18 items, 194 participants, scale from 1 = Disagree completely to 5 = Agree completely 7)Disagree_df: 6 items, 194 participants, scale from 1 = Disagree completely to 5 = Agree completely

study2_Feeling_Heard_df: 1)Reliability_df: 289 valid participants, eight-item, 1 = Strongly disagree to 5 = Strongly agree. 2)Convergent_Validity_conversational_intimacy_df: 289 valid participants, 20 items, 1 = Strongly disagree to 7 = Strongly agree Convergent_Validity_conversational_dominance_df : 289 valid participants, 10 items, 1 = Strongly disagree to 7 = Strongly agree 3)Individualized_Trust_df:289 valid participants,15 items, 7-point scales without anchors 4)Affective_Attraction_df:289 valid participants,five items, 1 = Extremely [unpleasant] to 11 = Extremely [pleasant](inconsistent with paper: 1 = Extremely [unpleasant] to 9 = Extremely [pleasant]) 5)Perceived_partner_responsiveness_df: 289 valid participants, 18 items, rescale from (1 = Not at all true to 9 = Completely true) to (10 = Not at all true to 18 = Completely true) in the paper. Scaled back to keep consistent with the other scales. 6)Perceived_goal_accomplishment_df: 289 valid participants, three items, 1 = Strongly disagree to 5 = Strongly agree 7)Communication_Apprehension_df: 289 valid participants, 7 items, 1 = Strongly disagree to 5 = Strongly agree

study2_not_Feeling_Heard_df: 1)negative_avoidance_df: 4 items, 1000 participants, 5-point Likert scales from 1 = Strongly disagree to 5 = Strongly agree 2)positive_avoidance_df :4 items, 1000 participants, 5-point Likert scales from 1 = Strongly disagree to 5 = Strongly agree 3)negative_approach_df: 4 items, 1000 participants, 5-point Likert scales from 1 = Strongly disagree to 5 = Strongly agree 4)positive_approach_df:4 items, 1000 participants, 5-point Likert scales from 1 = Strongly disagree to 5 = Strongly agree

KingArthur0205 commented 1 month ago

The original datasets were super messy. Data: Fh_Okcsr_Roos_2022_study2_Feeling_CSV.zip

Code:

# Paper: https://pubmed.ncbi.nlm.nih.gov/38032901/
# Data: https://dataverse.nl/dataset.xhtml?persistentId=doi:10.34894/IHNKUN
library(haven)
library(dplyr)
library(tidyr)
library(openxlsx)
library(readr)
library(readxl)
library(sas7bdat)

remove_na <- function(df) {
  df <- df[!(rowSums(is.na(df[, -which(names(df) %in% c("id"))])) == (ncol(df) - 1)), ]
  return(df)
}

study1_df <- read_sav("Feeling heard - Questionnaire data Study 1.sav") 
study2_df <- read_sav("Feeling heard - Questionnaire data Study 2.sav") 

study1_df[] <- lapply(study1_df, function(col) { # Remove column labels for each column
  attr(col, "label") <- NULL
  return(col)
})

# Exclude participants that gave nonsensical responses to Q3.1
exclude_rows <- c(9, 30, 32, 40, 56, 66, 72, 81, 84, 90, 101, 106, 110, 114, 131, 150, 162, 167, 170, 177, 189, 197, 203)

# Exclude the rows from study1 dataframe using slice
study1_df <- study1_df %>%
  slice(-exclude_rows)

study2_df[] <- lapply(study2_df, function(col) { # Remove column labels for each column
  attr(col, "label") <- NULL
  return(col)
})

study1_df <- study1_df %>%
  mutate(id = row_number() )

study2_df <- study2_df %>%
  mutate(id = row_number() )

# ------ Process Study 1 Data ------
heard_df <- study1_df |>
  select(ends_with("11"), ends_with("12"),id, -FL_13_DO_FL_11)
heard_df <- remove_na(heard_df)
heard_df[] <- lapply(heard_df, function(x) if (is.labelled(x)) as.numeric(x) else x)
heard_df <- pivot_longer(heard_df, cols=-c(id), names_to="item", values_to="resp")

Voice_df <- study1_df |>
  select(ends_with("_1"), ends_with("_2"),ends_with("_3"),id)
Voice_df <- remove_na(Voice_df)
Voice_df[] <- lapply(Voice_df, function(x) if (is.labelled(x)) as.numeric(x) else x)
Voice_df <- pivot_longer(Voice_df, cols=-c(id), names_to="item", values_to="resp")

Attention_df <- study1_df |>
  select(ends_with("_4"), ends_with("_5"),ends_with("_6"),id)
Attention_df  <- remove_na(Attention_df )
Attention_df[] <- lapply(Attention_df, function(x) if (is.labelled(x)) as.numeric(x) else x)
Attention_df  <- pivot_longer(Attention_df, cols=-c(id), names_to="item", values_to="resp")

Empathy_df <- study1_df |>
  select(ends_with("_7"), ends_with("_8"),ends_with("_9"),id)
Empathy_df <- remove_na(Empathy_df)
Empathy_df[] <- lapply(Empathy_df, function(x) if (is.labelled(x)) as.numeric(x) else x)
Empathy_df <- pivot_longer(Empathy_df, cols=-c(id), names_to="item", values_to="resp")

Respect_df <- study1_df |>
  select(ends_with("_10"), ends_with("_11"),ends_with("_12"),id,-FL_13_DO_FL_11)
Respect_df <- remove_na(Respect_df)
Respect_df[] <- lapply(Respect_df, function(x) if (is.labelled(x)) as.numeric(x) else x)
Respect_df <- pivot_longer(Respect_df, cols=-c(id), names_to="item", values_to="resp")

Common_ground_df <- study1_df |>
  select(ends_with("_13"), ends_with("_14"),ends_with("_15"),id)
Common_ground_df <- remove_na(Common_ground_df)
Common_ground_df[] <- lapply(Common_ground_df, function(x) if (is.labelled(x)) as.numeric(x) else x)
Common_ground_df <- pivot_longer(Common_ground_df, cols=-c(id), names_to="item", values_to="resp")

Disagree_df <- study1_df |>
  select(ends_with("_16"),id)
Disagree_df <- remove_na(Disagree_df)
Disagree_df[] <- lapply(Disagree_df, function(x) if (is.labelled(x)) as.numeric(x) else x)
Disagree_df <- pivot_longer(Disagree_df, cols=-c(id), names_to="item", values_to="resp")

heard_df$group <- "Feeling Heard Group"
Voice_df$group <- "Voice Group"
Attention_df$group <- "Attention Group"
Empathy_df$group <- "Empathy Group"
Respect_df$group <- "Respect Group"
Common_ground_df$group <- "Common ground Group"
Disagree_df$group <- "Disagree Group"

study1_Feeling_Heard_df <- rbind(heard_df, 
                                 Voice_df,
                                 Attention_df, 
                                 Empathy_df,
                                 Respect_df,
                                 Common_ground_df,
                                 Disagree_df)

save(study1_Feeling_Heard_df, file="Fh_Okcsr_Roos_2022_study1_Feeling_Heard.Rdata")
write.csv(study1_Feeling_Heard_df, "Fh_Okcsr_Roos_2022_study1_Feeling_Heard.csv", row.names=FALSE)

# ------ Process Study 2 Feeling Heard Data ------
Reliability_df <- study2_df |>
  select(starts_with("Q5.1"),id)
Reliability_df   <- remove_na(Reliability_df)
Reliability_df  <- pivot_longer(Reliability_df , cols=-c(id), names_to="item", values_to="resp")

Convergent_Validity_conversational_intimacy_df <- study2_df |>
  select(starts_with("Q6.1"),id)
Convergent_Validity_conversational_intimacy_df  <- remove_na(Convergent_Validity_conversational_intimacy_df)
Convergent_Validity_conversational_intimacy_df <- pivot_longer(Convergent_Validity_conversational_intimacy_df , cols=-c(id), names_to="item", values_to="resp")

Convergent_Validity_conversational_dominance_df<- study2_df |>
  select(starts_with("Q75"),id)
Convergent_Validity_conversational_dominance_df  <- remove_na(Convergent_Validity_conversational_dominance_df)
Convergent_Validity_conversational_dominance_df <- pivot_longer(Convergent_Validity_conversational_dominance_df, cols=-c(id), names_to="item", values_to="resp")

Individualized_Trust_df <- study2_df |>
  select(starts_with("Q8.1"),id)
Individualized_Trust_df  <- remove_na(Individualized_Trust_df)
Individualized_Trust_df <- pivot_longer(Individualized_Trust_df , cols=-c(id), names_to="item", values_to="resp")

Affective_Attraction_df <- study2_df |>
  select(starts_with("Q9"),id)
Affective_Attraction_df  <- remove_na(Affective_Attraction_df)
Affective_Attraction_df <- pivot_longer(Affective_Attraction_df , cols=-c(id), names_to="item", values_to="resp")

Perceived_partner_responsiveness_df <- study2_df |>
  select(starts_with("Q10.1"),id)
Perceived_partner_responsiveness_df <- remove_na(Perceived_partner_responsiveness_df )
Perceived_partner_responsiveness_df  <- pivot_longer(Perceived_partner_responsiveness_df, cols=-c(id), names_to="item", values_to="resp")

Perceived_goal_accomplishment_df <- study2_df |>
  select(starts_with("Q11.1"),id)
Perceived_goal_accomplishment_df <- remove_na(Perceived_goal_accomplishment_df)
Perceived_goal_accomplishment_df  <- pivot_longer(Perceived_goal_accomplishment_df, cols=-c(id), names_to="item", values_to="resp")

Communication_Apprehension_df <- study2_df |>
  select(starts_with("Q12.1"),id)
Communication_Apprehension_df <- remove_na(Communication_Apprehension_df)
Communication_Apprehension_df <- pivot_longer(Communication_Apprehension_df, cols=-c(id), names_to="item", values_to="resp")

Reliability_df$group <- "Reliability Group"
Convergent_Validity_conversational_intimacy_df $group <- "Convergent Validity Conversational Intimacy Group"
Convergent_Validity_conversational_dominance_df $group <- "Convergent Validity Conversational Dominance Group"
Individualized_Trust_df$group <- "Individualized Trust Group"
Affective_Attraction_df$group <- "Affective Attraction Group"
Perceived_partner_responsiveness_df$group  <- "Perceived Partner Responsiveness Group"
Perceived_goal_accomplishment_df$group  <- "Perceived Goal Accomplishment Group"
Communication_Apprehension_df$group <- "Communication Apprehension Group"

convert_labelled_to_numeric <- function(df) {
  df[] <- lapply(df, function(x) {
    if (is.labelled(x)) {
      # If it's a labelled column, convert it to numeric (which removes labels)
      as.numeric(x)
    } else {
      x
    }
  })
  return(df)
}

# Apply this conversion to all data frames
Reliability_df <- convert_labelled_to_numeric(Reliability_df)
Convergent_Validity_conversational_intimacy_df <- convert_labelled_to_numeric(Convergent_Validity_conversational_intimacy_df )
Convergent_Validity_conversational_dominance_df <- convert_labelled_to_numeric(Convergent_Validity_conversational_dominance_df)
Individualized_Trust_df <- convert_labelled_to_numeric(Individualized_Trust_df)
Affective_Attraction_df <- convert_labelled_to_numeric(Affective_Attraction_df)
Perceived_partner_responsiveness_df <- convert_labelled_to_numeric(Perceived_partner_responsiveness_df)
Perceived_goal_accomplishment_df <- convert_labelled_to_numeric(Perceived_goal_accomplishment_df)
Communication_Apprehension_df <- convert_labelled_to_numeric(Communication_Apprehension_df)

study2_Feeling_Heard_df <- rbind(Reliability_df, 
                                 Convergent_Validity_conversational_intimacy_df,
                                 Convergent_Validity_conversational_dominance_df,
                                 Individualized_Trust_df, 
                                 Affective_Attraction_df,
                                 Perceived_partner_responsiveness_df,
                                 Perceived_goal_accomplishment_df,
                                 Communication_Apprehension_df)
study2_Feeling_Heard_df$resp <- ifelse(study2_Feeling_Heard_df$resp >= 10 & study2_Feeling_Heard_df$resp <= 18, study2_Feeling_Heard_df$resp - 9, study2_Feeling_Heard_df$resp)
# ------ Process Negative Avoidance Study 2 Data ------
negative_avoidance_df <- study2_df %>%
  select(Q13.1_1, Q23.1_1, Q13.1_2, Q23.1_2,id)
negative_avoidance_df  <- remove_na(negative_avoidance_df )
negative_avoidance_df <- pivot_longer(negative_avoidance_df , cols=-c(id), names_to="item", values_to="resp")

# Positive Avoidance
positive_avoidance_df <- study2_df  %>%
  select(Q13.1_3, Q23.1_3, Q13.1_4, Q23.1_4, id)
positive_avoidance_df <- remove_na(positive_avoidance_df )
positive_avoidance_df <- pivot_longer(positive_avoidance_df, cols=-c(id), names_to="item", values_to="resp")

# Negative Approach
negative_approach_df <- study2_df  %>%
  select(Q13.1_5, Q23.1_5, Q13.1_6, Q23.1_6, id)
negative_approach_df <- remove_na(negative_approach_df)
negative_approach_df<- pivot_longer(negative_approach_df , cols=-c(id), names_to="item", values_to="resp")

# Positive Approach
positive_approach_df <- study2_df  %>%
  select(Q13.1_7, Q23.1_7, Q13.1_8, Q23.1_8, id)
positive_approach_df <- remove_na(positive_approach_df)
positive_approach_df <- pivot_longer(positive_approach_df, cols=-c(id), names_to="item", values_to="resp")

negative_avoidance_df <- convert_labelled_to_numeric(negative_avoidance_df)
positive_avoidance_df <- convert_labelled_to_numeric(positive_avoidance_df)
negative_approach_df <- convert_labelled_to_numeric(negative_approach_df)
positive_approach_df <- convert_labelled_to_numeric(positive_approach_df)

study2_not_feeling_heard_df <- rbind(negative_avoidance_df, 
                                     positive_avoidance_df,
                                     negative_approach_df, 
                                     positive_approach_df)

study2_not_feeling_heard_df$group <- "negative"
study2_Feeling_Heard_df$group <- "positive"
study2_df <- rbind(study2_Feeling_Heard_df, study2_not_feeling_heard_df)

save(study2_df, file="Fh_Okcsr_Roos_2022_study2_Feeling_Heard.Rdata")
write.csv(study2_df, "Fh_Okcsr_Roos_2022_study2_Feeling_Heard.csv", row.names=FALSE)
ben-domingue commented 3 weeks ago

@KingArthur0205 i'm inclined to cut this one. fewer respondents than items is (in most cases) not that worthwhile especially when the N of people is <100. Fh_Okcsr_Roos_2022_study3_Feeling_Heard.Rdata

ben-domingue commented 3 weeks ago

and could these be combined?

KingArthur0205 commented 3 weeks ago

@ben-domingue

  1. Removal of Study 3 Data: Certainly! I’ve removed the Study 3 data.

  2. Merging Decisions: a. Within each study, I’ve merged the sub-scales that assess participants' feelings about having conversations with others, covering aspects such as trust, feelings, and emotions. b. I tend to keep the datasets separate because:     1. They measure different aspects. Study 1 specifically targets online conversations, focusing on participants' physical and emotional responses during these interactions.     2. Study 2 looks at conversations in a broader context, including online interactions. The intent is to apply theories about traditional conversations from Study 2 to validate conclusions drawn from Study 1. : )     3. The 2 datasets in Study 2 can be merged as they measured positve/negative feelings about conversations, which share some commonalities

ben-domingue commented 3 weeks ago

@KingArthur0205 i just downloaded the data and am still seeing study 3. i can just remove that one manually NBD but wanted to double check to see if anything else had changed.

KingArthur0205 commented 3 weeks ago

@ben-domingue I haven't changed the data for this one as I'd like to confirm if you'd agree that "the 2 datasets in Study 2 can be merged as they measured positve/negative feelings about conversations, which share some commonalities"

ben-domingue commented 3 weeks ago

so the study 2 dataset: are they the same scales in different contexts?

KingArthur0205 commented 3 weeks ago

All questions were asked in the context of how participants felt during conversations. The difference is that the negative data frame focused on negative feelings (e.g., "I’m afraid to engage in conversation"), while the positive data frame focused on positive feelings (e.g., "I feel understood").

ben-domingue commented 3 weeks ago

i think in that case i'd be inclined to merge and just include a variable for context.

KingArthur0205 commented 3 weeks ago

@ben-domingue Got it. In this case, I'll include a group and have the values marked as "positive" and "negative"

KingArthur0205 commented 3 weeks ago

@ben-domingue The code and data have been updated in the cell above. Let me know if you find it acceptable, and I’ll create the PR.

ben-domingue commented 3 weeks ago

ok ship PR @KingArthur0205

KingArthur0205 commented 3 weeks ago

PR for this one: https://github.com/ben-domingue/irw/pull/646/files