Re: [問題] Area under curve/line

作者: koai (可笑的自以為...)   2014-05-08 11:26:38
我猜測你需要自己手動
去調整threshold!!
package中的 thresh argument 似乎起不了作用!!
(或是我沒弄懂怎麼用... @@")
auc(c(0,30,60),c(145,327,189),thresh=0)
auc(c(0,30,60),c(145,327,189),thresh=145) ## 設定 thresh 沒起作用!!
auc(c(0,30,60),c(145,327,189)-145,thresh=0) ## 手動設定 thresh 有作用!!
下面提供參考的程式碼:
T=c(0,30,60)
X=matrix(c(145,327,189,188,275,165,100,89,121,201,223,188),nrow=3)
rownames(X) <- paste("T",1:3,sep="")
colnames(X) <- paste("S",1:ncol(X),sep="")
t(X)
AUC = sapply(1:ncol(X),function(k){auc(c(0,30,60),X[,k]-X[1,k],thresh=0)})
AUC
[1] 6120.0000 2337.1717 206.7202 537.4380
##
## 此方法算出來的auc不知道為什麼也不精確?
## 不過誤差小於 0.1 看你是否可以接受!!
## 以下提供我手動硬刻的驗算程式碼:
##
AA=c()
for(k in 1:ncol(X)){
if( min(X[,k])==X[1,k] ){
A = ( ( (X[2,]-X[1,])*(T[2]-T[1])+(X[2,]-X[1,]+X[3,]-X[1,] )*(T[2]-T[1]))/2 )[k]
}else{
if( min(X[,k])==X[2,k] ){
A = ( ( T[3]-( -(X[2,]-X[1,])/( (X[3,]-X[2,])/(T[3]-T[2]) )+T[2] ) )*( X[3,]-X[1,] )/2 )[k]
}else{
A = ( ( -(X[2,]-X[1,])/( (X[3,]-X[2,])/(T[3]-T[2]) )+T[2] )*( X[2,]-X[1,] )/2 )[k]
}
}
AA[k]=A
}
AA
[1] 6120.0000 2337.1364 206.7188 537.4286
##
## 比較 AUC 和 AA 參考一下:
##
> AUC
[1] 6120.0000 2337.1717 206.7202 537.4380
> AA
[1] 6120.0000 2337.1364 206.7188 537.4286
> AUC-AA
[1] 9.094947e-13 3.535354e-02 1.482629e-03 9.445100e-03
※ 引述《CKAXI (我不在...)》之銘言:
: [問題類型]:
: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來)
:
: [軟體熟悉度]:
: 新手(沒寫過程式,R 是我的第一次)
: [問題敘述]:
: 我在三個時間點做了三次測驗,想以第一次測驗的結果為基準計算三次測驗連線下
: 的面積(若第三次的結果低於第一次的結果,則面積只計算至基準線和二三次結果
: 交界處)
: 我原本想使用"flux"package中的"auc"來計算,但是經過幾次測試發現其中
: thresh這個argument好像怪怪的
: http://artax.karlin.mff.cuni.cz/r-help/library/flux/html/auc.html
: 不知道各位有沒有其它的方法可以解決原本的問題
: [程式範例]:
: 資料大略會是這樣,需要計算每位受試者的area under line
: Subj T1(0) T2(30) T3(60)
: 1 145 327 189
: 2 188 275 165
: ...
: [關鍵字]:
作者: CKAXI (我不在...)   2014-05-08 19:46:00
感謝koai大!請讓我來研究一下您提供的程式碼

Links booklink

Contact Us: admin [ a t ] ucptt.com