使用此数据集:
并建立在这个问题上:
How to fit predefined offsets to models containing categorical variables in R
为了测试模型在另一个测试数据集上的有效性,我想从下面得到拟合模型:
ModelA<-lm(Response1~Categorical)
并使其符合关系B:
Response2~Categorical
每种情况下的响应变量都相同。
以上链接提供了如何为分类变量的级别拟合偏移量的解决方案,对于我的数据将涉及:
# compute the offsets for each level of Categorical from the following model:
m<-lm(Response1~Categorical,data=dat)
summary(m)
#Create vector of offsets for variable
o <- with(dat, ifelse(Categorical == "Y", 0.25773, -0.25773))
#run second model with offsets from first model
m1<-lm(dat$Response2 ~ 1 + offset(o))
然而,当我检查这是否有效时,通过为关系指定这些已知的偏移量,然后使用相同的模型检查它而不指定偏移量,因此:
# run model using Response1 to get values for slope offsets
m<-lm(Response1 ~ Categorical,data=dat)
summary(m)
# Specify offsets from this in the model of the same data (i.e. still using Response1)
o <- with(dat, ifelse(Categorical == "Y", 0.25773, -0.25773))
m1<-lm(dat$Response1 ~ 1 + offset(o))
#check the residuals from m and m2 are identical
m$residuals
m2$residuals
残差不同,表明该方法不起作用。
我很想知道:
1)有没有人有任何其他想法想法如何指定分类变量的水平偏移? 2)除了级别的偏移之外,您能否就如何为这种变量的截距项指定和偏移提供建议?
后者对于连续变量来说足够简单,因为只有一个截距:
# run model using Response1 to get values for intercept and slope offsets
m<-lm(Response1~log(Continuous),data=dat)
summary(m)
# Specify offsets for the intercept and slope for the model involving the second response variable
m <- lm(Response2 ~ 0+offset(rep(0.22483, nrow(dat))) + offset( -0.07115*log(Continuous)))
但我不清楚这会如何转移到分类变量。
非常感谢。
答案 0 :(得分:1)
m<-lm(Response1 ~ Categorical,data=dat)
summary(m)
o <- with(dat, ifelse(Categorical == "Y", 0.25773, 0))
m1<-lm(dat$Response1 ~ 1 + offset(o))
abs( m$residuals - m1$residuals) < 0.00001
1 2 3 4 5 6 7 8 9 10 11 12 13 14
TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
15 16 17 18 19 20 21 22 23 24 25 26 27 28
TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
29 30 31 32 33 34 35 36 37 38 39 40 41 42
TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
43 44
TRUE TRUE
与您的方法相反:
o <- with(dat, ifelse(Categorical == "Y", 0.25773, -0.25773))
这给了所有的假。看看:
?model.matrix