【问题标题】:How do I predict values for the future instead of a known column? [duplicate]如何预测未来的值而不是已知列? [复制]
【发布时间】:2016-05-25 05:10:30
【问题描述】:

我试图预测 R 中 data.frame 中的未来值,但我一直得到与我预测的列相同的所有数字。这是代码-

df=read.csv(file="D://Users/me/Documents/df.csv", header=FALSE, row.names=NULL)

df <- data.frame(t(df))

df <- df[-c(21),]

fit <- lm(X1~., data=df)
predict(fit)

预测的值如下-

V1  V2  V3  V4  V5  V6  V7  V8  V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19 V20 
4   8  13  16  19  24  26  31  34  37  40  42  46  50  56  58  59  64  72  80 

这些数字与 X1 列中的数字完全相同。我正在尝试根据之前的所有列(包括 X1)以及概率来预测下一列。当我执行plogis(predict(fit)) 时,我得到以下信息。

   V1        V2        V3        V4        V5        V6        V7        V8        V9       V10 
0.9820138 0.9996646 0.9999977 0.9999999 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 
  V11       V12       V13       V14       V15       V16       V17       V18       V19       V20 
1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 

因此,如您所见,它看起来有点像是在做出预测,但概率如此之高,以至于数字与列完全匹配。

如何预测下一列?然后我如何预测之后的列?等等

【问题讨论】:

    标签: r dataframe lm predict


    【解决方案1】:

    你正在做的是:

    从 csv 文件加载数据

    df=read.csv(file="D://Users/me/Documents/df.csv", header=FALSE, row.names=NULL)
    

    转置你加载的内容

    df <- data.frame(t(df))
    

    去掉第21行

    df <- df[-c(21),]
    

    在 DV 为 X1 的前一个数据帧上拟合线性回归模型,并使用所有剩余变量作为预测变量

    fit <- lm(X1~., data=df)
    

    在您的模型上调用函数 predict

    predict(fit)
    

    在 R 中,当您执行最后一项时,您是在告诉 R 预测用于拟合原始模型的数据点。这通常是验证训练结果的一种方式。如果您想预测新值(新数据集),则必须使用要预测的新数据指定数据集

    predict(fit, newdata = myNewDF)
    

    这个 myNewDF 应该是一个数据框,其中包含您尝试预测的 X1 之外的所有变量。

    希望对你有帮助

    【讨论】:

    • 谢谢。不过我现在有个问题。我拥有的数据很大;不是太大,但超过 15,000 列。我只想预测接下来的 2 列,而不是创建一个不可见的 data.frame。有没有办法做到这一点?我不想提高效率,所以我只想预测 2 列,可能最多 10 列。
    • 另外,让我问你这个。当我第一次运行它时,我需要创建myNewDF,所以我只创建了myNewDF &lt;- data.frame。在我这样做之后,我尝试了你的答案(predict(fit, newdata = myNewDF,它给了我这个错误-Error in eval(predvars, data, env) : invalid 'envir' argument of type 'closure'。我该如何解决这个问题,你也可以把它放在答案中吗?
    • 关于您的第一个问题,我不确定我是否理解您要预测的内容。请记住,在制作模型时,您需要相同的数据结构来预测和训练模型,例如,如果您尝试制作一个模型来根据表面、城市、beedrom_number 和浴室号码预测房屋价格,您将使用这些参数,在预测新房子时,您将需要所有预测变量和相同的类别(例如,您不能拥有一个新城市)。我需要更多地了解您的数据,以便为您提供更好的答案。
    • dim(df)[1] 20 15964。我没有任何列名 (X1, X2... Xn),我只是想预测 2 到 10 列,甚至可能只有一列。我不想再次创建另一个包含大约 16k 列的表,因为大部分数据都是无用的。我只有一组 20 个数字(1 到 80),我试图根据历史数据预测接下来的 20 个数字。我没有测试集,也许我应该将df 分成训练和测试,但我什至不认为我知道如何测试它。这就是我问的部分原因。
    • 关于你的第二个问题,你得到的错误与括号有关。您应该这样做predit(fit, newdata= myNewDF) 此外,在创建数据框时,您必须在myNewDF = data.frame(mypredictorcolumns) 中放入一些数据,例如在前面的示例中myNewDF = data.frame(surface, city, beedrom_number and bathroom_number)
    猜你喜欢
    • 2017-12-07
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 2019-03-17
    • 2018-08-24
    • 2019-11-02
    • 2019-05-05
    • 2022-08-03
    相关资源
    最近更新 更多