2013-05-07 2 views
1

пользователейподхода Местного моделирования прогнозирования в R

Я пытаюсь разработать местную модель (ПЛСР), которая предсказывает образец запроса по модели, построенной на 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) 

Looping более всего 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]] 
} 

Я не могу понять как правильно обращаться к образцу запроса - большое спасибо ia за любую помощь!

С наилучшими пожеланиями,

Chega

+0

какой пакет 'plsr' в? – Carson

+0

Это ** пакет ** PLS **. –

+0

@ Карсон: Да, Гэвин прав - я использовал, чтобы отправить пакет - извините за отсутствующие, чтобы упомянуть об этом! – Chega

ответ

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 

Это условность в R, когда вы либо не поставить newdata или объект, который вы не поставляют никакого смысла и не содержит ковариации, необходимые для создания прогнозов.

Я бы соответствовал моделям следующим образом:

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

где я использую subset аргумент для его прямого назначения; для выбора строк входных данных для соответствия модели. Вы получаете лучшую производительность от моделей; метки используют y вместо y[kni, ] и т. д., и это общее соглашение хорошо послужит вам в других инструментах моделирования, где R будет ожидать, что newdata будет кадром данных с namesточно так же, как и в формуле модели. В вашем случае, с вашим кодом, это будет означать создание фрейма данных с именами, такими как x[kni, ], которые нелегко сделать, по уважительной причине!

+0

+1, но что такое lebel? – Ben

+1

@Ben Спасибо. «лейбл» был предназначен, но даже тогда он плохо читал. Устранили опечатку. –

+0

@ Gavin: Хм, гораздо проще, чем я ожидал, - большое спасибо за это!Я также ценю ваши комментарии относительно нотации формул в R (с которой я, по общему признанию, нахожусь в состоянии войны :() - определенно нужно пересмотреть это! – Chega

Смежные вопросы