我想估计X和Y之间的关系(来自数据m)使用P(见下文)在(0,10)处的100个相等点处。我怎么能用R?
做到这一点> m
X Y
1 0.5 6.0
2 1.5 5.0
3 2.5 6.7
4 3.5 7.1
5 4.5 6.1
6 5.5 8.1
7 6.5 8.0
8 7.5 7.9
9 8.5 8.0
10 9.5 6.0
(1)
P=function(x,X,Y,sigma){
# x = point to evaluate our estimate.
# X = vector of observation X values
# Y = vector of observation Y values
# sigma = standard deviation.
weights = rep(0,length(X))
sumweights = 0
smooth = 0
for(i in 1:length(X)){
weights[i] = dnorm(x,mean=X[i],sd=sigma)
sumweights = sumweights + weights[i]
smooth = smooth + weights[i]*Y[i]
}
return( smooth/sumweights )
}
答案 0 :(得分:5)
我不确定你要做什么,但你说“我想估计X和Y之间的关系”,这听起来像是试图使函数适合你的数据集。探索未知关系数据的一种方法是绘制它并尝试猜测变量之间的数学关系。例如:
m <- read.table(header=T, text='
X Y
0.5 6.0
1.5 5.0
2.5 6.7
3.5 7.1
4.5 6.1
5.5 8.1
6.5 8.0
7.5 7.9
8.5 8.0
9.5 6.0')
with(m,plot(X,Y))
现在尝试为您的数据拟合线性回归。
lm_xy <- lm(Y~X,m)
abline(lm_xy,col='blue')
summary(lm_xy)
这看起来不太合适,但您可以使用lm
,nls
和其他软件包来寻找更好的模型。
例如,尝试:
pn_xy <- nls(Y ~ a*(X - b)^2 + c, start = c(a=0.05, b=8, c=8),data=m)
lines(m$X,predict(pn_xy,m$X),col='red')
summary(pn_xy)
您可以在此处看到不同的模型: