Как создать функцию цикла с функцией построения графика с использованием фреймов данных - PullRequest
0 голосов
/ 27 июня 2018

Так вот мой код

require(splines)
library(ISLR)

 x <- runif(1000,min=0,max=10)
lambda=(2*x)+(0.2*x*sin(x))
y <- rpois(1000,lambda)

J <- data.frame(x=x, y=y)

Теперь, что я хочу сделать, это сгладить эту функцию, используя

 smoothing=lm(y~ns(x=x,df=1),data=J)

и

ajust=predict(object=smoothing)

и затем проследить линию сглаживания, используя

plot(x=x,y=y,cex=0.4)
lines(x,ajust,lwd=2)

Я хочу цикл, который объединяет эти 3 операции, для df = 1, ..., 20 так что в основном я хочу проследить 20 различных линий сглаживания (df = 1, ..., 20)

Я использовал это, и я думаю, что это работает, но мне было интересно, смогу ли я сохранить все в dataframe вместо того, чтобы делать матрицу.

dat=matrix(data=(1:20000),ncol=20)
for (i in (1:1000)){ 
for (d in (1:20)){
smoothing=lm(y~ns(x=x,df=d),data=J)
ajust[i,d]= predict(object=smoothing)[i] }}

trace= function(d){
plot(x,y)
lines(x,ajust[,d]) }

for (d in (1:20)) {trace(d)}

Любая помощь приветствуется! Спасибо !!

1 Ответ

0 голосов
/ 27 июня 2018

Я использовал это, и я думаю, что это работает, но мне было интересно, смогу ли я сохранить все в dataframe вместо того, чтобы делать матрицу.

Да, вы можете.

Была также пара небольших проблем с индексацией, и plot() не был вызван в нужной части вашего кода, исправлено ниже:

# data.frame works fine:
ajust = structure(list(X1 = 1:1000, X2 = 1001:2000, X3 = 2001:3000, X4 = 3001:4000, 
                     X5 = 4001:5000, X6 = 5001:6000, X7 = 6001:7000, X8 = 7001:8000, 
                     X9 = 8001:9000, X10 = 9001:10000, X11 = 10001:11000, X12 = 11001:12000, 
                     X13 = 12001:13000, X14 = 13001:14000, X15 = 14001:15000, 
                     X16 = 15001:16000, X17 = 16001:17000, X18 = 17001:18000, 
                     X19 = 18001:19000, X20 = 19001:20000), class = "data.frame", row.names = c(NA, 
                                                                                                -1000L))


smoothing=lm(y~ns(x=x,df=1),data=J)

for (i in (1:1000)){ 
  for (d in (1:20)){
    smoothing=lm(y~ns(x=x,df=d),data=J)
    ajust[i,d]= predict(object=smoothing)[i] }}

plot(x,y) # call this outside of the function/loop
trace= function(d){
  lines(x,ajust[,d]) }

for (d in (1:20)) {trace(d)}
...