R:线性模型预测结果的限值/设定值

R:线性模型预测结果的限值/设定值,r,statistics,prediction,lm,predict,R,Statistics,Prediction,Lm,Predict,新到R 希望限制可以预测的值的范围 df.Train <- data.frame(S=c(1,2,2,2,1),L=c(1,2,3,3,1),M=c(400,450,400,700,795),V=c(423,400,555,600,800),G=c(4,3.2,2,2.7,3.4), stringsAsFactors=FALSE) m.Train <- lm(G~S+L+M+V,data=df.Train) df.Test <- data.frame(S=c(1,2,1,2,1

新到R

希望限制可以预测的值的范围

df.Train <- data.frame(S=c(1,2,2,2,1),L=c(1,2,3,3,1),M=c(400,450,400,700,795),V=c(423,400,555,600,800),G=c(4,3.2,2,2.7,3.4), stringsAsFactors=FALSE)
m.Train <- lm(G~S+L+M+V,data=df.Train)
df.Test <- data.frame(S=c(1,2,1,2,1),L=c(1,2,3,1,1),M=c(400,450,500,800,795),V=c(423,475,555,600,555), stringsAsFactors=FALSE)
round(predict(m.Train, df.Test, type="response"),digits=1)
#seq(0,4,.1) #Predicted values should fall in this range

df.Train在这种情况下,有一些方法可以转换您的响应变量,
G
,但需要有一个很好的理由来这样做。例如,如果希望输出的概率介于0和1之间,并且响应变量为二进制(0,1),则需要进行逻辑回归

这一切都取决于您拥有什么样的数据,以及响应变量的模型/转换是否合适。在您的示例中,您没有指定数据是什么,因此我们无法说明要使用哪个模型或哪个转换

另外,如果您真的关心预测,而不关心模型或转换(但为什么不关心?),那么您的数据似乎可以使用
quasipossion
广义线性模型,它可以提供您需要的输出:

df.Train <- data.frame(S=c(1,2,2,2,1),L=c(1,2,3,3,1),M=c(400,450,400,700,795),V=c(423,400,555,600,800),G=c(4,3.2,2,2.7,3.4), stringsAsFactors=FALSE)
m.Train <- glm(G~S+L+M+V,data=df.Train, family=quasipoisson)
df.Test <- data.frame(S=c(1,2,1,2,1),L=c(1,2,3,1,1),M=c(400,450,500,800,795),V=c(423,475,555,600,555), stringsAsFactors=FALSE)

> predict(m.Train, df.Test, type="response")
       1        2        3        4        5 
4.000000 2.840834 3.062754 3.615447 4.573276 
#probably not as good as you want
正如你所看到的,预测永远不会超过4。也就是说knn是一种局部求解算法,所以您需要再次研究这是否是解决问题和数据的好方法。在预测方面,虽然它肯定证实了你的情况。Knn是一种非常容易理解的算法,它依赖于点之间的距离来计算预测


希望有帮助:)

感谢您的详细回复。在这种情况下,G是从0.0到4.0的刻度。如果我理解正确,就没有办法将lm模型或预测值限制在合法预测值的范围内?如果使用
lm
,则绝对没有办法。使用
lm
无法在一个时间间隔内进行预测。您可以使用
glm
对响应变量进行变换,即在您的情况下,
G
进行区间预测,但您可以进行的变换有限,如您所见。为了能够在此时间间隔内进行预测,最好查看
optim
,根据您的条件估计系数。请检查我的编辑。我想这可能更适合你的问题。太好了。再次感谢。
library(FNN)
> knn.reg(df.Train[1:4], test=df.Test[1:4], y=df.Train[5], k=3)
Prediction:
[1] 3.066667 3.066667 3.066667 2.700000 3.100000