Новичок в R и нуждается в помощи кодирования функции и понимания ошибок - PullRequest
0 голосов
/ 30 июня 2018

Итак, я беру класс для R, и мне очень трудно кодировать основные формулы.

По сути, я пытаюсь найти 3 переменные, но получаю ошибки. (Я приложил картинку для облегчения презентации)

Примечание:

d - количество степеней свободы, d = 1, ..., 20

enter image description here и это мой код:

set.seed(29)
library(ISLR)
library(splines)


#### ETAPE 1 
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)
plot(x,y,cex=0.4)


### ETAPE 2 

ajust <- matrix(NA,20,1000)

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

fd=function(d) {return(smoothing[d])}

for(i in (1:20)) {
  lines(x,ajust[i,],col=i)
}

lines(x,lambda,col='black')

for(i in (1:20)) {
  d1<- (1/1000)*sum((y-ajust[i,])**2)
}

### Calcul de D2

Mean=lambda

for (d in (1:20)){
  W=(Mean-fd(x))**2
  d2=sum(W)/1000

}

Это работает до "calcul de D2", где я получаю ошибку "Нечисловой аргумент в двоичный оператор". И я не понимаю, как заставить это работать. Я знаю, что мой вопрос может показаться немного расплывчатым, поэтому не стесняйтесь, дайте мне знать, если что-то не понятно.

1 Ответ

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

Ошибка в коде состоит в том, что ваш fd(x) вызов функции возвращает список. Это, как говорит ошибка, не числовой.

У нас нет информации о том, каким должно быть f (d) (это не определено на рисунке или в вопросе), но кажется, что решение состоит в том, чтобы извлечь любой компонент из fd(x), который вы хотели вычесть из Mean.

Например:

for (d in (1:20)){
  W=(Mean-fd(x)$fitted.values)**2
  d2=sum(W)/1000

}

Обновление

Я видел ваш комментарий / вопрос по поводу "D3" из уравнений на картинке. Я немного не уверен, потому что у меня нет учебника / контекста, чтобы быть уверенным в нотации (X не определен формально, и мне также пришлось поверить, что Y на рисунке = Mean в код, основанный на том, как вы его использовали). Это мое лучшее предположение, исходя из этого контекста:

# The equation for d3 is the expected value of (Y-fd(X))^2.
#
# I don't know the context of this, but I see the definition of d1 and d2.
#
# D1 = for(i in (1:20)) {
#  d1<- (1/1000)*sum((y-ajust[i,])**2)
# }
d1 # [1] 10.04203
#
# D2 = for (d in (1:20)){
# W=(Mean-fd(x)$fitted.values)**2
# d2=sum(W)/1000
# }
# 
d2 # [1] 0.2024568
#
# Based on that, Y = Mean, y = y, x=x, i=i, N=1000
#                W = (Y - fd(xi))^2
# I presume X = vectorized xi
# 
# So, D3 =


D3 = (Mean  - fd(x)$fitted.values)^2

#Since it's an expected value, I presume we take the mean

D3 = mean(D3)

Там, где я могу ошибаться, вероятно, X. X в изображенном уравнении выглядит как вектор всех x [i]. Но каждый элемент x является x [i], поэтому x уже является его векторным представлением.

...