Kama Jansen

Kama Jansen Student, Akademia
Medyczna w
Amsterdamie

Temat: jak zrobic funkcje dla modeli z roznych grup

Witam
czy moze ktos wie jak zrobic funkcje, w ktorej mozna wykorzystac pare roznych grup modeli, (cox modeli).
modele mam pogrupowane w pare grup:
modelsA<- c(ModelA1, ModelA2, ModelA3, ModelA4)
modelsB<- c(ModelB1, ModelB2, ModelB3, ModelB4)
modelsC<- c(ModelC1, ModelC2, ModelC3, ModelC4)
modelsD<- c(ModelD1, ModelD2, ModelD3, ModelD4)
modelsE<- c(ModelE1, ModelE2, ModelE3, ModelE4)

kazdy model w sumie wyglada podobnie tylko zmienna jest inna, na przyklad:
Model1<-cph(Surv(SurvT, status) ~ variableX, x=T, y=T, surv=T, singular.ok=T, data=agg)

dla kazdej grupy chce zrobic w sumie to samo, wiec jak zrobic taka funcje?
dla wyjasnienia podam o co mi chodzi gdyby tylko byla grupa modelsA to moge zrobic tak:

model1 <- ModelA1
model2 <- ModelA2
model3 <- ModelA3
model4 <- ModelA4

#-C indexs
rc1 <- rcorr.cens(predict.cph(model1),Surv(agg$SurvT, agg$status))
rc2 <- rcorr.cens(predict.cph(model2),Surv(agg$SurvT, agg$status))
rc3 <- rcorr.cens(predict.cph(model3),Surv(agg$SurvT, agg$status))
rc4 <- rcorr.cens(predict.cph(model4),Surv(agg$SurvT, agg$status))

CstatCI(rc1)
CstatCI(rc2)
CstatCI(rc3)
CstatCI(rc4)

#-Validation
v1<-validate(model1, B = 100, dxy=T)
v2<-validate(model2, B = 100, dxy=T)
v3<-validate(model3, B = 100, dxy=T)
v4<-validate(model4, B = 100, dxy=T)

valid<-rbind(v1,v2,v3,v4)
ind.corr<-valid[c(1,8,15,22),]$corr

write.table(ind.corr, quote=T, row.names=F, append=F, file="validationA.csv", sep=";")

dla modeli z grupy A otrzymam w rezultacie wynik w pliku validationA.csv,
dla kazdej kolejnej grupy modeli powinnam dostac pliki: validationB.csv, validationC.csv, validationD.csv, validationE.csv

bede wdzieczna za pomoc
Kamil Bęczyński

Kamil Bęczyński R, SAS, analizy

Temat: jak zrobic funkcje dla modeli z roznych grup

Może, czegoś nie rozumiem, ale zacznę dyskusję, bo temat wisi już całe popołudnie.

Czy nie wystarczy funkcja :

reg_modele <- function(model)
{

model1 <- model[1]
model2 <- model[2]
model3 <- model[3]
model4 <- model[4]

#-C indexs
rc1 <- rcorr.cens(predict.cph(model1),Surv(agg$SurvT, agg$status))
rc2 <- rcorr.cens(predict.cph(model2),Surv(agg$SurvT, agg$status))
rc3 <- rcorr.cens(predict.cph(model3),Surv(agg$SurvT, agg$status))
rc4 <- rcorr.cens(predict.cph(model4),Surv(agg$SurvT, agg$status))

CstatCI(rc1)
CstatCI(rc2)
CstatCI(rc3)
CstatCI(rc4)

#-Validation
v1<-validate(model1, B = 100, dxy=T)
v2<-validate(model2, B = 100, dxy=T)
v3<-validate(model3, B = 100, dxy=T)
v4<-validate(model4, B = 100, dxy=T)

valid<-rbind(v1,v2,v3,v4)
ind.corr<-valid[c(1,8,15,22),]$corr

write.table(ind.corr, quote=T, row.names=F, append=F, file="validationA.csv", sep=";")
}

lub może raczej :

reg_modele2 <- function(model1, model2, model3, model4)
{

#-C indexs
rc1 <- rcorr.cens(predict.cph(model1),Surv(agg$SurvT, agg$status))
rc2 <- rcorr.cens(predict.cph(model2),Surv(agg$SurvT, agg$status))
rc3 <- rcorr.cens(predict.cph(model3),Surv(agg$SurvT, agg$status))
rc4 <- rcorr.cens(predict.cph(model4),Surv(agg$SurvT, agg$status))

CstatCI(rc1)
CstatCI(rc2)
CstatCI(rc3)
CstatCI(rc4)

#-Validation
v1<-validate(model1, B = 100, dxy=T)
v2<-validate(model2, B = 100, dxy=T)
v3<-validate(model3, B = 100, dxy=T)
v4<-validate(model4, B = 100, dxy=T)

valid<-rbind(v1,v2,v3,v4)
ind.corr<-valid[c(1,8,15,22),]$corr

write.table(ind.corr, quote=T, row.names=F, append=F, file="validationA.csv", sep=";")
}

ps. ale to wstawianie kodu na Goldenline jest brzydkie, już wolę go wklejać jako zwykły teskt :-/Kamil Bęczyński edytował(a) ten post dnia 19.04.13 o godzinie 19:24
Kama Jansen

Kama Jansen Student, Akademia
Medyczna w
Amsterdamie

Temat: jak zrobic funkcje dla modeli z roznych grup

Dzieki Kamil za podjecie mojego problemu. Twoje rozwiazanie jest super dla modeli z grupy A - ModelsA, czy dla jakiejkolwiek jednej grupy. Ja chcialabym zeby po zrobieniu modeli z grupy A teraz automatycznie robione byly modele z grupy B - ModelsB, potem z grupyC - ModelsC, itd.
Chodzi o to jak zrobic zeby cos takiego bylo robione jak napisales, ale robione za kazdym razem dla kolejnych grup, w ktorych sa rozne modele, wiec Model1 z grupy ModelsA nie jest tym samym modelem co Model1 z ModelsB i tak dalej. Moze nie wyjasnilam tego dobrze za pierwszym razem.
Po zrobieniu tych czterech modeli z grupy A (ModelsA) wynik zapisywany jest do validationA.csv. Nastepnie po przejsciu do grupy B (ModelsB) wynik musi byc zapisywany do validationB.csv. Potem po zrobieniu modeli z grupy C (ModelsC) wynik musi byc zapisany do validationC.csv itd..
Bede wdzieczna za pomoc.
Kamil Bęczyński

Kamil Bęczyński R, SAS, analizy

Temat: jak zrobic funkcje dla modeli z roznych grup

Kama J.:
Dzieki Kamil za podjecie mojego problemu. Twoje rozwiazanie jest super dla modeli z grupy A - ModelsA, czy dla jakiejkolwiek jednej grupy. Ja chcialabym zeby po zrobieniu modeli z grupy A teraz automatycznie robione byly modele z grupy B - ModelsB, potem z grupyC - ModelsC, itd.
Chodzi o to jak zrobic zeby cos takiego bylo robione jak napisales, ale robione za kazdym razem dla kolejnych grup, w ktorych sa rozne modele, wiec Model1 z grupy ModelsA nie jest tym samym modelem co Model1 z ModelsB i tak dalej. Moze nie wyjasnilam tego dobrze za pierwszym razem.
Po zrobieniu tych czterech modeli z grupy A (ModelsA) wynik zapisywany jest do validationA.csv. Nastepnie po przejsciu do grupy B (ModelsB) wynik musi byc zapisywany do validationB.csv. Potem po zrobieniu modeli z grupy C (ModelsC) wynik musi byc zapisany do validationC.csv itd..
Bede wdzieczna za pomoc.

więc chodzi Ci o to, żeby funkcja dla argumentu `modelsX` zapisywała wynik do pliku `validationX.csv` ? Jeżeli tak to jest to dosyć proste do zrobienia pod warunkiem, że pod nazwą kryje się ciąg znaków o długości jednego znaku czyli A,B,C,...itd. ale również 4,d,v,...
Kama Jansen

Kama Jansen Student, Akademia
Medyczna w
Amsterdamie

Temat: jak zrobic funkcje dla modeli z roznych grup

Chodzi mi o to by zapisywac wynik do:
validationA dla modeli z grupy ModelsA
validationB dla modeli z grupy ModelsB
validationC dla modeli z grupy ModelsC
validationD dla modeli z grupy ModelsD

Zrobilam tak jak zaproponowales na poczatku, czyli:
reg_modele2(modelA1, modelA2, modelA3, modelA4)
i otrzymalam wynik w validationA.csv i to jest super:)

gdy zrobie
reg_modele2(modelB1, modelB2, modelB3, modelB4)
to wynik otrzymam rowniez w validationA, bo tak jest w funkcji reg_modele2

chcialabym zeby dla reg_modele2(modelB1, modelB2, modelB3, modelB4)
otrzymac wynik w validationB.csv

i dla reg_modele2(modelC1, modelC2, modelC3, modelC4)
otrzymac wynik w validationC.csv

i dla reg_modele2(modelD1, modelD2, modelD3, modelD4)
otrzymac wynik w validationD.csv

Bede wdzieczna za pomoc
Kamil Bęczyński

Kamil Bęczyński R, SAS, analizy

Temat: jak zrobic funkcje dla modeli z roznych grup

Kama J.:
Chodzi mi o to by zapisywac wynik do:
validationA dla modeli z grupy ModelsA
validationB dla modeli z grupy ModelsB
validationC dla modeli z grupy ModelsC
validationD dla modeli z grupy ModelsD

Zrobilam tak jak zaproponowales na poczatku, czyli:
reg_modele2(modelA1, modelA2, modelA3, modelA4)
i otrzymalam wynik w validationA.csv i to jest super:)

gdy zrobie
reg_modele2(modelB1, modelB2, modelB3, modelB4)
to wynik otrzymam rowniez w validationA, bo tak jest w funkcji reg_modele2

chcialabym zeby dla reg_modele2(modelB1, modelB2, modelB3, modelB4)
otrzymac wynik w validationB.csv

i dla reg_modele2(modelC1, modelC2, modelC3, modelC4)
otrzymac wynik w validationC.csv

i dla reg_modele2(modelD1, modelD2, modelD3, modelD4)
otrzymac wynik w validationD.csv

Bede wdzieczna za pomoc

Przepraszam, byłem przez tydzień z dala od komputera.

1. Teraz zrobiłem mały research i okazuje się, że podczas przekazywania obiektów jako argumentów funkcji gubiona jest ich nazwa, to znaczy `funkcja( x = nazwa_obiektu )` jeżeli chcemy przekazać obiekt o nazwie `nazwa_obiektu` do wnętrza funkcji `funkcja` to nazwa obiektu przypisanego do argumentu `x` zostaje bezpowrotnie utracona.
2. Stąd wydaje mi się, że jedynym rozwiązaniem jest rozwiązanie mało elegancki polegające na podaniu nazwy pliku `validationX.csv` jako argumentu funkcji `reg_modele2`

3. `reg_modele2` będzie teraz wyglądać następująco :

# domyślany plik zapisu ustawiłem na `"validationX.csv"`
reg_modele2 <- function(model1, model2, model3, model4, nazwa_pliku = "validationX.csv" )
{

#-C indexs
rc1 <- rcorr.cens(predict.cph(model1),Surv(agg$SurvT, agg$status))
rc2 <- rcorr.cens(predict.cph(model2),Surv(agg$SurvT, agg$status))
rc3 <- rcorr.cens(predict.cph(model3),Surv(agg$SurvT, agg$status))
rc4 <- rcorr.cens(predict.cph(model4),Surv(agg$SurvT, agg$status))

CstatCI(rc1)
CstatCI(rc2)
CstatCI(rc3)
CstatCI(rc4)

#-Validation
v1<-validate(model1, B = 100, dxy = T )
v2<-validate(model2, B = 100, dxy = T )
v3<-validate(model3, B = 100, dxy = T )
v4<-validate(model4, B = 100, dxy = T )

valid <- rbind(v1,v2,v3,v4)
ind.corr <- valid[c(1,8,15,22),]$corr

write.table(ind.corr, quote=T, row.names=F, append=F, file=nazwa_pliku, sep=";")
}

# przykladowe wywołanie :
reg_modele2(modelB1, modelB2, modelB3, modelB4, "validationB.csv" )

#,natomiast :
reg_modele2(modelB1, modelB2, modelB3, modelB4 )
# zapisze wynik do pliku `validationB.csv"

można również zrobić to wpisując mniej informacji ( krótki przykład ) :

a = 1:11
nazwa_pliku = "B"
write.table(a, paste( "validation", nazwa_pliku, ".csv", sep = "" ) )# `write.table` zapisze `a` do `validationB.csv` Kamil Bęczyński edytował(a) ten post dnia 29.04.13 o godzinie 11:20
Kama Jansen

Kama Jansen Student, Akademia
Medyczna w
Amsterdamie

Temat: jak zrobic funkcje dla modeli z roznych grup

Dzieki Kamil za pomoc, nie wiedzialam ze mozna nazwe pliku jako argument funkcji podac, super dzieki.
Kamil Bęczyński

Kamil Bęczyński R, SAS, analizy

Temat: jak zrobic funkcje dla modeli z roznych grup

Kama J.:
Dzieki Kamil za pomoc, nie wiedzialam ze mozna nazwe pliku jako argument funkcji podac, super dzieki.

to nie tyle nazwa pliku, co ciąg znaków, który podajemy w charakterze argumentu odpowiedniej funkcji - `write.csv`
w podobny sposób jako argument możemy podać również, funkcję, co bywa przydatne, na przykład :

f <-function(x, y, dzialanie){
dzialanie(x,y)
}

odejmowanie <- function(x,y)
x-y

dodawanie <- function(x,y)
x+y

f(5,3,odejmowanie ) # daje 2
f(5,3,dodawanie) # daje 8

Przykład jest mało przydatny :) Kamil Bęczyński edytował(a) ten post dnia 06.05.13 o godzinie 23:14

Następna dyskusja:

Jak napisac funkcje dla zmi...




Wyślij zaproszenie do