使用预测进行更复杂的预测

时间:2015-06-18 23:04:21

标签: r data.table glm predict

我是否更容易使用predict从更复杂的回归框架中获取预测。

举例来说:

NN<-1e4
data<-data.table(trt=sample(paste("Treatment",1:3),NN,T),
                 qtl=sample(paste0("Q",1:2),NN,T),
                 grp=sample(4,NN,T),
                 cat=sample(paste("Category",LETTERS[1:3]),NN,T),
                 val=rnorm(NN,10)^2)

data[,out:=140+5*(trt=="Treatment 2")+3*(trt=="Treatment 3")+
       8*(qtl=="Q2")-4*(trt=="Treatment 2"&qtl=="Q2")+
       7*(trt=="Treatment 3"&qtl=="Q2")-4*(grp==2)+
       6*(grp==3)-10*(grp==4)-6*(cat=="Category B")+
       2*(cat=="Category C")-1.8*val+rnorm(NN,10)>0]

llog<-glm(out~trt*qtl+as.factor(grp)+cat+val,data=data,family=binomial(link="logit"))

现在,我希望通过outtrt qtl = 1 概率退出此预测>,所有其他预测因子保持样本平均值

我想说这是一个3 x 2矩阵(或表等)的行,其中行对应trt,列为qtl

这尤其复杂,因为存在因子变量 - &#34;保持在样本平均值&#34;意味着我们需要插入每组观察的百分比,而且我不确定如何以干净的方式这样做。

当然,实现这一目标的很长的方法如下:

1)为&#34;其他预测因子设置一个样本平均值向量&#34;:

oth.avg<-c(1,unlist(data[,lapply(list(grp==2,grp==3,grp==4,cat=="Category B",
                                  cat=="Category C",val),mean)]))

2)乘以相应的系数

x.beta.oth<-sum(llog$coefficients[c(1,5:10)]*oth.avg)

3)设置&#34; matrices&#34;适用于trtqtltrt x qtl条款:      (我说&#34; matrices&#34;因为它们是从概念上得出的       基础矩阵,但指定它们更简洁       在一个方面)

main.coef<-llog$coefficients[c(2:4,11:12)]
trt.mat<-rep(c(0,main.coef[1:2]),2)
qtl.mat<-rep(c(0,main.coef[3]),each=3)
tq.mat<-c(rep(0,3),rbind(rep(0,1),matrix(main.coef[4:5],ncol=1)))

(在这个小例子中指定它们是过分的,但是当表格是4x4时,简约性开始显示出来。

4)添加所有内容以获得预测的潜在指数

lat.pred<-trt.mat+qtl.mat+tq.mat+x.beta.oth

5)最后,通过逻辑公式将这些变换为预测概率:p /(1 + p)

pred.prob<-matrix(exp(lat.pred)/(1+exp(lat.pred)),ncol=2,
              dimnames=list(paste("Treatment",1:3),c("Q1","Q2")))

                      Q1           Q2
Treatment 1 3.515452e-28 6.000161e-22
Treatment 2 1.989195e-24 1.519577e-27
Treatment 3 3.380796e-26 1.633097e-20

我错过了什么吗?我不知道我可以在predict中输入什么来获得此输出...

0 个答案:

没有答案