R 多因素分组数据框架的回归
我正在编写回归脚本。 我有一个data.frame,大约有130列,其中一列(我们称之为X列)需要对所有其他100个数值列进行回归 在计算回归之前,我需要按4个因素对数据进行分组:R 多因素分组数据框架的回归,r,sorting,statistics,dataframe,regression,R,Sorting,Statistics,Dataframe,Regression,我正在编写回归脚本。 我有一个data.frame,大约有130列,其中一列(我们称之为X列)需要对所有其他100个数值列进行回归 在计算回归之前,我需要按4个因素对数据进行分组:myDat$Recipe、myDat$Step、myDat$Stage、和myDat$Prod,同时仍保留为回归附加的其他~100列和行数据。然后我需要对每列~X列进行回归,并打印出带有列名的R^2值。这是我到目前为止尝试过的,但它变得过于复杂,我知道一定有更好的方法 rm(list=ls()) myDat <
myDat$Recipe
、myDat$Step
、myDat$Stage
、和myDat$Prod
,同时仍保留为回归附加的其他~100列和行数据。然后我需要对每列~X列进行回归,并打印出带有列名的R^2值。这是我到目前为止尝试过的,但它变得过于复杂,我知道一定有更好的方法
rm(list=ls())
myDat <- read.csv(file="C:/Users/Documents/myDat.csv", header=TRUE, sep=",")
for(j in myDat$Recipe)
{
myDatj <- subset(myDat, myDat$Recipe == j)
for(k in myDatj$Step)
{
myDatk <- subset(myDatj, myDatj$Step == k)
for(i in myDatk$Stage)
{
myDati <- subset(myDatk, myDatk$Stage == i)
for(m in myDati$Prod)
{
myDatm <- subset(myDati, myDati$Prod == m)
if(is.numeric(myDatm[3,i]))
{
fit <- lm(myDatk[,i] ~ X, data=myDatm)
rsq <- summary(fit)$r.squared
{
writeLines(paste(rsq,i,"\n"))
}
}
}
}
}
}
rm(list=ls())
myDat您可以通过组合、和我的软件包来实现这一点(您可以使用install.packages
安装它们)。首先,需要将所有数值列收集到一个列中:
library(dplyr)
library(tidyr)
tidied <- myDat %>%
gather(column, value, -X, -Recipe, -Step, -Stage, -Prod)
库(dplyr)
图书馆(tidyr)
整理%
聚集(列、值、-X、-Recipe、-Step、-Stage、-Prod)
要了解它的作用,您可以仔细阅读。(这假设除X、配方、步骤、阶段和产品外的所有列都是数字,因此应在回归中预测。如果不是这样,则需要事先删除它们。如果需要更定制的解决方案,则需要生成问题的可复制示例)
然后执行每个回归,同时按列和四个分组变量分组
library(broom)
regressions <- tidied %>%
group_by(column, Recipe, Step, Stage, Prod) %>%
do(mod = lm(value ~ X))
glances <- regressions %>% glance(mod)
库(扫帚)
回归%
分组依据(列、配方、步骤、阶段、产品)%>%
do(mod=lm(值~X))
浏览百分比浏览(mod)
产生的扫视
数据框将为列、配方、步骤、阶段和产品的每个组合有一行,以及包含每个模型的r平方的r.squared
列。(它还将包含adj.r.squared
,以及其他列,如F-test p-value:有关更多信息,请参阅)。运行coefs%tidy(mod)
可能对您也很有用,因为它将从每次回归中获得系数估计值和p值
类似的用例在中有描述,在的第3.1节中也有介绍。。您在使用浏览线时是否遇到过以下错误?“数据帧中的错误(r.squared=r.squared,adj.r.squared=adj.r.squared,:object‘fstatistic’not found)”在s3对象上进行了协调和整洁的工作,只是没有一瞥。@JacobOdom我没有遇到过这个问题。是否可能创建一个可复制的示例,并将其作为一个新问题问出来?请在你找到时打电话给我。刚刚发布了它!