當在lm中指定交互時,R默認包含主效應,沒有選項可以禁止它們。這通常是適當和方便的,但是在某些情況下(估計者內部,LHS變量比率等)有些情況下這是不恰當的。「向量化」R中的這個for循環? (抑制lm中的交互主效應)
我已經得到了這個代碼,它可以將一個對數轉換變量適用於響應變量,並且獨立於數據的子集內。
這裏是一個傻尚未再現的例子:
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 = something]/Y [X = 0 ]。
但是,如果我指定
m = lm(Y~X*as.factor(id)-1)
有抑制id
主要影響的手段。我需要在一個迭代算法運行這個循環數百次,並作爲一個循環是遠遠太慢了
去掉這段代碼的另一個好處是它可以更方便地得到預測間隔
(請注意,我不需要剔除主要效果和攔截是否不恰當 - 它通常是這樣,但我可以保證它不在這種情況下)。
在此先感謝您的任何想法!
Downvote?沒有評論?如果誰冷靜下來,我會很感激,如果能證明我爲什麼不在某個地方,我會爲他提供合理的理由。 – 2013-05-03 02:04:16
雖然我不是downvoter,我可以猜測。你的代碼是不可複製的,另外循環中的步驟也沒有很好的解釋。很難跟蹤你在那裏做什麼,所以不可能確定它是否可以被矢量化,或者是否適合這樣做。請清理它,否則它可能會因爲本地化而被關閉。 – 2013-05-03 02:13:40
爲了解決問題#1,我認爲你最好在你的數據框上使用'split'之類的東西,然後用'data $ expid'拆分,然後用'lapply'或'sapply'拆分每個子集的計算結果。這將刪除'for'循環。我不能評論這個模型是否適合用於這種方法,但是從編碼的角度來看,這會讓你在那裏。 – thelatemail 2013-05-03 02:24:21