R中的局部预测建模方法

时间:2013-05-07 21:03:14

标签: r local

用户

我正在尝试开发一个本地模型(PLSR),它使用下面的代码通过基于10个最相似样本的模型预测查询样本(不是完整模型,只是其中的一部分)。我试图预测查询样本时遇到困难(倒数第二行)。该模型实际上是预测某些东西,(“prd”)但不是查询样本!

这是我的代码:

require("pls")
set.seed(10000)   # generate some sample data
mat <- replicate(100, rnorm(100))
y <- as.matrix(mat[,1], drop=F) 
x <- mat[,2:100]
eD <- dist(x, method="euclidean")    # create a distance matrix
eDm <- as.matrix(eD)

循环遍历所有100个样本并提取其10个最相似的样本,以便随后进行模型构建和查询样本预测:

for (i in 1:nrow(eDm)) { 
     kni <- head(order(eDm[,i]),11)[-1]    # add 10 most similar samples to kni
     pls1 <- plsr(y[kni,] ~ x[kni,], ncomp=5, validation="CV")    # run plsr on sel. samples
prd <- predict(pls1, ncomp=5, newdata=x[[i]])    # predict query sample  ==>  I suspect there is something wrong with this expression: newdata=x[[i]]
}

我无法弄清楚如何正确处理查询示例 - 非常感谢i.a.任何帮助!

致以最诚挚的问候,

Chega

1 个答案:

答案 0 :(得分:3)

你会遇到各种各样的疼痛建筑模型。此外x[[i]]没有按照您的想法行事 - 您需要为这些建模功能提供数据框。在这种情况下,矩阵似乎也很好。

如果我使用的话,我可以使你的所有代码都正常工作:

prd <- predict(pls1, ncomp=5, newdata=x[i, ,drop = FALSE])

> predict(pls1, ncomp=5, newdata=x[i,,drop = FALSE])
, , 5 comps

      y[kni, ]
[1,] 0.6409897

您在代码中看到的是训练数据的拟合值。

> fitted(pls1)[, , 5, drop = FALSE]
, , 5 comps

     y[kni, ]
1   0.1443274
2   0.2706769
3   1.1407780
4  -0.2345429
5  -1.0468221
6   2.1353091
7   0.8267103
8   3.3242296
9  -0.5016016
10  0.6781804

如果您不提供newdata或者您提供的对象没有意义并且不包含生成预测所需的协变量,则这是R中的约定。

我会按照以下方式拟合模型:

pls1 <- plsr(y ~ x, ncomp=5, validation="CV", subset = kni)

我将subset参数用于其预期目的;选择输入数据的行以适合模型。你可以从模型中获得更好的输出;标签使用y而非y[kni, ]等,此常规约定将在其他建模工具中很好地为您提供服务,其中R期望newdata成为names的数据框完全与模型公式中提到的相同。在您的情况下,使用您的代码,这意味着创建一个名称为x[kni, ]的数据框,这是不容易做到的,这是有充分理由的!