【问题标题】:Abline not working with Linear regression ModelAbline 不使用线性回归模型
【发布时间】:2013-11-04 23:27:29
【问题描述】:

我在 R 中有一个数据,所以我想在各种模型上测试数据。我将数据分成两组,80% 训练和 20% 测试。所以现在我要做的是在线性模型上训练训练数据集并在测试数据集上进行预测。

到目前为止,我已经这样做了。

temp<-lm(formula = cityMpg ~ peakRpm+horsePower+wheelBase , data=train)
temp_test<- predict(temp,test)
plot(temp_test)

在这里,我得到了散点图。现在我只想要这个散点图中的一条线。 当我使用 abline(temp_test) 时,出现错误。 我希望这条线是自动的,我不想指定坐标。 得到错误:

Error in int_abline(a = a, b = b, h = h, v = v, untf = untf, ...) : 
      invalid a=, b= specification

【问题讨论】:

  • hi abline(temp) 有效,但它适用于训练数据,我想要它作为测试数据警告消息:在 abline(temp) 中:仅使用 4 个回归系数中的前两个
  • 绘制 4 维数据并不简单,至少不像 2 维数据那么简单。 abline 仅适用于具有 2 个系数、1 个截距和 1 个斜率的简单线性模型。
  • 你不能那样做,你有一个 4 维模型,而 abline 只适用于 2d。
  • 好的。那我怎么画一条线???通过 lines() 函数?
  • 如果我只是使用,temp

标签: r


【解决方案1】:

如上所述,这对于多维模型来说有点棘手。

获取一些数据(您忽略了包含可重现的示例:请参阅http://tinyurl.com/reproducible-000 ...)

library(foreign)
dat <- read.arff(url("http://www.cs.umb.edu/~rickb/files/UCI/autos.arff"))

分成训练和测试数据集:

train <- dat[1:150,]
test <- dat[151:nrow(dat),]

变量名称对于 R 来说有点尴尬(破折号被解释为减号运算符,因此我们必须使用反引号来保护名称):

fit <- lm(`city-mpg` ~ `peak-rpm`+horsepower+`wheel-base`,data=train)
temp_test <- predict(fit,test)

绘制预测与峰值 RPM:

par(las=1,bty="l") ## cosmetic
plot(test[["peak-rpm"]],temp_test,xlab="peak rpm",ylab="predicted")

为了添加直线,我们必须根据其他参数的一些基线值调整截距:我们将使用均值(另一种选择是在拟合模型之前将所有预测变量居中):

cf <- coef(fit)
abline(a=cf["(Intercept)"]+
          mean(test$horsepower)*cf["horsepower"]+
          mean(test$`wheel-base`)*cf["`wheel-base`"],
          b=coef(fit)["`peak-rpm`"])

另一种方法是使用predict()

newdat <- with(test,
            data.frame(horsepower=mean(horsepower),
                       "wheel-base"=mean(`wheel-base`),
                       "peak-rpm"=seq(min(`peak-rpm`),
                                        max(`peak-rpm`),
                                        length=41),
                       check.names=FALSE))
newdat["city-mpg"] <- predict(fit,newdat)
with(newdat,lines(`peak-rpm`,`city-mpg`,col=4))

(对于一条直线来说 41 个点是愚蠢的——我们本来可以只使用 2 个点——但如果你想绘制一些曲线,比如置信区间或非线性拟合,它会很好用。)

或者,您可以只拟合边缘模型,但实际拟合线有些不同(只有在所有预测变量相互正交时才会相同):

fit2 <- lm(`city-mpg` ~ `peak-rpm`,data=train)
abline(fit2,col="red")

【讨论】:

  • 非常感谢您的回复。但是预测值在这里说明了什么?它是否告诉 cityMpg 值???并且在表格中没有'-',单词被组合在一起,所以我没有遇到任何关于空间的问题。你能说出 plot(test[["peak-rpm"]],temp_test,xlab="peak rpm",ylab="predicted") 代表什么,峰值 rpm 和预测值的图表(什么是 dis 值)
  • (1) 是的,预测值与拟合模型的响应变量相同。 (2) 该图将峰值 RPM 置于 x 轴,将模型预测的城市 MPG 值置于 y 轴。
  • 哦,好的。意味着如果我想从 3 个属性预测 cityMpg 值,那么我不能这样做。我只能从另一个属性预测它的值?
  • 如果你想从 3 个属性中预测cityMpg 并绘制相应的图片 那么你需要决定其他(非焦点)属性的值是多少您将使用它来绘制图片。您可能想探索effects 包...
猜你喜欢
  • 2012-09-17
  • 2017-06-12
  • 1970-01-01
  • 2019-10-09
  • 1970-01-01
  • 1970-01-01
  • 2015-04-06
  • 2022-12-03
  • 1970-01-01
相关资源
最近更新 更多