当在lm中指定交互时,R默认包含主效果,没有选项来抑制它们。这通常是合适和方便的,但在某些情况下(在估算器中,比率LHS变量等)这是不合适的。
我已经有了这个代码,它将一个对数转换后的变量与响应变量相匹配,独立于数据的子集中。
这是一个愚蠢但又可重复的例子:
id = as.factor(c(1,2,2,3,3,3,4,4,4,4,5,5,5,5,6,7,7,8,8,8,9,9,9,9,10))
x = rexp(length(id))
y = rnorm(length(id))
logx = log(x)
data = data.frame(id,y,logx)
for (i in data$id){
sub = subset(data, id==i) #This splits the data by id
m = lm(y~logx-1,data=sub) #This gives me the linear (log) fit for one of my id's
sub$x.tilde = log(1+3)*m$coef #This linearizes it and gives me the expected value for x=3
data$x.tilde[data$id==i] = sub$x.tilde #This puts it back into the main dataset
data$tildecoeff[data$id==i] = m$coef #This saves the coefficient (I use it elsewhere for plotting)
}
我想要适合以下模型:
Y = B(X * id)+ e
没有拦截且没有id
的主要影响。从循环中可以看出,当X = 3时,我对Y的期望感兴趣,通过原点约束拟合(因为Y是(记录)Y的比率[X =某事] / Y [X = 0 ]
但如果我指定
m = lm(Y~X*as.factor(id)-1)
没有办法压制id
的主要影响。我需要在迭代算法中运行这个循环几百次,而作为一个循环,它太慢了。
解码此代码的另一个优点是获得预测间隔会更方便。
(拜托,我不需要关于如何忽略主要效果和拦截是不正确的虔诚评论 - 它通常是,但我可以保证它不在这种情况下。)
提前感谢任何想法!
答案 0 :(得分:1)