В основном я хочу, чтобы написать программу, которая будет рандомизацией порядка моих данных n
раз, а затем завершить анализ выживаемости и построить выход через n
написания программы по внедрению перестановок
Так позволяет принимать следующие общие данные пакет matching()
и создать набор данных обработанных и необработанных людей. Link to package
set.seed(123)
library(Matching)
data(lalonde)
lalonde$age_cat <- with(lalonde, ifelse(age < 24, 1, 2))
attach(lalonde)
lalonde$ID <- 1:length(lalonde$age)
#The covariates we want to match on
X = cbind(age_cat, educ, black, hisp, married, nodegr, u74, u75, re75, re74)
#The covariates we want to obtain balance on
BalanceMat <- cbind(age_cat, educ, black, hisp, married, nodegr, u74, u75, re75, re74,
I(re74*re75))
genout <- GenMatch(Tr=treat, X=X, BalanceMatrix=BalanceMat, estimand="ATE", M=1,
pop.size=16, max.generations=10, wait.generations=1)
detach(lalonde)
# now lets pair the the non-treated collisions to the treated
# BUT lets pair WITHOUT REPLACEMENT
mout <- Match(Y=NULL, Tr=lalonde$treat, X=X,
Weight.matrix=genout, M=2,
replace=FALSE, ties=TRUE)
summary(mout)
# we see that for 130 treated observations, we have 260 non-treated
# this is because we set M=2
# and yes length(lalonde$age[lalonde$treat==0]) == 260 but just follow me please
# but this was done for a specific reason
# now lets create a table for our 130+260 collisions
treated <- lalonde[mout$index.treated,]
# now we only want one occurence of the treated variables
library(dplyr)
treat_clean <- treated %>%
group_by(ID) %>%
slice(1)
non.treated <- lalonde[mout$index.control,]
# finally we can combine to form one clear data.set
matched.data <- rbind(treat_clean, non.treated)
Теперь мы можем сделать условную логистическую регрессию для определения ИЛИ ассоциированный с re78 (деньгами, заработанные в 1987 году) и лечением. Для этого нам нужен пакет выживания. Link to package
library(survival)
Допустим, успех происходит, если пассажир получает больше, чем 8125 в 1978 году
matched.data$success <- with(matched.data, ifelse(re78 > 8125, 1, 0))
output <- clogit(success ~ treat, matched.data, method = 'efron')
summary(output)
таким образом мы видим, что OR для обработанного (лакомство = 1) 1,495
Мы его можно сохранить следующим образом:
iteration.1 <- exp(output$coefficients[1])
Теперь мы читаем из соответствующего пакета (link), что для replace = FALSE
Обратите внимание, что если FALSE, , порядок совпадений обычно имеет значение. Матчи будут найдены в же порядке, как данные сортируются
Так что я хочу сделать, создать функцию, которая будет для n
раз
- рандомизации в Лалонде $ ID заказа
- Запустите процесс согласования
- запустить алгоритм clogit
- сохранить вывод каждый раз
exp(output$coefficients[1])
- Постройте OR (
exp(output$coefficients[1])
) для каждого n
Is essenece Я хочу ввести перестановки в анализ. Как это может быть сделано, когда позволяет сказать, п = 5
\ replicate \ отлично работает, и мне нравится, как вы использовали \ sample (nrow (lalonde)) \ – lukeg