2014-10-14 4 views
0

Позвольте мне описать мою проблему в упрощенном примеретаблицы и доверительные интервалы в чрезвычайных

У меня есть таблица сопряженности

datatable<-array(c(1,2,3,4,5,6,dim=c(3,2)) 
datatable<-cbind(datatable,rowSums(datatable)) 
datatable<-rbind(datatable,colSums(datatable)) 

Здесь т = 3, п = 2 Это (т + 1) x (n + 1) = таблица 4x3. Теперь я хочу новый массив mxn, где ij'th вход - это доверительный интервал (список размером 2, если хотите) для datatable оценки [i, j]. Ниже приведена функция, которая вычисляет интервал для оценки DataTable [I, J] из аргументов < -datatable [I, J] и б < -datatable [я, п + 1]

CIfunction<-function(a,b) c(-1,1)+a*b 

Я надеюсь это не слишком грязно, я не мог придумать более простой пример.

Как создать такой стол элегантным способом? В реальном примере это функция, которая должна принимать произвольные таблицы непредвиденных обстоятельств и возвращать соответствующую таблицу CI.

Я уже нашел способ, используя двойную петлю над i соответственно. j, но он действительно пахнет чем-то, что можно сделать элегантным способом с использованием mapply/outer или like.

+0

В первой строке отсутствует закрывающая скобка. Лучшее объяснение поможет. Если у вас есть for-loop, который делает то, что вы ожидаете, вы должны отредактировать свой вопрос, чтобы включить его. («Функция доверительного интервала» кажется довольно произвольной, и неясно, какие аргументы вы намерены передать ей). –

ответ

0

Благодарим за ваши комментарии и ответы. Я столкнулся с проблемой, обобщающей (элегантный) метод, предоставляемый ilir, произвольным функциям CI. Я закончил тем, что сделал двойной цикл, упомянутый выше. Мое решение вышеуказанной проблемы было бы чем-то вроде

CItable<-function(datatable,CIfunction) 
{ 
m<-dim(datatable)[1]-1 
n<-dim(datatable)[2]-1 

CItable<-array(NA,dim=c(m,2*n)) 
for(i in 1:m) 
    { 
    for(j in 1:n) 
    { 
     tempint<-CIfunction(datatable[i,j],datatable[i,n+1]) 
     CItable[i,2*j]<-tempint[2] 
     CItable[i,2*j-1]<-tempint[1] 
    } 

    } 
return(CItable) 
} 
0

Код ниже включает в себя некоторые обманки, поскольку он полагается на то, как R перерабатывает векторы (under what circumstances does R recycle?). array и matrix объекты - это просто сложенные векторы (сохраненные по столбцам). Это не трудно придумать трюки, как это, как только вы понять поведение

datatable <- array (1:6, dim=c(3,2)) 
datatable <-cbind(datatable,rowSums(datatable)) 
datatable <-rbind(datatable,colSums(datatable)) 

# last column recycled as necessary 
lower <- -datatable[1:3, 1:2] * datatable[1:3, 3] 
upper <- -lower 
CIlist <- list(lower, upper) 

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

Смежные вопросы