【发布时间】:2016-11-23 13:30:15
【问题描述】:
假设我有数据(t,y),我期望线性依赖y(t)。此外,每个观察都存在属性par1, par2, par3。是否有算法或技术来决定(一个或两个或所有参数)是否与拟合相关?我尝试了leaps::regsubsets(y ~ t + par1 + par2 + par3, data = mydata, nbest = 10),但无法获得最合适的公式。
最终结果如果被绘制应该如下所示。数据见下文。
- 添加
par1和par2最合适 - 模型是
y_i = a_i * t_i + b_i,给定a_i和b_i
可重现的例子:
t <- seq(0,10, length.out = 1000) # large sample of x values
# Create 3 linear equations of the form y_i = a*t_i + b
a <- c(1, 0.3, 0.2) # slope
b <- c(-0.5, 0.5, 0.1) # offset
# create t_i, y_ti and y_i (including noise)
d <- list()
y <- list()
y_t <- list()
for (i in 1:3) {
set.seed(33*i)
d[[i]] <- sort(sample(t, 50, replace = F))
set.seed(33*i)
noise <- rnorm(10)
y[[i]] <- a[i]*d[[i]] + b[i] + noise
y_t[[i]] <- a[i]*d[[i]] + b[i]
}
# Final data set
df1 <- data.frame(t=d[[1]], y=y[[1]], par1=rep(1), par2=rep(10), par3=sample(c(100, 200, 300), length(d[[1]]), replace = T))
df2 <- data.frame(t=d[[2]], y=y[[2]], par1=rep(2), par2=rep(20), par3=sample(c(100, 200, 300), length(d[[1]]), replace = T))
df3 <- data.frame(t=d[[3]], y=y[[3]], par1=rep(2), par2=rep(30), par3=sample(c(100, 200, 300), length(d[[1]]), replace = T))
mydata <- rbind(df1, df2, df3)
mydata <- mydata[sample(nrow(mydata)), ]
# That is what the data is looking like:
plot(mydata$t, mydata$y)
# This is the result I am looking for (ideally):
plot(d[[1]], y[[1]], col = "black", xlim = c(0, 10), ylim = c(-2, 10), xlab = "t", ylab = "y",
main = "Fit for three different groups")
points(d[[2]], y[[2]], col = "red")
points(d[[3]], y[[3]], col = "blue")
lines(d[[1]], y_t[[1]],col = "black")
lines(d[[2]], y_t[[2]], col = "red")
lines(d[[3]], y_t[[3]], col = "blue")
评论和提问@Roland 的回答:
我知道,对于给定的三个参数,2^3=8 组具有2*3*3=18 因子水平。但我希望我们只有 8 个相关组,因为我总是可以在“是否包含参数 x”之间进行选择。对我来说,仅“包含参数 y 的级别 x”是没有意义的。
我尝试了以下
g <- 0
t_lin1 <- mydata$t[mydata$g == g]
y_lin1 <- mydata$y[mydata$g == g]
plot(mydata$t, mydata$y)
points(t_lin1, y_lin1, col = "red")
abline(lm(y_lin1 ~ t_lin1), col = "red")
points(pred.1se ~ t, data = mydata, col = as.integer(mydata$g), pch = 16)
并意识到不合适。回想起来,这很清楚,因为
- 我包含了错误的因子水平(很可能参数 3 不相关)
- 从而得到错误的拟合数据
所以我的最后一个问题是:
- 在哪里可以找到最佳模型中包含的相关组和
- 回归中对应的拟合参数是什么?
对不起,如果这很明显,但对我来说这是个谜
【问题讨论】:
-
请提供不带
eval(parse())的可重现示例。要么编写正确的 R 代码,要么使用dput的输出来共享结果。原则上,我不会在我的机器上运行来自互联网的eval(parse())代码。 -
@Roland 您是否有理由不从互联网上运行
eval(parse())?我知道它很慢(而且风格很糟糕),但在上述情况下,脚本运行时间不到一秒。如果您有一个优雅的建议如何获取测试数据,我会很高兴。只需对问题进行编辑即可。 -
这是一个安全风险。我不倾向于详细研究此类代码以确保它可以安全运行。通常的建议适用于此处,而不是创建对象
a1、a2、... 使用您可以子集到a[1]、a[2]、...的对象(向量、列表、矩阵) > -
好的。我
dput数据。查看我的编辑...
标签: r linear-regression