2015-07-11 121 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

这种方法可行,但回归值计算不正确。 这是因为网格的每个方面都应该有其特定的残差 –