2016-07-24 2 views
1

Я пытаюсь нарисовать кривую многочлена, но есть так мало очков, что кривая выглядит действительно прямо в некоторых местах. Как я могу проверить больше очков на полиноме, чтобы у меня была более приятная кривая? Рисунок, иллюстрирующий проблему ниже с кодом, пытающимся решить проблему.Добавление большего количества точек на полиномиальной кривой

enter image description here

library('MonoPoly') # monotonic polynomials 

dataT = read.csv("data.csv", header=TRUE, sep=",") 
x <- dataT[,'x'] 
y <- dataT[,'y'] 
fitResult <- monpol(y~x, degree=3,algorithm="Hawkins") 
fitted <- fitted(fitResult) # not enough data points. Only 120 

z = predict(fitResult, seq(1, 5, 0.01)) # attempt at making more data points 

plot(1:5, 1:5, type = "n")# setting up coord system 
points(x,y,col="red") # plotting data fitting to 
lines(sort(x), sort(fitted),col="blue") #plotting fitted because z isn't working 
points(x,z,col="blue") # plotting curve 

ответ

5

Вы не дали воспроизводимый пример, но в целом в ответ на такого рода вопрос в том, что большинство predict() методы R имеют newdata аргумент, что позволяет прогнозировать с дополнительными точками.

library('MonoPoly') # monotonic polynomials 

Настройка данных:

set.seed(101) 
dd <- data.frame(x=c(1,2,10:20)) 
dd$y <- with(dd,rnorm(13,2+3*x-0.2*x^2,sd=0.4)) 

В общем случае, если подходящая функция R предлагает data аргумент, это хорошая идея, чтобы использовать его.

fitResult <- monpol(y~x, degree=3,algorithm="Hawkins",data=dd) 

кадр предсказания Construct данных и прогнозирования с новыми данными:

pframe <- with(dd,data.frame(x=seq(min(x),max(x),length.out=101))) 
pframe$y <- predict(fitResult, newdata=pframe) 

Результаты Plot:

par(bty="l",las=1) ## cosmetic 
plot(y~x,data=dd,col="red") 
lines(dd$x, fitted(fitResult),col="blue",type="b",cex=2) 
with(pframe, points(x,y,col="purple",cex=0.5)) 

enter image description here

+0

Спасибо. Это сработало отлично. Извините за неполный пример. Я не мог придумать способ воспроизвести его без массивного текстового дампа сотен ценностей. Ваш короткий пример был действительно приятным. Вы были правы в том, что я не имею опыта с R, и поэтому не знал, как использовать «данные». Еще раз спасибо за отличный ответ. Я слишком долго задерживался на этой проблеме. –

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