如何解决如何同时拟合线性和二次 lm 拟合到数据的不同部分?
我有因变量 x
、独立变量 y
和组成员身份 idx
。有
- 对于
x
的y
和idx==1
之间的线性关系 - 当
idx==2
时的二次关系。
对于这两个实例,我依次拟合了仅截距模型,然后是线性模型,最后是二次模型。在此之后,我使用 anova
来比较它们的配合。
idx_tmp = populationdata$idx==1
fitdata <- populationdata[idx_tmp,]
fitdata <- within(fitdata,poly_x <- poly(x,2)) # define orthogonal polynomial
model.intercept <- lm(y ~ 1,data=fitdata) # intercept-only
model.poly1 <- update(model.intercept,.~. + poly_x[,1]) # test linear polynomial
model.poly2 <- update(model.poly1,2]) # test quadratic polynomial
stat <- anova(model.intercept,model.poly1,model.poly2) # model comparison
现在,我想在一个模型中完成所有这些,而不是独立为两个组执行此操作。为了测试 idx
所指示的子群是否确实属于具有不同形状函数的不同分布,我需要同时拟合一个线性函数到 idx==1
和一个二次函数到 idx==2
并测试这是否拟合优于对整个总体(跨 idx
)的线性或二次拟合。
所以,我想(按顺序或不)适合(适合整个人群)
- 线性模型
- 二次模型
- 线性拟合
idx==1
和二次函数拟合idx==2
的混合模型
为此,我创建了另一个变量 mixedpoly_x
,它具有 poly_x[,1]
的 idx==1
(线性)值和 poly_x[,2]
(二次)的值 { {1}}。然后我用这个参数更新了模型拟合。
idx==2
这是最好的方法吗?这甚至是有效的做法吗?
似乎通过这种方式预测变量将高度共线,并且由于线性和二次预测变量已经解释了很多方差,因此最终的 # define polynomial predictors
populationdata <- within(populationdata,2)) # define orthogonal polynomial
# define mixed-poly predictor
idx_tmp = populationdata$idx==2
x = populationdata$poly_x[,1]
x[idx_tmp] = populationdata$poly_x[idx_tmp,2]
populationdata$mixedpoly_x <- x
# model fits
model.intercept <- lm(y ~ 1,data=populationdata) # intercept-only
model.poly1 <- update(model.intercept,2]) # test quadratic polynomial
model.mixedpoly <- update(model.poly2,.~. + mixedpoly_x)
# model comparison
stat <- anova(model.intercept,model.poly2,model.mixedpoly)
预测变量不太可能增加太多。非常感谢任何建议!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。