R的新手,需要帮助编码功能和理解错误

时间:2018-06-29 21:09:12

标签: r function loops smoothing

所以我要为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 :(得分:0)

代码中的错误是您的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已经是其向量表示。