如何预测数据框中的新行?

时间:2016-02-14 18:24:10

标签: r dataframe lm predict

这是开放数据。请查看数据和我的代码,并试着告诉我我做错了什么。这是数据 - https://drive.google.com/open?id=0BzGPJ4-xoC1oUURaQXVrSFVJUkk

我只是想从这些数据中预测接下来的10行,但我一直在收到错误。

到目前为止,这是我的代码 -

df=read.csv(file="sampledata.csv", header=FALSE, row.names=NULL)

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

start <- length(df) *.2

train = df[,start:length(df)]
test = df[,1:start]
#df <- data.frame(t(df))

train <- data.frame(t(train))
test <- data.frame(t(test))

#library(rpart)
#fit <- rpart(X1 ~ ., method='anova', data=df)

#View(df)

#predict(fit, type="prob")

#df$Prediction <- predict(lm(X1~., data=df))

fit <- lm(V1~., data=data.frame(t(train)))
#test <- data.frame(t(test))

#predictions <- data.frame(matrix(nrow=length(test), ncol=20))
#predictions <- as.matrix(predictions)
#predictions <- as.integer(predictions)
#dim(predictions) <- c(length(test), 20)
#test <- data.frame(t(test))
#predictions <- data.frame(predictions)

predict(fit, newdata=test)

我认为问题可能出在fit <- lm部分。我不知道如何将lm装入一排。它似乎只适用于列。

请告诉我如何使用模式识别或足够复杂的动态而不仅仅是打印出类似下面的内容(这些是统计上最可能给出的数字df) -

[1] 24.849651%
[5] 11.065672%
[9] 8.293240%
[15] 6.753669%
[17] 6.621362%
[23] 5.995911%
[26] 5.845562%
[30] 5.424585%
[36] 5.298292%
[39] 5.460669%
[44] 5.376473%
[48] 5.502766%
[51] 5.635073%
[56] 5.629059%
[59] 6.038008%
[64] 6.735627%
[68] 7.258841%
[72] 8.197017% 
[76] 11.179937% 
[80] 25.174405%

请注意,打印出来的内容与上述不同。我手动构建了这些数据。我需要3到10行20个不同的预测值,我需要看到预测数字的概率。

祝你好运,谢谢!

2 个答案:

答案 0 :(得分:1)

首先,row.names参数的预期值仅在write.csv中是逻辑(TRUE或FALSE),请查看?write.csv中的定义。在read.csv中,根据?read.csv,此参数的预期值应该是包含rownames的文件中列的行名称或索引位置的向量(在本例中为第一个)。所以请在您的文件中阅读:

df1 <- read.csv(file="sampledata.csv", header=T, row.names=1)

其次,查看你的文件,我会认为你的列是样本(16000),而你的变量是行(数量为20),所以你必须转换data.frame以使你的变量在列和行中的样本如:

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

然后根据df1制作模型,例如:

fit <- lm(V1~., data=df1)

顺便说一下,请务必阅读有关您正在使用的功能的R文档,并尝试了解数据的结构和内容,例如:在上面的回归模型中,V1被视为响应变量,V2-19是预测变量,但我不知道V1-20是什么!我希望你这样做:-)欢呼

答案 1 :(得分:1)

如果您希望预测因变量(X1)的新值,则需要为预测变量(X2,X3,...)提供新值。 但是,您的预测 data.frame(应该包含预测变量的新值)只包含NA条目,因此无法从中预测X1。 从数据中可以看出,您提供的“接下来的十列”(实际上是您的行中的行)可能是什么样的,即预测变量可能采用的值。

当然,您可以根据您的观察结果为您的预测变量重新抽取“新颖”值。但我不明白你最终的预测结果如何。所以,第一个问题确实是:(X2,X3,......的值)确实对你感兴趣吗?