使用回归残差计算 R 中的另一个回归(内部函数)
Use residuals of regression to calculate another regression (inside function) in 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)
它运行没有任何问题,但所有系数都为零。我该如何解决这个问题?
您需要残差驻留在 "inside" 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()
的方法可以解决问题。)
我正在使用一个函数来计算回归。我需要残差与另一个变量有关系。 这是因为我多次更改小平面网格。
这是我的代码:
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)
它运行没有任何问题,但所有系数都为零。我该如何解决这个问题?
您需要残差驻留在 "inside" 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()
的方法可以解决问题。)