2015-07-11 75 views
-1

我正在使用函數來計算迴歸。我需要殘差與另一個變量的關係。 這是因爲我多次更改構面網格。使用迴歸殘差計算R中的另一個迴歸(內函數)

這是我的代碼:

modelregression = function(file) { 
mod2 = lm(y ~ x,data=file) 
mod = lm(mod2$residuals ~ anotherX,data=file) 
mod_sum = summary(mod) 
formula = sprintf("y= %.3f %+.3f*x", 
       coef(mod)[1], coef(mod)[2]) 
r = mod_sum$r.squared 
r2 = sprintf("r2= %.3f", r) 
x = cor.test(~mod2$residuals + anotherX,data=file) 
r0 = sprintf("r= %.3f", x[4]) 
p1 = pf(mod_sum$fstatistic[1],mod_sum$fstatistic[2],mod_sum$fstatistic[3],lower.tail=F) 
p =sprintf("p = %.3f", p1) 
n0 = length(mod_sum$residual) 
n1 = sprintf("N = %.f", n0) 
data.frame(formula=formula, r=r0,r2=r2, p=p,n=n1, stringsAsFactors=FALSE) 
} 

modelregression_math = ddply(file, c("database","level"), modelregression) 

的運行沒有任何問題,但所有係數均爲零。我怎樣才能解決這個問題?

回答

0

您需要殘差位於由data=指定的「內部」。 因此,插入像follwing線運行的第二個迴歸前:

file <- cbind(mod2$residuals, file) 

然而,這隻會工作,如果在file線將匹配線的用途是什麼第一次迴歸的順序和數量。如果你有缺失值,它變得更加複雜:使用mod2$model得到確切的迴歸(也以正確的順序)中使用的數據,並結合起來,與殘差:

data_with_residuals <- cbind(mod2$model, mod2$residuals) 
mod = lm(residuals ~ anotherX, data=data_with_residuals) 

(或方法與merge()可能做的伎倆。)

+0

因爲我這樣做(cbind)關閉功能好吧! 但在函數內給出相同的錯誤! 代碼 modelregression =函數(文件){ MOD2 = LM(Y〜X,數據=文件) 文件< - cbind(MOD2 $殘差,文件) MOD = LM(MOD2 $殘差〜anotherX,數據=文件) –

+0

在迴歸公式中省略「mod2 $」,所以從文件中獲取變量「殘差」。 – Helix123

+0

這種方法可行,但迴歸值計算不正確。 這是因爲網格的每個方面都應該有其特定的殘差 –