我想为一组静态针对多个不同的因变量和输出残差到一个新文件,看起来像自变量的运行多元回归模型...如何使用R在单个新数据框中输出来自多个模型的残差?
SampleID site_residual1 site_residual2 site_residual3
F001 0.003 0.988 0.776
F001 0.002 0.876 0.665
F002 0.134 0.234 0.786
...
我一直在使用下面的代码得到一个单一的残留输出,但是在实现一个将贯穿我所有站点的循环的过程中一直没有成功。
infile = sprintf("/path/siteinput.txt.gz")
infile的样子......
SampleID site1 site2 site3 etc...
F001 0.003 0.988 0.776 etc...
F001 0.002 0.876 0.665 etc...
F002 0.134 0.234 0.786 etc...
...
...
pheno = read.table("/path/pheno_covar.txt", header=T, sep="\t")
苯氧看起来像......
SampleID indep1 indep2 indep3 chip1 etc...
F001 0.003 0.988 0.776 2 etc...
F001 0.002 0.876 0.665 2 etc...
F002 0.134 0.234 0.786 1 etc...
...
...
residfile = sprintf("/path/test_resid_out.txt")
library(lme4)
beta = read.table(infile, header=T, sep="\t")
merged = merge(beta, pheno, by="SampleID")
site<-merged$site1
chip <- as.factor(merged$chip1)
model1 <- lmer (formula= site ~ indep1 +indep2 + indep3 + (1|chip), data=merged)
print(summary(model1))
print(resid(model1))
site1_resid = resid(model1, na.action=na.exclude)
residout<-(data.frame(SampleID, site1_resid))
write.table(residout, file=residfile, sep="\t", col.names=TRUE, row.names=FALSE, quote=FALSE)
而且我的输出看起来像......
SampleID site1_resid
F001 0.0110177454696274
F002 0.0923483180517723
F003 0.103686493563883
F004 -0.106193404096636
F005 -0.124621172636435
....
...
所以,我真的找一种方式来为我的“INFILE”每个站点运行MODEL1和输出都残留到一个新文件中。另外,我希望列标题包含“网站”的原始名称。我确实有一些缺失的信息(所有协变都是完整的,但某些网站缺少某些ID)。
任何意见,将不胜感激。
也许看看'broom'包是为这种情况设计的:https:// cran。 r-project.org/web/packages/broom/vignettes/broom.html –
谢谢您的建议。扫帚看起来对于向原始数据框添加残差看起来很有用,但我真的很有兴趣为每个结果变量创建一个具有残差列的新数据框。我在Broom包中没有看到这个功能,但也许我错过了这个地方? – JustGenetics