Делаем петлю в R - PullRequest
       3

Делаем петлю в R

1 голос
/ 03 мая 2011

Мне нужно сделать цикл (чего я раньше не делал) и, учитывая наблюдения (столбец 1), мне нужно выяснить (i), какие из комбинаций по переменным (s1-s5) являются значимыми ( P <0,05), (ii) сохранить только те комбинации, которые значимы для переменных, с соответствующими значениями p. Я подумал, что это будет хорошим способом узнать, как сделать цикл в R. Исходные данные большие и похожи на эту: </p>

ob <- c(120,100,85,56,87)
s1 <- c("ab","aa","ab","aa","bb")
s2 <- c("aa","aa","ab","bb","bb")
s3 <- c("bb","ab","aa","ab","ab")
s4 <- c("aa","ab","bb","ab","aa")
s5 <- c("bb","ab","aa","ab","bb")
dset <- data.frame(ob,s1,s2,s3,s4,s5)

DSET

ob s1 s2 s3 s4 s5
120 ab aa bb aa bb
100 aa aa ab ab ab
85 ab ab aa bb aa
56 aa bb ab ab ab
87 bb bb ab aa bb

Любая помощь будет оценена!

Баз

1 Ответ

1 голос
/ 03 мая 2011

Может быть, я что-то упускаю, но я не понимаю, как имеет смысл добавлять столбец p-значений в ваш data.frame без транспонирования data.frame. Как узнать, какое значение p соответствует какой независимой переменной, если они находятся в разных столбцах? Вот один из подходов, использующих цикл for для запуска anova для каждой независимой переменной и сохранения их в новом векторе:

#Use grep to return the columns that match the pattern "s". This returns their column index. 
#This is what we'll use in the for loop
vars <- grep("s", names(dset))

#Create a new vector to hold the anova results and name it
dat <- vector("integer", length = ncol(dset))
names(dat) <- colnames(dset)

#Run for loop, assigning the p-value from the anova to the proper spot in the vector we made
for (var in vars) {
  dat[var] <- anova(lm(ob ~ dset[, var], data = dset))$"Pr(>F)"[1]
}

Все вышеперечисленное даст:

> dat
       ob        s1        s2        s3        s4        s5 
0.0000000 0.7219532 0.3108441 0.4668372 0.6908916 0.6908916

Я оставлю на ваше усмотрение то, как вы хотите связать это обратно с оригинальным data.frame.

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