【问题标题】:Use residuals of regression to calculate another regression (inside function) in R使用回归的残差计算 R 中的另一个回归(内部函数)
【发布时间】:2015-07-11 06:48:21
【问题描述】:

我正在使用一个函数来计算回归。我需要残差与另一个变量相关。 这是因为我多次更改构面网格。

这是我的代码:

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)

它运行没有任何问题,但所有系数都为零。我该如何解决这个问题?

【问题讨论】:

    标签: r function regression


    【解决方案1】:

    您需要将残差驻留在data= 指定的“内部”。 因此,在运行第二个回归之前插入如下一行:

    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() 的方法可以解决问题。)

    【讨论】:

    • 我做的时候(cbind)关闭功能就好了!但是在函数内给出了同样的错误!代码模型回归 = 函数(文件){ mod2 = lm (y ~ x, data = file) file
    • 在回归公式中省略“mod2$”,因此取文件中的变量“residuals”。
    • 这种方式可行,但回归值计算不正确。这是因为对于网格的每个方面都应该有其特定的残差
    猜你喜欢
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-30
    • 2011-10-16
    相关资源
    最近更新 更多