运行 按类别回归,以类别平均值的 +/- 10% 为界
Run regression by category, bounded by +/- 10% of the category average
我有一个包含多个类别的数据集。我想 运行 对每个类别进行线性回归,而不必将数据子集放入每个类别的新 dfs 中。我是这样做的:
category = c(rep(c("a","b","c"),100))
x = (rep(1:5,60))
y = rnorm(300)*5
df = data.frame(category,x,y)
models = dlply(df, "category", function(dflm)
lm(y ~ x, data = dflm))
lmcoefs = ldply(models, coef)
在 lmcoefs 中,我现在存储了每个类别的系数。
但是,我想运行这些回归仅在每个类别平均值的 +/- 50% 以内。因此,如果类别 A 的平均 y 值为 10,我只想 运行 类别 A 的 y 值 5 和 15 之间的回归。与类别 B 和 C 相同。
有没有一种方法可以在不拆分数据集和 运行 单独回归的情况下做到这一点?
谢谢,
唐
我会这样做,但也许有更短的方法。
数据
category = c(rep(c("a","b","c"),100))
x = (rep(1:5,60))
y = rnorm(300,10,3) # I made these positive values
df = data.frame(category,x,y)
基于您已有的脚本
ddply(df, "category", function(d,perc=0.5){
m=mean(d$y)
range.min=m*(1-perc)
range.max=m*(1+perc)
d=d[d$y< range.max & d$y> range.min ,]
coef(lm(y ~ x, data = d))
})
#result
category (Intercept) x
1 a 10.04912 -0.042292670
2 b 10.37061 -0.001489721
3 c 10.04206 0.012238932
与其先使用 dlply 再使用 ldply,不如直接使用 ddply 更轻松地完成所有操作。
我有一个包含多个类别的数据集。我想 运行 对每个类别进行线性回归,而不必将数据子集放入每个类别的新 dfs 中。我是这样做的:
category = c(rep(c("a","b","c"),100))
x = (rep(1:5,60))
y = rnorm(300)*5
df = data.frame(category,x,y)
models = dlply(df, "category", function(dflm)
lm(y ~ x, data = dflm))
lmcoefs = ldply(models, coef)
在 lmcoefs 中,我现在存储了每个类别的系数。
但是,我想运行这些回归仅在每个类别平均值的 +/- 50% 以内。因此,如果类别 A 的平均 y 值为 10,我只想 运行 类别 A 的 y 值 5 和 15 之间的回归。与类别 B 和 C 相同。
有没有一种方法可以在不拆分数据集和 运行 单独回归的情况下做到这一点?
谢谢, 唐
我会这样做,但也许有更短的方法。
数据
category = c(rep(c("a","b","c"),100))
x = (rep(1:5,60))
y = rnorm(300,10,3) # I made these positive values
df = data.frame(category,x,y)
基于您已有的脚本
ddply(df, "category", function(d,perc=0.5){
m=mean(d$y)
range.min=m*(1-perc)
range.max=m*(1+perc)
d=d[d$y< range.max & d$y> range.min ,]
coef(lm(y ~ x, data = d))
})
#result
category (Intercept) x
1 a 10.04912 -0.042292670
2 b 10.37061 -0.001489721
3 c 10.04206 0.012238932
与其先使用 dlply 再使用 ldply,不如直接使用 ddply 更轻松地完成所有操作。