我想使用R
中的统计模型复制每组平均值的简单计算结果。
以下是我处理的数据:
EXIST DATE VAR1 VAR2
1 0 10/2015 6 4
2 0 01/2016 6 4
3 0 01/2014 5 4
4 1 05/2015 5 4
5 0 11/2015 6 4
VAR1
,VAR2
为整数1:8(组/或级别),EXIST
=(0,1)
我只计算每个变量的平均值:
ag <- data.frame(as.matrix(aggregate(EXIST ~ VAR1 + VAR2,
data = dat, function(x) c(mean = mean(x)))))
现在我想用模型(例如lm
或glm
等)复制它,并获得与aggregate
相同的结果。
因此我会得到16个值的比率(VAR1 1:8和VAR 1:8)。
这是我的尝试:
tmp <- with(d,
by(d, VAR1,
function(x) lm(EXIST ~ VAR2 + VAR1 , data = dat)))
我被告知该模型应为lm(EXIST ~ VAR1 * VAR2, data=dat)
那么我如何复制aggregate function
来计算每个变量因子的平均值? (为什么要问?好吧,我想知道如何用模型做)。
答案 0 :(得分:1)
你需要更努力地让R分别处理每个组:相关的公式是VAR1:VAR2-1
(仅包括交互:
,而不是主效应:VAR1*VAR2
对应到VAR1+VAR2+VAR1:VAR2
;使用-1
删除模型中的拦截。
示例数据:
set.seed(101)
dd <- data.frame(EXIST=rbinom(1000,size=1,prob=0.3),
VAR1=factor(sample(1:8,size=1000,replace=TRUE)),
VAR2=factor(sample(1:8,size=1000,replace=TRUE)))
请注意,您需要将分组变量作为因子。
拟合模型和提取系数:
head(coef(lm(EXIST~VAR1:VAR2-1,data=dd)))
## VAR11:VAR21 VAR12:VAR21 VAR13:VAR21 VAR14:VAR21 VAR15:VAR21 VAR16:VAR21
## 0.2666667 0.2307692 0.5714286 0.1176471 0.3846154 0.1333333
检查第一组:
mean(subset(dd,VAR1=="1" & VAR2=="1")$EXIST) ## 0.266667