2016-10-05 44 views
1

我有一個x對y的散點圖。我已經在情節的中間畫了一條線。我想計算abline左側點的方差,我想計算abline右側點的方差。這很可能是一個相對簡單的問題,但我正在努力尋找解決方案。任何建議表示讚賞。提前致謝。從散點圖中找出數據子集的方差

x = rnorm(100,mean=12,sd=2) 
    y = rnorm(100,mean=20,sd=5) 
    data = as.data.frame(cbind(x,y)) 
    plot(x=x,y=y,type="p") 
    abline(v=12,col="red") 
+1

請讀作:[再現的示例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)和[求助/ MCVE](HTTP ://stackoverflow.com/help/mcve)。 – r2evans

+0

查看'?resid' --'residual(lm(y〜x))> 0'例如用於定義最佳擬合線兩側的組。也許 - 'tapply(y,resid(lm(y〜x))> 0,var)'但你必須明確說明你想要的是什麼。 – thelatemail

+0

我很抱歉,我已經包含了一些示例代碼。在查看情節時,我的目標是獲取紅線左側的點並找出方差。然後我想找到線右側的點的差異,以便我可以比較差異。 – tesseracT

回答

3

在您的示例代碼中,您有一條垂直線v = 12。您的數據點(x, y)分爲兩組,分別爲x < 12x >= 12。這是簡單的做這樣的事情:

var(y[x < 12]) 
var(y[x >= 12]) 

但是,我們也可以用它來tapply一個電話:

tapply(y, x < 12, FUN = var) 

更普遍的,如果你有一條線y = a * x + b,其中a是坡b是截取的,你的數據點(x, y)將被分成兩組:y < a * x + b(下面一行)和y >= a * x + b(上面一行),這樣你可以使用

tapply(y, y < a * x + b, FUN = var) 
+0

謝謝,這工作。我知道這不像我做的那麼困難。 – tesseracT