-6

我想使用 P(见下文)在 (0, 10) 上的 100 个相等点处估计 X 和 Y(来自数据 m)之间的关系。我如何使用 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 )
}
4

1 回答 1

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)

你可以在这里看到不同的模型:

在此处输入图像描述

于 2013-03-02T02:56:58.710 回答