2015-11-11 2 views
0

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

Для примера;

ex=c(1,2,3,4,5) 
why=c(2,5,9,15,24) 

Это показывает информацию, с которой я работаю.

plot(ex, why, type="o") 

На данный момент, я хочу на самом деле иметь каждую точку «binned», чтобы линии между ними были прямыми. Чтобы сделать это, я добавлял точки к значениям x вручную в excel как (x + 0.01). Это новый выход:

why=c(2,2,5,5,9,9,15,15,24,24) 
ex=c(1,2,2.01,3,3.01,4,4.01,5,5.01,6) 
plot(ex, why, type="o") 

Так вот где мой вопрос приходит играть. Я должен делать это много раз и не хочу генерировать тонну новых векторов и объектов. Чтобы получить средневзвешенное значение, я интерполировал значения y для приращений x в 0,01, используя интерполяцию в новый объект. Я тогда в состоянии войти в этом новый объект и получить среднее значение, когда точка попадет между фактическими значениями бывших, т.е.

mean(newy[1:245]) 

Потому что я сделал новые Y значения для 100 приращения х, что (в основном) следует прямому line, я получаю средневзвешенное значение для x = 1 до 2.45.

Есть ли более простой и элегантный способ встраивания интерполяционного кода в средний код, поэтому я могу просто сказать «среднее значение интерполированного y для нереального x для нереального x?»

+0

Под "прямой" Я предполагаю, что вы имеете в виду "горизонтальный". Вас интересует сюжет здесь, или вы заинтересованы в вычислении взвешенного среднего времени? – user295691

ответ

1

Это не делает именно то, что вы хотите, но вы должны рассмотреть функцию stepfun - это создает ступенчатую функцию из двух серий.

plot(stepfun(ex[-1], why)) 

stepfun удобно, потому что это дает вам функцию, определенную в течение этого интервала, так что вы можете легко интерполировать только путем оценки в любом месте. Недостатком этого является то, что он строго не определен в указанном диапазоне (поэтому мы должны отключить первое значение в ex).

step function

+0

Спасибо, это сделало именно то, что я искал, а затем и некоторые. Трудно искать правильные вещи, когда вы этого не знаете! Используя этот код, где > Newy = stepfun (например, [-1], почему) > означают (Newy (сл (1,2, 3,7, 0,001))) взвешенное среднее по функции можно вычислить от 1,2 до 3,7. – Dilliplaine33

+0

Хорошее использование 'stepfun', плюс один. – akrun

0

Основываясь на втором черчения, например, я думаю, вы, вероятно, ищете это:

library(ggplot2) 
qplot(ex, why, geom="step") 

это дает:

enter image description here

Или, если вы хотите, чтобы линия идти по вертикали первым, вы можете использовать:

qplot(ex, why, geom="step", direction = "vh") 

который дает:

enter image description here

+0

Чем вам больше всего нравятся эти функции, они являются фантастическими. – Dilliplaine33