Каков наилучший способ обработки помеченных переменных, импортированных с помощью гавани? - PullRequest
0 голосов
/ 30 января 2020

У меня есть около 15 файлов исследований выборов SPSS, сохраненных как файлы .sav. Моя группа и я будем перекодировать около 10 переменных для каждого исследования, чтобы выполнить некоторые logisti c регрессии.

Я использовал haven() для импорта всех файлов, так что похоже, что все переменные имеют haven_labelled() класс.

Меня всегда немного смущало, как обращаться с этим классом переменных, однако я наблюдал много улучшенной производительности, так как пакеты haven () и labeleled () были обновлены, поэтому я склонен продолжать использовать его, а не использовать, например, rio или foreign.

Но я хочу получить представление о том, какой должна быть лучшая практика до , мы начинаем эту работу, поэтому мы не оглядывайся с сожалением.

В каждом файле исследования содержится около 200 переменных, со смесью факторов и чисел c переменных. Но для начала мне интересно, как мне следует go перекодировать переменную пола, чтобы я в итоге получил переменную male, где 1 - это мужчина, а 0 - нет.

Одна вещь, которую я хочу спросите о car::Recode() методе перекодирования переменных в отличие от dplyr::recode метода переменных. Лично я считаю синтаксис dplyr::recode() очень неуклюжим и справочную документацию плохой. Я также не уверен, как лучше установить пропущенные значения.

Если быть точным c, я думаю, у меня есть три конкретных c вопроса.

Вопрос 1: есть ли веская причина использовать dplyr::recode вместо car::Recode? Мой собственный ответ таков: car::Recode() выглядит достаточно и простым в использовании.

Вопрос 2: Должен ли я обратить внимание на преобразование переменных в факторы или числа c или все будет в порядке, оставив переменные в виде haven_labelled с обновленными метками значений? Я обеспокоен этой цитатой из документации о labelled_class: '' Этот класс предоставляет несколько методов, так как я ожидаю, что вы приведете к стандартному классу R (например, factor()) вскоре после импорта ''

Однако, возможно, класс haven_labelled был улучшен и достаточно отличается от помеченного класса, так что больше нет необходимости форсировать преобразование в другие стандартные классы R.

Вопрос 3: есть ли преимущество в установке пропущенных значений с помощью labelled (например, na_range(), na_values()), а не с помощью метода car::Recode()?

Мой наклон что существуют явные недостатки использования методов labelled, и я должен придерживаться метода car::Recode().

Спасибо.

#FAKE DATA
library(labelled)
var1<-labelled(rep(c(1,5), 100), c(male = 1, female = 5))
var2<-labelled(sample(c(1,3,5,7,8,9), size=200, replace=T), c('strongly agree'=1, 'agree'=3, 'disagree'=5, 'strongly disagree'=7, 'DK'=8, 'refused'=9))
#give variable labels
var_label(var1)<-'Respondent\'s sex'
var_label(var2)<-'free trade is a good thing'
df<-data.frame(var1=var1, var2=var2)
str(df)
#This works really well; and I really like this. 
look_for(df, 'sex')
look_for(df, 'free trade')
#the Car way
df$male<-car::Recode(df$var1, "5=0")
#Check results
df$male 
#value labels are still there, so would have to be removed or updated
as_factor(df$male)
#Remove value labels
val_labels(df$male)<-NULL
#Check 
class(df$male) #left with a numeric variable
#The other car way, keeping and modifying value labels
df$male2<-car::Recode(df$var1, "5=0")
df$male2
val_label(df$male2, 0)<-c('female')
val_label(df$male2, 5)<-NULL
val_labels(df$male2)
#Check class
class(df$male2)
#Can run numeric functions on it
mean(df$male2)
#easily convert to factor
as_factor(df$male2)

#How to handle missing values
#The CAR way
#use car to set missing values to NA
df$free_trade<-Recode(df$var2, "8=NA; 9=NA")
#Check class
class(df$free_trade)
#can still run numeric functions on haven_labelled
mean(df$free_trade, na.rm=T)
#table
table(df$free_trade)
#did the na recode work?
table(is.na(df$free_trade))
#check value labels
val_labels(df$free_trade)   

#How to handle missing values
#The CAR way
#use car to set missing values to NA
df$free_trade<-Recode(df$var2, "8=NA; 9=NA")
#Check class
class(df$free_trade)
#can still run numeric functions on haven_labelled
mean(df$free_trade, na.rm=T)
#table
table(df$free_trade)
#did the na recode work?
table(is.na(df$free_trade))
#check value labels
val_labels(df$free_trade)      

#set missing values the labelled way
table(df$var2)
na_values(df$var2)<-c(8,9)
#check
df$var2
#but a table function of does not pick up 8 and 9 as m isisng
table(df$var2)
#this seems to not work very well
table(to_factor(df$var2))
to_factor(df$var2)


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...