Как перекодировать переменные в 5 объединенных выходных данных Amelia одновременно?

Я использую Amelia и Zelig в R для множественного вменения моих наборов данных с неочищенными переменными. Воспроизводимый набор данных находится в пакете Zelig.

require(Zelig)
require(Amelia)
data(freetrade)
a.out <- amelia(freetrade, m = 5, ts = "year", cs = "country")

Я хочу перекодировать переменную в 5 объединенных наборах данных, например:

> polity <- polity-1

Есть ли какая-либо функция, которая могла бы автоматически повторяться 5 раз для 5 наборов данных MI вместо вызова каждого a.out$imputations[[1]], a.out$imputations[[2]]....., а затем выполнять следующий анализ.

> z.out <- zelig(tariff ~ polity + pop + gdp.pc + year +
+ country, data = freetrade, model = "ls")
> summary(z.out)

Дайте мне знать, если это имеет смысл. Как и требует Чейз, выше приведен пример от Zelig. Но я использовал свой собственный набор данных, как показано ниже:

require(Amelia)
a.out <- amelia(MIV5, m=5, idvars = c("STU_ID", "SCH_ID", "BYSTUWT", "BYRACE",
                "F1SES2","F1TXMSTD", "F2HSSTAT", "BYTXMSTD", "BYURBAN",
                "BYTXRSTD", "BYTXCSTD", "BYNELS2M", "BYNELS2R", "BYNELS0M", 
                "BYPISAME", "BYPISARE", "BYTXMIRR", "BYTXMQU"), 
                noms = c("BYSEX", "BYSTLANG", "F2B07", "F2EVRAPP"),
                ords= c ("BYSTEXP","F1SES2QU"), p2c=0)

Теперь дело в том, что мне нужно перекодировать и очистить переменные, такие как преобразование фактора «BYRACE» в числовую «гонку» и получение математической оценки:

race <- as.numeric(BYRACE)  
mthgn <- F1TXMSTD-BYTXMSTD

Спасибо!


person Lily    schedule 13.04.2011    source источник
comment
Попытка запустить a.out дает Error in amelia(MIV5, m = 5, idvars = c("STU_ID", "SCH_ID", "BYSTUWT", : object 'MIV5' not found. Пожалуйста, обновите вопрос воспроизводимым примером.   -  person Chase    schedule 13.04.2011
comment
Чейз: Потому что я использовал свой собственный набор данных. Позвольте мне пересмотреть его, используя пример Зелига.   -  person Lily    schedule 13.04.2011
comment
Разве это не оксюморон? Как мы должны найти MIV5, если это ваш собственный набор данных? Amelia похоже, что он поставляется с двумя наборами данных, africa и freetrade...те, которые я определенно могу найти, поскольку они идут в комплекте...насколько я могу судить, MIV5 существует только на вашей машине.   -  person Chase    schedule 13.04.2011
comment
@Lily: убедитесь, что вы принимаете правильные ответы на свои вопросы, щелкнув знак V слева от него. См. также stackoverflow.com/faq.   -  person Joris Meys    schedule 13.04.2011
comment
Привет Чейз: я пересмотрел свой пример. Извините за путаницу. Я новичок в использовании R.   -  person Lily    schedule 13.04.2011
comment
@ Лили, вы хотите вычесть 1 из a.out$imputations[[n]]$polity, где n равно 5 в вашем примере, а затем использовать эти перекодированные, вмененные наборы данных в 5 отдельных вызовах zelig(). Это то, с чем вы боретесь?   -  person Gavin Simpson    schedule 13.04.2011


Ответы (1)


a.out$imputations <- lapply(a.out$imputations, transform, polity=polity-1)

a.out$imputations <- lapply(a.out$imputations, function(i) i[,'polity'] <- log(i[,'polity'])-1)

Вмененные наборы данных просто включаются в виде списка в объект Amelia. Так что lapply() должен работать.

person Vincent    schedule 13.04.2011
comment
Привет Винсент: Это работает работает!!!!! Большое спасибо! Кстати, не могли бы вы сообщить мне, почему вы используете преобразование? Если я хочу получить среднее значение или вычислить стандартизированную оценку, нужно ли мне также использовать преобразование? - person Lily; 14.04.2011
comment
Рад слышать, что это работает :) Я просто использовал преобразование, потому что это удобное сокращение. Там ничего особенного. Я отредактировал свой ответ, чтобы привести еще один пример с преобразованием журнала. Это должно дать вам лучшее представление о том, что вы можете делать с lapply(). Если вы еще этого не сделали, попробуйте прочитать о семействе функций apply. Они очень удобны. - person Vincent; 14.04.2011
comment
Винсент: очень ценю ваш быстрый ответ. Мне интересно, какие учебники вы рекомендуете для начинающих, чтобы изучить функции? На самом деле я читаю Зелига. Язык руководства Zelig мне гораздо понятнее. - person Lily; 14.04.2011
comment
Тут много тем по этому поводу. Поиск R книг. Но вы можете начать с веб-сайта Quick-R: statmethods.net. Фил Спектор довольно хорошо показывает основы, такие как подписка и функции apply(). Если вы связаны с академическим учреждением, вы можете получить книгу Spector (и всю серию книг Use R) бесплатно через веб-сайт springerlink. - person Vincent; 14.04.2011
comment
Спасибо. Я следил за Quick-R с тех пор, как начал изучать R. Он полезен для начинающих. Спасибо еще раз! - person Lily; 15.04.2011