2013-03-02 113 views
-5

我想用P(见下面)在(0,10)上的100个相等点估计X和Y之间的关系(从数据m)。我如何使用R来做到这一点?估计R中X和Y之间的关系

> 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) 
} 
+3

什么?这是我见过的最不清楚的问题。 – nograpes 2013-03-02 02:11:57

+0

@nograpes我编辑了这个问题,让我知道是否需要更多的澄清... – Titi90 2013-03-02 02:17:14

+2

@ Titi90 - 现在它变得更加不合理!请详细解释你想要做的事情! – thelatemail 2013-03-02 02:18:11

回答

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) 

这看起来并不像一个不错的选择,但你可以玩弄lmnls包等,以寻找更好的模型。

例如,尝试:

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) 

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

enter image description here

相关问题