Мне было интересно, может ли кто-нибудь помочь мне в этой, казалось бы, легкой задаче. Я использую nlminb для проведения оптимизации и вычисления некоторой статистики по индексу. Вот пример из справки nlminb.Применение nlminb к подмножествам данных (по индексу или метке) и сохранение того, что программа возвращает в качестве нового фрейма данных.
> x <- rnbinom(100, mu = 10, size = 10)
> hdev <- function(par) {
+ -sum(dnbinom(x, mu = par[1], size = par[2], log = TRUE))
+ }
> nlminb(c(9, 12), hdev)
$par
[1] 9.730000 5.954936
$objective
[1] 297.2074
$convergence
[1] 0
$message
[1] "relative convergence (4)"
$iterations
[1] 10
$evaluations
function gradient
12 27
Пусть я генерировать случайные переменные x, y
и z
, где z
выступает в качестве индекса (от 1 до 3).
> x <- rnbinom(100, mu = 10, size = 10)
> y <- rnbinom(100, mu = 10, size = 10)
> z <- rep(1:3, length=100)
> A <- cbind(x,y,z)
> hdev <- function(par) {
+ -sum(dnbinom(x+y, mu = par[1], size = par[2], log = TRUE))}
1) Как я могу применить nlminb(c(9, 12), hdev)
к набору данных по индексу z
? Другими словами, я хотел бы вычислить nlminb(c(9, 12), hdev)
для z=1, z=2
и z=3
отдельно. Я попробовал by(A, z, function(A) nlminb(c(9,12), hdev))
и sparseby(A, z, function(A) nlminb(c(9,12), hdev))
, но они возвращают точно такие же значения для каждого значения z
.
2) Я хотел бы превратить каждый вывод в новый кадр данных, чтобы он стал матрицей 3X2.
[1] Z1_ANSWER_1 Z1_ANSWER_2
[2] Z2_ANSWER_1 Z2_ANSWER_2
[3] Z3_ANSWER_1 Z3_ANSWER_2
С nlminb возвращает сводку статистики, мне нужно использовать CASEZ1<-nlminb$par, CASEZ2<-nlminb$par, CASEZ3<-nlminb$par
, а затем использовать cbind, чтобы объединить их. Тем не менее, я хотел бы автоматизировать этот процесс, поскольку реальные данные, над которыми я работаю, имеют намного больше категорий, чем z
, представленные здесь.
Если я не прояснился, сообщите мне. Я посмотрю, смогу ли я воспроизвести фактический набор данных и функции, над которыми я работаю (у меня их нет на этом компьютере).
спасибо, что заранее.
Волшебно, это работает! Позвольте мне внимательно посмотреть на plyr. Большое спасибо! – 2010-03-03 09:46:42