假设我需要在回归中估计系数a和b:
y=a*x+b*z+c
我提前知道y的范围总是y>=0和y<=x,但是回归模型有时会产生超出此范围的y值。
样本数据:
mydata<-data.frame(y=c(0,1,3,4,9,11),x=c(1,3,4,7,10,11),z=c(1,1,1,9,6,7))
round(predict(lm(y~x+z,data=mydata)),2)
1 2 3 4 5 6
-0.87 1.79 3.12 4.30 9.34 10.32
第一个预测值为<0。
我尝试了没有截距的模型:所有的预测值都>0,但是y的第三个预测值>x(4.03>3)
round(predict(lm(y~x+z-1,data=mydata)),2)
1 2 3 4 5 6
0.76 2.94 4.03 4.67 8.92 9.68
我也考虑过对比例y/x进行建模,而不是只对y进行建模:
mydata$y2x<-mydata$y/mydata$x
round(predict(lm(y2x~x+z,data=mydata)),2)
1 2 3 4 5 6
0.15 0.39 0.50 0.49 0.97 1.04
round(predict(lm(y2x~x+z-1,data=mydata)),2)
1 2 3 4 5 6
0.08 0.33 0.46 0.47 0.99 1.07
但是现在第六个预测值>1,但比例应该在[0,1]范围内。
我还尝试了使用带有offset
选项的glm
方法: R中用于速率变量的回归和http://en.wikipedia.org/wiki/Poisson_regression#.22Exposure.22_and_offset,
但这并不成功。
请注意,在我的数据中,依赖变量proportion y/x既具有零膨胀又具有一膨胀。
有什么适合在R中构建模型的方法吗('glm'、'lm')?