• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

unieke waarden

Status
Niet open voor verdere reacties.
Ik heb de indruk dat we door een gebrekkige analyse van TS en diens onvoldoende duidelijkheid over het te bereiken doel het bos in laten leiden of in een groep van 20000 verdwaalde duiven terchtkomen.
Als het de TS erom gaat per combinatie van 2 individuen vast te stellen in welke graad die verwant zijn, is het tweede werkblad volledig overbodig.
Aan de hand van de gegevens van ouders per individu (Sheet1) kan per individu een afstammingslijn gemaakt worden (zie macro)
Als die afstammingslijnen per individu in een dynamische tabel terechtkomen, kan de TS de gewenste 2 individuen filteren en krijgt dan meteen te zien welke ouders bij beide betrokken zijn.
Je kunt per stel een verwachtschapsscore berekenen, maar dat voegt niet zoveel meer toe.
In de tabel heb ik iedere generatie gescheiden door een pijplijn.
 

Bijlagen

  • __inteelt_snb.xlsb
    43,1 KB · Weergaven: 18
@snb
dat werkt blijkbaar heel snel
maar hoe komen de gegevens in kolom D en E, dat ken ik niet
 
In E en F. Bekijk de macro.

met 1 correctie:

Cells(2, 5).Resize(.Count, 2) = sp
 
ik zou er anders binnen de pipes nog voor iedere voorouder de genealogische nummering aan toevoegen, dat maakt het een stuk gemakkelijker om later de stamboom terug samen te stellen.

Verwantschapscores zeggen wel veel, want voor zover ik me herinner, is er hier wel nogal ingeteelt geweest en dan moet je alle (!) paden (van gemeenschappelijke ouders, grootouders, nonkels, tantes, broers, zusters, ... tot in generatie N) gaan langslopen en daar een gewicht aan geven en de boel sommeren. Een HEEL vervelend manueel werkje en ik zou niet weten hoe het te automatiseren in 123. Bovendien kan ik de logica van die "grafen" niet in 1 bondige zin kunnen weergeven. Je begint onderaan de stamboom, gaat omhoog in de vaderlijn totdat je iemand tegenkomt die ook in de moederlijn voorkomt, dan spring je naar daar en terug naar beneden en tel je het aantal lijnstukjes en het gewicht is dan 1/(2^(aantal lijnstukjes)). Als die voorouder het dan helemaal bond gemaakt heeft en zichzelf nog meerdere keren herhaald, dan is het helemaal leuk, want dan moet je nog met de vorige paden gaan rekening houden. Bon voor een bedovergrootvader wordt dat al snel 1/(2^8), dus een minimale bijdrage, maar voor een alomtegenwoordige stamvader moet je die route misschien tig keer tellen, ... .
Dat voor zover ik me de theorie van 40 jaar geleden herinner, dus er zitten misschien zwarte gaten in mijn verhaal.
Ik dacht me te herinneren dat je dat getal individueel onder de 0.03 (geen ouders, grootouders, broers, zusters, neven en nichten) wilde houden en voor de ganse populatie ???

Hoe zat dat weer met die nederlands gyneacoloog, die zijn patiënten bevruchtte met zijn eigen zaad en wat, 80(?) nakomelingen kreeg maar blijkbaar ook een erfelijke aandoening had.
Als die afstammelingen, half-broers & half-zusters, onbewust, ook nog eens zich zouden voortplanten, dan krijg je een zootje.
 
Laatst bewerkt:
Die kwalifikatie is op iedere voortplanting (zowel van planten, dieren als mensen) van toepassing, en daarmee niet meer onderscheidend.
Het onderescheid per generatie in de afstammingslijn lijkt me ook verstandig.
Ik heb geen idee welke criteria de TS wil aanleggen. Afhankelijk daarvan kun je een meer of minder complex algortime voor verwantschap bedenken.
 
@snb & @ cow18
alvast bedankt voor jullie meedenken
ik probeer nu eerst manueel met excel, als dat lukt zal het met een macro ook wel lukken
eerst probeer ik met de stamboom
ik probeer ook met het voorstel van snb
dit zal wel enkele uren, dagen of weken tijd vragen
 
heeft er iemand een oplossing voor

In "Inteelt_berekenen!P17" staat volgende formule
Code:
=ALS(ISFOUT(UNIEK(XML.FILTEREN("<x><y>"&SUBSTITUEREN(TEKST.COMBINEREN(",";WAAR;O17:O2063);",";"</y><y>")&"</y></x>";"//y");));"";UNIEK(XML.FILTEREN("<x><y>"&SUBSTITUEREN(TEKST.COMBINEREN(",";WAAR;O17:O2063);",";"</y><y>")&"</y></x>";"//y");))
deze geeft als resultaat een lijst van de dubbele waarden in bereik "Inteelt_berekenen!C17:M2063"

hoe kan men dit bekomen zonder gebruik te maken van de formules in de groene cellen "Inteelt_berekenen!O17:O2063"
 

Bijlagen

  • aantal uniek 170822.xlsm
    185,8 KB · Weergaven: 11
Waarom in M16 niet ?

PHP:
=COUNTA(M17:M2063)
 
omdat er formules in staan, het resultaat "" mag niet meegeteld worden

PHP:
=AANTALARG(M17:M2063)
geeft 1024 ipv 728
 
Ofwel

Code:
=AANTAL.ALS(M17:M2063;"><")
of
=AANTAL.ALS(M17:M2063;"?*")
 
Als ik het goed begrijp kan alles in 1 formule voor je aantal dubbele waarden.
De werkelijke hoeveelheid dubbelingen zijn dit niet. Nu tel je alleen per unieke waarde of deze meerdere keren voorkomt. Wat als deze 10 keer voorkomt?

Code:
=SOM(N(AANTALLEN.ALS(C17:M2063;XML.FILTEREN("<x><y>"&TEKST.COMBINEREN("</y><y>";;C17:M2063)&"</y></x>";"//y[not(preceding::y=.)]"))>1))
 
Laatst bewerkt:
@JEC

bedoeling is om een lijst te krijgen met de dubbele waarden in bereik "Inteelt_berekenen!C17:M2063"
 
Ik kan deze thread niet meer volgen.
Ik dacht dat deze ging over het bepalen van het aantal unieke waarden, maar nu lijkt deze te gaan over aantal dubbele waarden???

Het aantal dubbele (de eerste dubbele niet meegeteld) is toch aantal waarden minus aantal unieke waarden. [Dus vraag is al beantwoord met bepaling aantal unieke waarden]
Het aantal dubbele (inclusief de eerste dubbele) is toch aantal waarden minus aantal distinct waarden? [Dus een ander onderwerp]
 
Laatst bewerkt:
@HD

Zoals eerder al aangegeven is dit een klassieke 'salami'draad.
De TS maakt zijn uiteindelijke doel niet duidelijk
Hij slaat een bepaald pad in omdat doel te bereiken: de overwegingen voor dat pad worden angstvallig geheim gehouden.
Bij iedere stap op dat pad komt de TS deelproblemen tegen.
Die legt hij voor aan het forum.
Zo gauw er een 'oplossing' voor het 'probleem' is gevonden, bedenkt de TS een ander pad zonder daarvoor ons enige overweging te openbaren; daarna herhaalt zich het proces van de deel'problemen' en de deel'oplossingen'.
 
inteelt

ik zou er anders binnen de pipes nog voor iedere voorouder de genealogische nummering aan toevoegen, dat maakt het een stuk gemakkelijker om later de stamboom terug samen te stellen.

Verwantschapscores zeggen wel veel, want voor zover ik me herinner, is er hier wel nogal ingeteelt geweest en dan moet je alle (!) paden (van gemeenschappelijke ouders, grootouders, nonkels, tantes, broers, zusters, ... tot in generatie N) gaan langslopen en daar een gewicht aan geven en de boel sommeren. Een HEEL vervelend manueel werkje en ik zou niet weten hoe het te automatiseren in 123. Bovendien kan ik de logica van die "grafen" niet in 1 bondige zin kunnen weergeven. Je begint onderaan de stamboom, gaat omhoog in de vaderlijn totdat je iemand tegenkomt die ook in de moederlijn voorkomt, dan spring je naar daar en terug naar beneden en tel je het aantal lijnstukjes en het gewicht is dan 1/(2^(aantal lijnstukjes)). Als die voorouder het dan helemaal bond gemaakt heeft en zichzelf nog meerdere keren herhaald, dan is het helemaal leuk, want dan moet je nog met de vorige paden gaan rekening houden. Bon voor een bedovergrootvader wordt dat al snel 1/(2^8), dus een minimale bijdrage, maar voor een alomtegenwoordige stamvader moet je die route misschien tig keer tellen, ... .
Dat voor zover ik me de theorie van 40 jaar geleden herinner, dus er zitten misschien zwarte gaten in mijn verhaal.
Ik dacht me te herinneren dat je dat getal individueel onder de 0.03 (geen ouders, grootouders, broers, zusters, neven en nichten) wilde houden en voor de ganse populatie ???

Hoe zat dat weer met die nederlands gyneacoloog, die zijn patiënten bevruchtte met zijn eigen zaad en wat, 80(?) nakomelingen kreeg maar blijkbaar ook een erfelijke aandoening had.
Als die afstammelingen, half-broers & half-zusters, onbewust, ook nog eens zich zouden voortplanten, dan krijg je een zootje.

Beste cow18,

van "grafen" had ik nog nooit gehoord, ik heb even gegoogled en dacht ik zal het maar opgeven.
Verleden week wou ik toch terug proberen.
Hierbij het resultaat.
Het zal waarschijnlijk nog wel niet helemaal juist zijn.
In de kolommen P-Q en R van blad Dieren_Bib ziet U verschillen tussen de verschillende programma's.

Heeft U even tijd om te kijken?

mvg

Vermonden Frans
 

Bijlagen

  • voor cow18.xlsm
    514 KB · Weergaven: 18
ik zou vooral niet proberen dat zelf te gaan berekenen ! Ofwel krijg je grijs haar ofwel trek je het uit van pure miserie !!!
Ik zou een nieuwe vraag op deze site openen en vragen of er iemand voor jou (ik kan dit zelf niet, sorry, geen ervaring) de data van je werkblad Nabssar!E17:E2063 (misschien niet dat ganse bereik als je stamboom zo ver niet reikt, maar anders zijn het toch maar lege vakken) kan kopieren en plakken in dat tekstkader "TEXTAREA" links in http://www.nabssar.org/coi_calculator/index.html, dan even op de knop "CALCULATE" kan klikken en daarop de waarde F van inbreeding voor je kan uitlezen en terugbrengen naar je werkblad. Als extra fantasietje zou het mooi zijn dat die ganse opsomming meegenomen wordt, want dat geeft heel inzichtelijk in aflopende volgorde het aandeel van elke voorouder in die F-waarde mee.Bekijk bijlage 366398. Geef mee dat ze dit mogen kopieren in Nabssar!G17:G...
Dan kan je zelf met een andere macro een lusje bouwen, eerst de stamboom aanpassen voor een volgend dier in het werkblad "inteelt berekenen" en deze macro aanroepen om voor ieder dier die F te berekenen.

Ik zou me niet al te blind staren op eventuele kleine verschillen tussen ZooEasy and Nabssar, dat zal ergens in de definitie liggen. Dat jij er niet komt met je eigen berekeningen, dat zal zijn omdat je alle paden (=grafen) niet netjes afgelopen hebt. Zie Nearco in bijgaande schermafdruk, zijn (eigenlijk onbeduidend) aandeel is de som van 5 verschillende paden = 5 verschillende lussen om vanaf je dier opstijgend via de vaderlijn + jump naar de moederlijn terug te komen bij je dier (of vice versa om genderneutraal te antwoorden).
Maar dat aflopend lijstje van die voorouder die meest aandeel heeft in die F-waarde, dat is HET !!! Wat een bolletje en een pijltje wil zeggen, dat moet je maar uitzoeken in de help.
Bovendien, voor zover ik me herinner, een F=0.94% zoals in bijgaande schermafdruk, dat is okay, dat doet geen bellen afgaan.
 

Bijlagen

  • Schermafbeelding 2022-09-21 093542.gif
    Schermafbeelding 2022-09-21 093542.gif
    14,3 KB · Weergaven: 17
Laatst bewerkt:
Kom op, niet je (franse hang)oren laten hangen ;)
 
haha, nee, ik zou iets kunnen rommelen in explorer, maar dat is zo gedateerd, dat je plat zou gaan van het lachen.
 
Zoals cow18 in bericht#56 voorstelde.
Met een recursieve sub die de stamboom maakt.

Code:
Public sJSON As String

Public Sub Main()
    Dim rRange As Range

    With Range("A1").CurrentRegion
        Set rRange = .Offset(1, 1).Resize(.Rows.Count - 1, .Columns.Count - 1)
    End With

    With CreateObject("InternetExplorer.Application")
        .Visible = True
        .Navigate "http://www.nabssar.org/coi_calculator/index.html"
        Do
            DoEvents
        Loop While .Busy And .ReadyState <> 4
        Sleep 200

        For Each oRow In rRange.Rows
            oRow.Cells(4) = "Error"

            sChild = oRow.Cells(1)
            sJSON = "{" & vbCrLf
            SireDamJSON rRange, sChild
            sJSON = Mid(sJSON, 1, Len(sJSON) - 3)

            With .Document
                .getElementById("textarea").Value = sJSON
                Sleep 200

                Set mouseDownEvent = .createEvent("MouseEvent")
                mouseDownEvent.initEvent "mousedown", True, False
                .getElementById("populate").dispatchEvent mouseDownEvent
                Sleep 200
                .getElementById("calculate").dispatchEvent mouseDownEvent
                Sleep 400

                oRow.Cells(4) = Split(.getElementById("result").innertext, "=")(1)
                Sleep 200
            End With
        Next
        .Quit
    End With
End Sub

Private Sub SireDamJSON(rRange As Range, ByVal sChild As String) 'am_2022
    lChildRow = Application.Match(sChild, rRange.Columns(1), 0)
    If Not IsError(lChildRow) Then
        sChildSire = rRange.Rows(lChildRow).Cells(2)
        sJSON = sJSON & Chr(34) & "s" & Chr(34) & ": {" & vbCrLf
        SireDamJSON rRange, sChildSire
        sChildDam = rRange.Rows(lChildRow).Cells(3)
        sJSON = sJSON & Chr(34) & "d" & Chr(34) & ": {" & vbCrLf
        SireDamJSON rRange, sChildDam
    End If
    sJSON = sJSON & Chr(34) & "name" & Chr(34) & ": " & Chr(34) & sChild & Chr(34) & vbCrLf
    sJSON = sJSON & " }," & vbCrLf
End Sub
 

Bijlagen

  • helpmij suvermo nabssar.xlsm
    28,7 KB · Weergaven: 17
Laatst bewerkt:
waw, en ik die dacht dat internet explorer niet meer mocht, wegens niet meer ondersteunt ???
Het werkt wel netjes en razend snel.
1e opmerking, indien een voorouder "onbekend" is, dan geef je die niet mee of voeg je er een indexnummer aan toe, Onbekend1, Onbekend2, etc. Anders gaat die site er van uit dat het dezelfde gemeenschappelijke voorouder is en wordt er voor die "onbekende" een percentage inteelt toegekend.
2e opmerking, ik kan zo snel niet meelezen, maar ik dacht soms hetzelfde dier zowel als vader en als moeder staan, dat zou wel straf zijn, dus dat zal wel ergens onderweg fout opgegeven zijn.

Maar anders netjes ...
Zou het moeilijk zijn om uit je ("result").innertext vanaf een F>3% het aandeel van de strafste voorouder mee te geven, dus de 1e lijn onder die F (in het scherm hierboven 0.24% van Bold Ruler)
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan