Näytä vastaamattomat viestit | Näytä aktiiviset viestiketjut Tänään on 19 Marras 2017 17:08



Vastaa viestiin  [ 10 viestiä ] 
 Haaste koodaajille: IBS-laskuri 
Kirjoittaja Viesti
Ylihärmiö
Ylihärmiö
Avatar

Liittynyt: 14 Helmi 2011 04:02
Viestit: 6577
Viesti Haaste koodaajille: IBS-laskuri
Näyttää pahasti siltä, että pareittaisia IBS-arvoja saa laskettua ainoastaan mutkikkaasti käytettävillä ohjelmilla kuten PLINK, joiden toimimaan saaminen vaatii nelivuotisen koulutuksen.

Esitänkin nyt haasteen koodaajille: ei kai voi olla kovinkaan hankalaa vääntää kasaan koodinpätkää, joka suoriutuisi tällaisesta haasteesta?

Toimitus on sinänsä hyvin yksinkertainen:

1. Family Finder -testin data näyttää tältä Excelillä avattuna:

Kuva

Jos alleelit olisivatkin nätisti omissa sarakkeissaan, Exceliä voisi ehkä hyödyntää laskemisessa, mutta kun ei: kaikki tieto on pitänyt pakata yhteen ja samaan sarakkeeseen.

2. Tarkoitus olisi päästä vertaamaan kahden eri henkilön näytteitä, ja on ihan sama voiko vertailun tehdä kahtena eri tiedostona vai pitääkö tiedostot yhdistää (joko henkilön tai ohjelman toimesta).

3. Käytännössä jokaista locusta eli riviä verrataan näiden kahden henkilön välillä: jos A:lla on tulos GG ja B:llä tulos AA, tulos on 0, jos GG ja AG, tulos on 1, ja jos GG ja GG, tulos on 2. (Sama tietysti myös C- ja T-alleelien kanssa.) Eli vain se merkitsee, montako samaa emästä henkilöt siinä kohden jakavat.

4. Sen jälkeen tarvitsisi vain laskea kaikkien rivien (noin 700 000!) keskiarvo. Sisaruksilla sen pitäisi olla noin 1 (locuskohtainen todennäköisyys 0 = 0,25; 1 = 0,5; 2 = 0,25), ja samaan väestöön kuuluvilla suunnilleen 0,8 ja eri väestöihin kuuluvilla sitäkin vähemmän.

5. Onnistuisiko? Mikä siinä olisi vaikeinta?

_________________
"Jokainen elämä on uusi laiffi." (Nykäsestä sovittanut Häkkinen)

Y-DNA: N1c1 (Mikael Häkkinen, s. 1728 Nurmes)
mtDNA: H5a1e (Elina Mäkilä, s. 1757 Kittilä)


11 Heinä 2012 01:52
Profiili WWW
Kielevä karjalainen
Kielevä karjalainen
Avatar

Liittynyt: 22 Helmi 2011 22:45
Viestit: 967
Paikkakunta: Häslinki
Viesti 
Excel tai mikä tahansa muukin taulukkolaskentaohjelma osaa kyllä erotella sarakkeet: kaivele valikoista "Import", avaa raakadata tätä kautta, ja aseta pilkku sarake-erottimeksi.

Tämän jälkeen pulmaksi tulee enää määritellä funktio, joka antaa kahdesta kirjainkoodista oikean numerotuloksen. Karkeasti ottaen seuraava toimisi:

1) Korvataan GCAT numeraaleilla 0123 (tai yhtä hyvin 9418, jos huvittaa) (hoituu jo ihan Notepadin etsi-ja-korvaa-toiminnolla).
2) Sijoitetaan vertailtavat tulokset samaan taulukkoon
3) Lasketaan kustakin 'kromosomiluvusta' X seuraavat: floor(x/10) ja x mod 10 (tämä erottelee 1. ja 2. numerot so. emäkset erilleen).
4) Vertaillaan edellisiä pareittain. Looginen EQUALS tms. funktio pitäisi löytyä joka antaa suoraan 0 jos syötteillä on eri arvo, 1 jos sama.
5) Lasketaan pareittaiset vertailut yhteen. Tästä tulee haluttu 0/1/2-arvo.
6) Lasketaan edellisistä keskiarvo yli kaikkien rivien.

Itse käytän kyllä lähinnä OpenOfficea joten en nyt osaa antaa valmista Excel-funktiota mutta joo, tämä on täysin taulukkolaskettavissa oleva ongelma.


14 Heinä 2012 18:58
Profiili
Ylihärmiö
Ylihärmiö
Avatar

Liittynyt: 14 Helmi 2011 04:02
Viestit: 6577
Viesti 
Pystynen kirjoitti:
Excel tai mikä tahansa muukin taulukkolaskentaohjelma osaa kyllä erotella sarakkeet: kaivele valikoista "Import", avaa raakadata tätä kautta, ja aseta pilkku sarake-erottimeksi.

Tämän jälkeen pulmaksi tulee enää määritellä funktio, joka antaa kahdesta kirjainkoodista oikean numerotuloksen. Karkeasti ottaen seuraava toimisi:

1) Korvataan GCAT numeraaleilla 0123 (tai yhtä hyvin 9418, jos huvittaa) (hoituu jo ihan Notepadin etsi-ja-korvaa-toiminnolla).
2) Sijoitetaan vertailtavat tulokset samaan taulukkoon
3) Lasketaan kustakin 'kromosomiluvusta' X seuraavat: floor(x/10) ja x mod 10 (tämä erottelee 1. ja 2. numerot so. emäkset erilleen).
4) Vertaillaan edellisiä pareittain. Looginen EQUALS tms. funktio pitäisi löytyä joka antaa suoraan 0 jos syötteillä on eri arvo, 1 jos sama.
5) Lasketaan pareittaiset vertailut yhteen. Tästä tulee haluttu 0/1/2-arvo.
6) Lasketaan edellisistä keskiarvo yli kaikkien rivien.

Itse käytän kyllä lähinnä OpenOfficea joten en nyt osaa antaa valmista Excel-funktiota mutta joo, tämä on täysin taulukkolaskettavissa oleva ongelma.

Huikeaa, kiitos!
Ainoastaan kohtia 3 ja 4 en ymmärtänyt. Mitä ovat floor ja mod ja miten ne saadaan ohjelmasta esiin?

_________________
"Jokainen elämä on uusi laiffi." (Nykäsestä sovittanut Häkkinen)

Y-DNA: N1c1 (Mikael Häkkinen, s. 1728 Nurmes)
mtDNA: H5a1e (Elina Mäkilä, s. 1757 Kittilä)


14 Heinä 2012 20:26
Profiili WWW
Ylihärmiö
Ylihärmiö
Avatar

Liittynyt: 14 Helmi 2011 04:02
Viestit: 6577
Viesti 
Ihan pakko hehkuttaa, että tämä on toteutumassa!
Testivaihe on menossa, ja näyttää kovasti siltä että lähiaikoina saamme helppokäyttöisen IBS-laskurin! :voitto: :aalto:

_________________
"Jokainen elämä on uusi laiffi." (Nykäsestä sovittanut Häkkinen)

Y-DNA: N1c1 (Mikael Häkkinen, s. 1728 Nurmes)
mtDNA: H5a1e (Elina Mäkilä, s. 1757 Kittilä)


25 Heinä 2012 00:20
Profiili WWW
Kielevä karjalainen
Kielevä karjalainen
Avatar

Liittynyt: 22 Helmi 2011 22:45
Viestit: 967
Paikkakunta: Häslinki
Viesti 
Jaska kirjoitti:
Ihan pakko hehkuttaa, että tämä on toteutumassa!

Hmm, eli saitko lisä-apua toisaalta vai jatkanko erikoisfunktioiden sielunelämän selvennystä?

Niin ja... tuli mieleen että ehkä haluatkin emäksiä vertailtavan järjestyksestä riippumatta? Jos AG + GA onkin kakkosen osuma tai AT + TG ykkösen, niin edellä esittämääni lähestymistapaan tulisi muutenkin pari lisämutkaa.


30 Heinä 2012 12:44
Profiili
Ylihärmiö
Ylihärmiö
Avatar

Liittynyt: 14 Helmi 2011 04:02
Viestit: 6577
Viesti 
Pystynen kirjoitti:
Jaska kirjoitti:
Ihan pakko hehkuttaa, että tämä on toteutumassa!

Hmm, eli saitko lisä-apua toisaalta vai jatkanko erikoisfunktioiden sielunelämän selvennystä?

Sain apua, foorumilla notkui koodaaja... :)
Mutta erikoisfunktioiden ymmärtäminen varmasti mahdollistaisi monenlaista hyödyllistä, joten mielelläni niistäkin kuulisin lisää.

Pystynen kirjoitti:
Niin ja... tuli mieleen että ehkä haluatkin emäksiä vertailtavan järjestyksestä riippumatta? Jos AG + GA onkin kakkosen osuma tai AT + TG ykkösen, niin edellä esittämääni lähestymistapaan tulisi muutenkin pari lisämutkaa.

Ahaa... Joo, noin sen pitäisi mennä.

_________________
"Jokainen elämä on uusi laiffi." (Nykäsestä sovittanut Häkkinen)

Y-DNA: N1c1 (Mikael Häkkinen, s. 1728 Nurmes)
mtDNA: H5a1e (Elina Mäkilä, s. 1757 Kittilä)


30 Heinä 2012 17:50
Profiili WWW
Kielevä karjalainen
Kielevä karjalainen
Avatar

Liittynyt: 22 Helmi 2011 22:45
Viestit: 967
Paikkakunta: Häslinki
Viesti 
Jaska kirjoitti:
Mutta erikoisfunktioiden ymmärtäminen varmasti mahdollistaisi monenlaista hyödyllistä, joten mielelläni niistäkin kuulisin lisää.


Nämä ovat tiedonkäsittelyssä ihan yleissivistäviä, joten tässä pikaesittely:
Lattiafunktio. Tämä ei tee mitään sen kummempaa kuin pyöristää alaspäin. Tunnetaan englanniksi yleensä nimellä "floor". Merkitään joskus alapuolisilla hakasulkeilla: ⎣5,85⎦ = 5, jne.
Ylöspäin pyöristää vastaavasti kattofunktio ("ceiling"). ⎡3,01⎤ = 4, jne.

Näiden avulla voi myös irroittaa luvusta sen desimaalit. Esim. 1,4158 ⎣1,4158⎦ = 0,4158. Muita kikkoja esim. ⎡x⎤ ⎣x⎦ = 1 jos x ei ole kokonaisluku, 0 jos on.

Modulaatio. Tunnetaan kansanomaisemmin nimellä "jakojäännös". Merkitään esim. "8 mod 3 = 2" (jakojäännös jaettaessa 8 3:llä on 2; myös: 8 modulo 3 on 2, 8 on kongruentti 2:n kanssa modulo 3), tai triplayhtäläisyysmerkillä: "8 ≣ 2 (mod 3)", joskus myös yläviivoja ja alaindeksejä käyttäen: "8̅₃ = 2̅₃". Noista ensimmäinen on se jota yleensä näkee varsinaisena funktiona. Laskentaohjelmissa se antaa nimenomaan pienimmän jakojäännöksen; muut ovat pikemminkin merkintöjä ekvivalenttiudesta, eli pätee ihan hyvin 8 ≣ 32 ≣ 795 ≣ (mod 3)

Mod 10 on sikäli kätevä, että sillä saa luvusta poistettua kaiken ykkösiä suuremman, esim. 125 mod 10 = 5. Edellä mainitunlaisella operaatiolla saa myös vastaavasti poistettua vain ykköset: 125 (125 mod 10) = 120. (Tai kuten aluksi ehdotin: voi jakaa kymmenellä ja käyttää lattiafunktiota.)

Loogiset funktiot. Nämä käyttävät ns. Boolen algebraa: luku 1 on "tosi", luku 0 on "epätosi".
Väitteen (A ja B) totuusarvo voidaan nyt "laskea" kaavalla A·B: tulos on 1 vain kun sekä A että B ovat 1. Samoin (A tai B) lasketaan modifioidulla yhteenlaskulla, jossa 1 "plus" 1 on edelleen 1. (A poissulkeva tai B) on sekin oma funktionsa, yleensä jotain tyyliin "A xor B". "Yhtäsuuruusfunktio" sitten on 1 jos A = B: "A equals B" tai sulkumerkinnällä "equals(A,B)". Tarkat kirjoitusasut näille löytää ohjelman käyttöohjeista.

Yhtäsuuruusfunktio usein toimii myös muilla syötteillä, ja voi siis esim. verrata equals(3,9) = 0 tai equals(14,14) = 1 (joskus jopa tyyliin equals(banaani,herukka) = 0). Ihan pelkästään tämänkin avulla saisi IBS-arvot irti, kunhan ensin jotenkin erottelee lokusten yksittäiset kromosomit eri sarakkeisiin, pitäisi vain verrata 1. näytteen 1. saraketta molempiin 2. näytteen sarakkeisiin jne. ja lopuksi hieman sieventää tuloksia AA vs. AA antaisi kaikkien pareittaisten osumien summaksi 4 (kun pitäisi olla 2), AG vs. AA antaisi 2 (kun pitäisi olla 1). (Eräs helppo ratkaisu olisi jakaa kahdella ja sitten näyttää kattofunktiota. 4 > 2, 2 >1, 1 > ½ > 1, 0 > 0.)

Edellä en maininnut, mutta usein kätevä on myös merkkifunktio sgn(x): tämä antaa tulokseksi 1 jos luku on positiivinen, -1 jos se on negatiivinen, ja 0 jos se on 0.


12 Elo 2012 00:39
Profiili
Ylihärmiö
Ylihärmiö
Avatar

Liittynyt: 14 Helmi 2011 04:02
Viestit: 6577
Viesti 
Kiitos, noista voi joskus olla hyötyä.

Et sattuisi keksimään, miten Excel osaisi valita kahden vertailtavan sarakkeen tai rivin luvuista aina pienemmän arvon?

_________________
"Jokainen elämä on uusi laiffi." (Nykäsestä sovittanut Häkkinen)

Y-DNA: N1c1 (Mikael Häkkinen, s. 1728 Nurmes)
mtDNA: H5a1e (Elina Mäkilä, s. 1757 Kittilä)


15 Elo 2012 00:29
Profiili WWW
Hiljainen hämäläinen
Hiljainen hämäläinen

Liittynyt: 18 Heinä 2011 15:31
Viestit: 54
Viesti 
Esim.

=+MIN(D18:E18)

t.ajvxyz


15 Elo 2012 19:35
Profiili
Ylihärmiö
Ylihärmiö
Avatar

Liittynyt: 14 Helmi 2011 04:02
Viestit: 6577
Viesti 
ajvxyz kirjoitti:
Esim.

=+MIN(D18:E18)

t.ajvxyz

Sehän toimii! Kiitos, Mr. Mxyzptlk!

_________________
"Jokainen elämä on uusi laiffi." (Nykäsestä sovittanut Häkkinen)

Y-DNA: N1c1 (Mikael Häkkinen, s. 1728 Nurmes)
mtDNA: H5a1e (Elina Mäkilä, s. 1757 Kittilä)


16 Elo 2012 02:38
Profiili WWW
Näytä viestit ajalta:  Järjestä  
Vastaa viestiin   [ 10 viestiä ] 

Paikallaolijat

Käyttäjiä lukemassa tätä aluetta: Ei rekisteröityneitä käyttäjiä ja 1 vierailijaa


Et voi kirjoittaa uusia viestejä
Et voi vastata viestiketjuihin
Et voi muokata omia viestejäsi
Et voi poistaa omia viestejäsi

Etsi tätä:
Hyppää:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by STSoftware.
Käännös, Lurttinen, www.phpbbsuomi.com uncommitted-decoy