Հոդվածներ

8.1E. Վարժություններ - մաթեմատիկա


Պրակտիկան դարձնում է կատարյալ

Հաջորդ վարժություններում որոշեք այն արժեքները, որոնց համար չի սահմանվում ռացիոնալ արտահայտությունը:

Օրինակ ( PageIndex {49} )

  1. ( frac {2x} {z} )
  2. ( frac {4p − 1} {6p − 5} )
  3. ( frac {n − 3} {n ^ 2 + 2n − 8} )
Պատասխանել
  1. z = 0
  2. (p = frac {5} {6} )
  3. n = −4, n = 2

Օրինակ ( PageIndex {50} )

  1. ( frac {10m} {11n} )
  2. ( frac {6y + 13} {4y − 9} )
  3. ( frac {b − 8} {b ^ 2−36} )

Օրինակ ( PageIndex {51} )

  1. ( frac {4x ^ {2} y} {3y} )
  2. ( frac {3x − 2} {2x + 1} )
  3. ( frac {u − 1} {u ^ 2−3u − 28} )
Պատասխանել
  1. y = 0
  2. (x = - frac {1} {2} )
  3. u = −4, u = 7

Օրինակ ( PageIndex {52} )

  1. ( frac {5pq ^ {2}} {9q} )
  2. ( frac {7a 4} {3a + 5} )
  3. ( frac {1} {x ^ 2−4} )

Գնահատեք ռացիոնալ արտահայտությունները

Հաջորդ վարժություններում գնահատեք տրված արժեքների ռացիոնալ արտահայտությունը:

Օրինակ ( PageIndex {53} )

( frac {2x} {x − 1} )

  1. x = 0
  2. x = 2
  3. x = −1
Պատասխանել
  1. 0
  2. 4
  3. 1

Օրինակ ( PageIndex {54} )

( frac {4y − 1} {5y 3} )

  1. y = 0
  2. y = 2
  3. y = −1

Օրինակ ( PageIndex {55} )

( frac {2p + 3} {p ^ 2 + 1} )

  1. p = 0
  2. p = 1
  3. p = −2
Պատասխանել
  1. 3
  2. ( frac {5} {2} )
  3. (- frac {1} {5} )

Օրինակ ( PageIndex {56} )

( frac {x + 3} {2−3x} )

  1. x = 0
  2. x = 1
  3. x = −2

Օրինակ ( PageIndex {57} )

( frac {y ^ 2 + 5y + 6} {y ^ 2−1} )

  1. y = 0
  2. y = 2
  3. y = −2
Պատասխանել
  1. −6
  2. ( frac {20} {3} )
  3. 0

Օրինակ ( PageIndex {58} )

( frac {z ^ 2 + 3z − 10} {z ^ 2−1} )

  1. z = 0
  2. z = 2
  3. z = −2

Օրինակ ( PageIndex {59} )

( frac {a ^ 2−4} {a ^ 2 + 5a + 4} )

  1. ա = 0
  2. ա = 1
  3. a = −2
Պատասխանել
  1. −1
  2. (- frac {3} {10} )
  3. 0

Օրինակ ( PageIndex {60} )

( frac {b ^ 2 + 2} {b ^ 2−3b − 4} )

  1. b = 0
  2. b = 2
  3. b = −2

Օրինակ ( PageIndex {61} )

( frac {x ^ 2 + 3xy + 2y ^ 2} {2x ^ {3} y} )

  1. x = 1, y = −1
  2. x = 2, y = 1
  3. x = −1, y = −2
Պատասխանել
  1. 0
  2. ( frac {3} {4} )
  3. ( frac {15} {4} )

Օրինակ ( PageIndex {62} )

( frac {c ^ 2 + cd − 2d ^ 2} {cd ^ {3}} )

  1. c = 2, d = −1
  2. c = 1, d = −1
  3. c = −1, d = 2

Օրինակ ( PageIndex {63} )

( frac {m ^ 2−4n ^ 2} {5mn ^ 3} )

  1. m = 2, n = 1
  2. m = −1, n = −1
  3. m = 3, n = 2
Պատասխանել
  1. 0
  2. (- frac {3} {5} )
  3. (- frac {7} {20} )

Օրինակ ( PageIndex {64} )

( frac {2s ^ {2} t} {s ^ 2−9t ^ 2} )

  1. s = 4, t = 1
  2. s = −1, t = −1
  3. s = 0, t = 2

​​​​​​​Պարզեցրեք ռացիոնալ արտահայտությունները

Հաջորդ վարժություններում պարզեցրեք:

Օրինակ ( PageIndex {65} )

(- frac {4} {52} )

Պատասխանել

(- frac {1} {13} )

Օրինակ ( PageIndex {66} )

(- frac {44} {55} )

Օրինակ ( PageIndex {67} )

( frac {56} {63} )

Պատասխանել

( frac {8} {9} )

Օրինակ ( PageIndex {68} )

( frac {65} {104} )

Օրինակ ( PageIndex {69} )

( frac {6ab ^ {2}} {12a ^ {2} b} )

Պատասխանել

( frac {b} {2ab} )

Օրինակ ( PageIndex {70} )

( frac {15xy ^ {3}} {x ^ {3} y ^ {3}} )

Օրինակ ( PageIndex {71} )

( frac {8m ^ {3} n} {12mn ^ 2} )

Պատասխանել

( frac {2m ^ 2} {3n} )

Օրինակ ( PageIndex {72} )

( frac {36v ^ {3} w ^ 2} {27vw ^ 3} )

Օրինակ ( PageIndex {73} )

( frac {3a + 6} {4a + 8} )

Պատասխանել

( frac {3} {4} )

Օրինակ ( PageIndex {74} )

( frac {5b + 5} {6b + 6} )

Օրինակ ( PageIndex {75} )

( frac {3c − 9} {5c − 15} )

Պատասխանել

( frac {3} {5} )

Օրինակ ( PageIndex {76} )

( frac {4d + 8} {9d + 18} )

Օրինակ ( PageIndex {77} )

( frac {7m + 63} {5m + 45} )

Պատասխանել

( frac {7} {5} )

Օրինակ ( PageIndex {78} )

( frac {8n − 96} {3n − 36} )

Ercորավարժություններ ( PageIndex {79} )

( frac {12p − 240} {5p − 100} )

Պատասխանել

( frac {12} {5} )

Օրինակ ( PageIndex {80} )

( frac {6q + 210} {5q + 175} )

Օրինակ ( PageIndex {81} )

( frac {a ^ 2 a − 12} {a ^ 2−8a + 16} )

Պատասխանել

( frac {a + 3} {a − 4} )

Օրինակ ( PageIndex {82} )

( frac {x ^ 2 + 4x − 5} {x ^ 2−2x + 1} )

Օրինակ ( PageIndex {83} )

( frac {y ^ 2 + 3y − 4} {y ^ 2−6y + 5} )

Պատասխանել

( frac {y + 4} {y − 5} )

Օրինակ ( PageIndex {84} )

( frac {v ^ 2 + 8v + 15} {v ^ 2 − v − 12} )

Օրինակ ( PageIndex {85} )

( frac {x ^ 2−25} {x ^ 2 + 2x − 15} )

Պատասխանել

( frac {x − 5} {x − 3} )

Օրինակ ( PageIndex {86} )

( frac {a ^ 2−4} {a ^ 2 + 6a 16} )

Օրինակ ( PageIndex {87} )

( frac {y ^ 2−2y − 3} {y ^ 2−9} )

Պատասխանել

( frac {y + 1} {y + 3} )

Օրինակ ( PageIndex {88} )

( frac {b ^ 2 + 9b + 18} {b ^ 2−36} )

Օրինակ ( PageIndex {89} )

( frac {y ^ 3 + y ^ 2 + y + 1} {y ^ 2 + 2y + 1} )

Պատասխանել

( frac {y ^ 2 + 1} {y + 1} )

Օրինակ ( PageIndex {90} )

( frac {p ^ 3 + 3p ^ 2 + 4p + 12} {p ^ 2 + p − 6} )

Օրինակ ( PageIndex {91} )

( frac {x ^ 3−2x ^ 2−25x + 50} {x ^ 2−25} )

Պատասխանել

x − 2

Օրինակ ( PageIndex {92} )

( frac {q ^ 3 + 3q ^ 2−4q − 12} {q ^ 2−4} )

Օրինակ ( PageIndex {93} )

( frac {3a ^ 2 + 15a} {6a ^ 2 + 6a 36} )

Պատասխանել

( frac {a (a + 5)} {2 (a + 3) (a − 2)} )

Օրինակ ( PageIndex {94} )

( frac {8b ^ 2−32b} {2b ^ 2−6b − 80} )

Օրինակ ( PageIndex {95} )

( frac {−5c ^ 2−10c} {- 10c ^ 2 + 30c + 100} )

Պատասխանել

( frac {c} {2 (գ − 5)} )

Օրինակ ( PageIndex {96} )

( frac {4d ^ 2−24d} {2d ^ 2−4d 48} )

Օրինակ ( PageIndex {97} )

( frac {3m ^ 2 + 30m + 75} {4m ^ 2−100} )

Պատասխանել

( frac {3 (մ +5)} {4 (մ − 5)} )

Օրինակ ( PageIndex {98} )

( frac {5n ^ 2 + 30n + 45} {2n ^ 2−18} )

Օրինակ ( PageIndex {99} )

( frac {5r ^ 2 + 30r − 35} {r ^ 2−49} )

Պատասխանել

( frac {5 (r − 1)} {r + 7} )

Օրինակ ( PageIndex {100} )

( frac {3s ^ 2 + 30s + 72} {3s ^ 2−48} )

Օրինակ ( PageIndex {101} )

( frac {t ^ 3−27} {t ^ 2−9} )

Պատասխանել

( frac {t ^ 2 + 3t + 9} {t + 3} )

Օրինակ ( PageIndex {102} )

( frac {v ^ 3−1} {v ^ 2−1} )

Օրինակ ( PageIndex {103} )

( frac {w ^ 3 + 216} {w ^ 2−36} )

Պատասխանել

( frac {w ^ 2−6w + 36} {w − 6} )

Օրինակ ( PageIndex {104} )

( frac {v ^ 3 + 125} {v ^ 2−25} )

Պարզեցրեք ռացիոնալ արտահայտությունները հակառակ գործոններով

Հաջորդ վարժություններում պարզեցրեք յուրաքանչյուր ռացիոնալ արտահայտությունը:

Օրինակ ( PageIndex {105} )

( frac {a − 5} {5 − a} )

Պատասխանել

−1

Օրինակ ( PageIndex {106} )

( frac {b − 12} {12 − b} )

Օրինակ ( PageIndex {107} )

( frac {11 − c} {c − 11} )

Պատասխանել

−1

Օրինակ ( PageIndex {108} )

( frac {5 − d} {d − 5} )

Օրինակ ( PageIndex {109} )

( frac {12−2x} {x ^ 2−36} )

Պատասխանել

(- frac {2} {x + 6} )

Օրինակ ( PageIndex {110} )

( frac {20−5y} {y ^ 2−16} )

Օրինակ ( PageIndex {111} )

( frac {4v − 32} {64 − v ^ 2} )

Պատասխանել

(- frac {4} {8 + v} )

Օրինակ ( PageIndex {112} )

( frac {7w − 21} {9 − w ^ 2} )

Օրինակ ( PageIndex {113} )

( frac {y ^ 2−11y + 24} {9 − y ^ 2} )

Պատասխանել

(- frac {y − 8} {3 + y} )

Օրինակ ( PageIndex {114} )

( frac {z ^ 2−9z + 20} {16 − z ^ 2} )

Օրինակ ( PageIndex {115} )

( frac {a ^ 2−5a − 36} {81 − a ^ 2} )

Պատասխանել

(- frac {a + 4} {9 + a} )

Օրինակ ( PageIndex {116} )

( frac {b ^ 2 + b − 42} {36 − b ^ 2} )

Ամենօրյա մաթեմատիկա

Օրինակ ( PageIndex {117} )

Հարկային դրույքաչափեր 2015 հարկային տարվա համար $ 37,450-ից $ 90,750 դոլար աշխատող միայնակ անձի պարտքի հարկի գումարը կարելի է գտնել `գնահատելով 0.25x − 4206.25 բանաձևը, որտեղ x եկամուտ է: Այս եկամտի համար հարկի միջին դրույքաչափը կարելի է գտնել `գնահատելով բանաձևը ( frac {0.25x − 4206.25} {x} ): Ո՞րն է լինելու 50,000 ԱՄՆ դոլար աշխատող միայնակ անձի հարկի միջին դրույքաչափը:

Պատասխանել

16.5%

Օրինակ ( PageIndex {118} )

Աշխատանք Երկու հոգու համար միևնույն առաջադրանքի կատարման տևողությունը, եթե նրանք միասին աշխատեն, կարելի է գտնել ՝ գնահատելով բանաձևը ( frac {xy} {x + y} ): Եթե ​​Թոմը կարող է որջը ներկել x = 45 րոպեում, իսկ նրա եղբայրը ՝ Բոբին, այն կարող է նկարել y = 60 րոպեում, քանի՞ րոպե կպահանջվի նրանցից, եթե նրանք միասին աշխատեն:

Գրելու վարժություններ

Օրինակ ( PageIndex {119} )

Բացատրեք, թե ինչպես եք գտնում դրա արժեքները x որի համար անորոշ է ( frac {x ^ 2 − x − 20} {x ^ 2−4} ) բանական արտահայտությունը:

Պատասխանել

Պատասխանները կտարբերվեն, բայց բոլորը պետք է վկայակոչեն ՝ հայտարարի գործառույթը զրոյի հասցնելով:

Օրինակ ( PageIndex {120} )

Բացատրեք ձեր ձեռնարկած բոլոր քայլերը ռացիոնալ արտահայտությունը պարզեցնելու համար: ((frac {p ^ 2 + 4p − 21} {9 − p ^ 2} ):

Ինքնաստուգում

The Վարժություններն ավարտելուց հետո օգտագործեք այս ստուգաթերթը `գնահատելու սույն բաժնի նպատակների ձեր տիրապետումը:

Ⓑ Եթե ձեր ստուգումների մեծ մասը լիներ ՝

… Վստահորեն Շնորհավորում եմ Դուք հասել եք ձեր նպատակներին այս բաժնում: Մտածեք ձեր օգտագործած ուսումնասիրության հմտությունների մասին, որպեսզի կարողանաք շարունակել օգտագործել դրանք: Ի՞նչ արեցիք, որ վստահ լինեիք այս բաներն անելու ձեր ունակությանը: Եղեք կոնկրետ:

… Որոշ օգնությամբ: Դրան պետք է արագ անդրադառնալ, քանի որ ձեր կողմից չսիրող թեմաները փոս են դառնում հաջողության հասնելու ձեր ճանապարհին: Մաթեմատիկան հաջորդական է. Յուրաքանչյուր թեմա հիմնված է նախորդ աշխատանքի վրա: Կարևոր է համոզվել, որ ամուր հիմք ունեք, նախքան առաջ շարժվելը: Ո՞ւմ կարող եք օգնություն խնդրել: Ձեր դասընկերները և դասախոսը լավ ռեսուրսներ են: Կամպուսում կա՞ մի տեղ, որտեղ առկա են մաթեմատիկայի դասախոսներ: Կարո՞ղ եք բարելավել ձեր ուսման հմտությունները:

… Ոչ - չեմ հասկանում: Սա շատ կարևոր է, և դուք չպետք է անտեսեք այն: Դուք պետք է անհապաղ օգնություն ստանաք, հակառակ դեպքում դուք արագ կծանրաբեռնվեք: Հնարավորինս շուտ այցելեք ձեր դասավանդողին ՝ քննարկելու ձեր իրավիճակը: Միասին կարող եք մշակել ծրագիր ՝ ձեզ անհրաժեշտ օգնությունը ստանալու համար:


Հաշվային գծապատկերային թվային հանրահաշիվ 4-րդ հրատարակություն pdf

Հաշվառում. Գրաֆիկական, թվային, հանրահաշվական, 3-րդ հրատարակության պատասխաններ Ch 4 Ածանցյալների կիրառություններ Ex 4.3 Հաշվարկ. Գրաֆիկական, թվային, հանրահաշվական պատասխաններ Գլուխ 4 Ածանցյալների կիրառություն ercորավարժություն 4.3 1E Գլուխ 4 Ածանցյալների կիրառություն ercորավարժություն 4.3 1QQ Գլուխ 4 ածանցյալների վարժություն 4.3 Գլուխ 4 Ածանցյալների կիրառությունները & # x02026 [Կարդալ ավելին ] Հաշվարկի մասին. գրաֆիկական, թվային, հանրահաշվական, 3-րդ հրատարակության պատասխաններ ածանցյալների Ch 4 կիրառությունները Ex 4.3


6.2 Վարժություններ

Այստեղից սկսելու համար կարող եք ներբեռնել ձևանմուշ RMarkdown ֆայլ:

Մենք կուսումնասիրենք LASSO մոդելավորումը ՝ օգտագործելով Hitters տվյալների հավաքածուն ISLR փաթեթում (կապված ընտրովի դասագրքի հետ): Նախ պետք է տեղադրեք ISLR փաթեթը Վահանակում: Դուք նաև պետք է տեղադրեք glmnet փաթեթը, քանի որ այն հետագայում կօգտագործենք LASSO մոդելների տեղադրման համար:

«Հիթեր» տվյալների հավաքածուն պարունակում է մի շարք վիճակագրություններ հիմնական լիգայի բեյսբոլի խաղացողների վերաբերյալ 1987 թ.

  1. Անոթացեք Հիթերսի տվյալների հետ
    1. Նայեք առաջին մի քանի շարքերին:
    2. Քանի՞ խաղացող կա տվյալների շտեմարանում:
    3. Աշխատավարձի քանի՞ հավանական կանխատեսող կա:

    Որոշակի ինտուիցիայի զարգացում
    Սկսելու համար բնական մոդելը բոլոր հնարավոր կանխատեսողների հետ է: Հետևյալ մոդելը տեղավորվում է սովորական (չպատժված) նվազագույն քառակուսիների վրա.

    1. Օգտագործեք caret- ը `7 անգամ խաչաձեւ վավերացում կատարելու համար` այս մոդելի փորձարկման սխալը գնահատելու համար: Օգտագործեք RMSE սյունակի ուղիղ միջինը ՝ նախ արժեքները քառակուսացնելու փոխարեն: (Ինչո՞ւ 7: Մտածեք ծալքերում դեպքերի քանակի մասին):
    2. Ի՞նչ եք կարծում, ինչպե՞ս կփոխվի փորձարկման գնահատված սխալը ՝ ավելի քիչ կանխատեսողների դեպքում:
    3. Համառոտ նկարագրեք, թե ինչպես փուլային ընտրության ընթացակարգի արդյունքը կարող է օգնել ձեզ ընտրել ավելի փոքր մոդել (ավելի քիչ կանխատեսող մոդել):
    4. Սովորական նվազագույն քառակուսիներով տեղավորվող այս մոդելը համապատասխանում է տուգանված նվազագույն քառակուսիների հատուկ դեպքին: Ո՞րն է այս (հատուկ) դեպքում ( lambda ) - ի արժեքը:
    5. Երբ ( lambda ) մեծանա, ի՞նչ եք ակնկալում պատահել կանխատեսողների թվի հետ, որոնք մնում են մոդելում:

    Ստորև բերված կոդը տեղավորվում է LASSO մոդելի հետ ՝ ( lambda = 10 ): ( Lambda ) - ի այս արժեքը նշված է tuneGrid փաստարկում: Ալֆա = 1-ը հատուկ նշում է LASSO մեթոդը (glmnet մեթոդը այլ նպատակներ ունի):

    Տեղադրեք LASSO- ն ՝ օգտագործելով ( lambda = 100 ):

    Քանի՞ փոփոխական է մնացել LASSO մոդելի մեջ ( lambda = 100 ): Այս մոդելը ( lambda = 10 ) ունեցող LASSO- ից ավելի՞ մեծ է, թե՞ փոքր: Ինչպե՞ս են փոփոխականների գործակիցները համեմատվում նվազագույն քառակուսիների մոդելի և LASSO- ի հետ ( lambda = 10 ) համապատասխան փոփոխականների հետ:

    ԼԱՍՍՈ ՝ ( lambda ) տարբեր տեսակի համար
    Կան անվերջ շատ ( lambda ), որոնք մենք կարող էինք օգտագործել: Չափազանց հոգնեցուցիչ կլիներ դրանք միանգամից ուսումնասիրելը: Հետևյալ ծածկագիրը համապատասխանում է LASSO մոդելներին ա ցանց ( lambda ) արժեքների և կազմում է գործակիցի գնահատումների ամփոփ գծապատկեր ՝ որպես ( lambda ) գործառույթ:

    • Յուրաքանչյուր գունավոր գիծ համապատասխանում է տարբեր կանխատեսողի: Յուրաքանչյուր տողից ձախ գտնվող փոքր համարը ցույց է տալիս կանխատեսողին `ըստ իր դիրքի հայտնի անունների մեջ (lasso_mod $ finalModel $ beta):
    • X առանցքն արտացոլում է lasso_mod- ում (մեր ստեղծած lambdas վեկտորը) դիտարկվող տարբեր ( lambda ) արժեքների շարքը:
    • Յուրաքանչյուր ( lambda ) –ում y առանցքն արտացոլում է համապատասխան LASSO մոդելի կանխատեսողների գործակիցի գնահատումները:
    • Յուրաքանչյուր ( lambda ) գծագրի վերևում թվերը ցույց են տալիս, թե քանի կանխատեսող է մնում համապատասխան մոդելում:

    Մենք կարող ենք խոշորացնել սյուժեն ՝ y-առանցքի սահմանները սահմանելով, որպեսզի -10-ից 10-ը անցնի յլիմով, ինչպես ստորև: Համեմատեք 6-րդ և 15-րդ փոփոխականների տողերը: Ի՞նչ են 6-րդ և 15-րդ փոփոխականները: Ո՞րն է թվում ավելի «կարևոր» կամ «համառ» փոփոխական: Սա իմաստ ունի՞ համատեքստում:

    Pոկելը ( lambda )
    Որպեսզի ընտրենք, թե որ ( lambda ) (հետևաբար, LASSO մոդելը) «լավագույնն» է, կարելի է համեմատել CV- ի սխալների 7-ապատիկի չափը յուրաքանչյուր մոդելի համար: caret- ն իրականում դա արել է մեզ համար, երբ այն մարզում է () խմբագրում է մոդելը: Մենք կարող ենք դիտել այդ արդյունքների սյուժեն.

    1. Մեկնաբանեք սյուժեի ձևը: RMSE- ն իջնում ​​է հենց սկզբից, ապա սկսում վերադառնալ: Ձեր կարծիքով, ինչու՞ է դա:
    2. Մոտավորապես, ( lambda ) - ի ո՞ր արժեքն է առաջ բերում լավագույն մոդելը:

    Այս սյուժեն ցույց է տալիս, որ մենք փորձեցինք ( lambda ) շատ արժեքներ, որոնք բավականին վատն էին: (Ինչու՞) Եկեք տեղավորենք LASSO մոդելները ( lambda ) արժեքների ավելի լավ ցանցի վրա: Փոփոխեք նախորդ կոդը ՝ օգտագործելու հետևյալ ցանցը և վերամշակումը lasso_mod և նախորդ սյուժեն.

    Ickingոկելը ( lambda ). Անորոշության հաշվառում
    Նախորդ սյուժեի յուրաքանչյուր կետ առաջացել է միջին RMSE- ի 7-ից ավելի խաչաձեւ վավերացման կրկնությունները վերցնելուց: Այդ 7 RMSE գնահատականները նույնպես ունեն ստանդարտ շեղում և ստանդարտ սխալ: RMSE versus ( lambda ) գնահատված թեստի սյուժե կազմելու համար կարող եք օգտագործել best_lambdas () մաքսային գործառույթը, որը նաև ցույց է տալիս տեղեկատվություն ստանդարտ սխալների մասին:
    Մասնավորապես, սյուժեն ցույց է տալիս կետեր, որոնք ճիշտ համապատասխանում են նախորդ սյուժեին: Լրացուցիչ տողերը ցույց են տալիս 1 ստանդարտ սխալ RMSE գնահատման վերևում և ներքևում: Ըստ էության, գծերի բացվածքը ցույց է տալիս վստահության միջակայք:
    Best_lambdas () գործառույթը նաև տեղեկատվություն է տպում լավ ((lambda ) արժեքների որոշ խելամիտ ընտրությունների մասին:

    1. Տպված արտադրանքի առաջին շարքը ցույց է տալիս ( lambda ) - ի ընտրությունը, որը կոչվում է lambda_min, ( lambda ), որի դիտված CV սխալը ամենափոքրն էր: Երկրորդ շարքում ցույց է տրված ընտրությունը, որը կոչվում է lambda_1se, ամենամեծ ( lambda ), որի համար համապատասխան LASSO մոդելը ունի CV սխալ, որը դեռ 1 ստանդարտ սխալի սահմաններում է LASSO- ի համար, օգտագործելով lambda_min: Բացատրեք, թե ինչու կարող ենք lambda_se- ի փոխարեն օգտագործել LASSO- ն lambda_min- ի փոխարեն:
    2. Ինչպե՞ս է այս մոդելների CV- գնահատված RMSE- ն համեմատվում 2-րդ վարժության բնօրինակ սովորական նվազագույն քառակուսիների մոդելի հետ:

    Նայեք LASSO մոդելների գործակիցներին, որոնք համապատասխանում են ( lambda ) - ի երկու ընտրություններին: Ինչպե՞ս են գործակիցները տարբերվում lambda_min- ի և lambda_1se- ի միջև: Մեկ մոդելի գործակիցները համատեքստային առումով ավելի խելամիտ են թվում: Դասավանդողը բավականաչափ խորը պատկերացում չունի բեյսբոլի մասին, բայց կարող էիք:


    Mingրագրավորում Praxis

    Նախորդ վարժությունում մենք տեսանք, որ շրջիկ վաճառքի խնդրի ճշգրիտ լուծում գտնելը չափազանց ժամանակատար է, ժամանակ է պահանջում Ո(ն!): Այլընտրանքը հեվրիստիկական է, որն արագորեն տալիս է ողջամիտ լավ լուծում: Նման հեվրիստիկական միջոցներից մեկը # 8220 ամենամոտ հարևանն է.

    Ձեր խնդիրն է գրել ծրագիր, որը լուծում է շրջիկ վաճառողի խնդիրը `օգտագործելով մոտակա հարևանի հեվրիստիկական միջոցը: Ավարտելուց հետո, ողջունվում է կարդալ կամ գործարկել առաջարկվող լուծում, կամ տեղադրել ձեր սեփական լուծումը կամ քննարկել վարժությունը ստորև բերված մեկնաբանություններում:

    Կիսվեք այսով ՝

    Սրա նման:

    Հարակից

    6 պատասխան & # 8220 raամփորդական վաճառող. Մոտակա հարևան & # 8221

    [& # 8230] Praxis & # 8211 ingանապարհորդող վաճառող. Ամենամոտ հարևանը. Remco Niemeijer Այսօր և # 8217-ականների mingրագրավորում Praxis վարժությունում մենք պետք է շատ ավելի արագ ալգորիթմ իրականացնենք ճանապարհորդելու համար

    [& # 8230] տվյալներ: Programing Praxis- ի վերաբերյալ նրանք առաջարկել են խնդիրը լուծել բիրտ ուժի կիրառմամբ և ամենամոտ հարևանի օգտագործմամբ ([& # 8230] -ի պարզեցում

    Լուծում Python- ում, ներառյալ կոպիտ ուժի հետ համեմատությունը: Մեկնաբանություններ իմ բլոգի վրա http://wrongsideofmemphis.wordpress.com/2010/03/16/travelling-salesman/

    ներմուծել պատահական
    ներմուծել itertools
    ներմուծման օպերատոր
    ներմուծել տվյալների ժամանակը

    def պատահական_քաղաքներ (համար):
    & # 8221 & # 8217 Ստեղծեք պատահական վայրերում տեղակայված մի շարք քաղաքներ & # 8221 & # 8217

    քաղաքներ = [(պատահական. շարք (0, MAX_X),
    պատահական. շարք (0, MAX_Y))
    i- ի համար (շարք)]

    def path_lenght (ուղի):
    & # 8221 & # 8217 Ստացեք արահետի երկարությունը & # 8221 & # 8217
    երկարություն = 0
    for i in xrange (len (արահետ) & # 8211 1):
    # Ավելացնել հեռավորությունը երկու քաղաքների միջեւ
    lenght + = abs (բարդ (ուղի [i] [0], ուղի [i] [1])
    & # 8211 բարդույթ (ուղի [i + 1] [0], ուղի [i + 1] [1]))

    def find_path_bruteforce (քաղաքներ):
    & # 8221 & # 8217 Գտեք ամենափոքր ուղին ՝ օգտագործելով բիրտ ուժ & # 8221 & # 8217

    itertools- ի ուղու համար. փոխարկումներ (քաղաքներ, լեն (քաղաքներ)):
    # Ստացեք ուղու երկարությունը ՝ ավելացնելով վերադարձի կետը
    total_path = ուղի + (ուղի [0],)
    երկարություն = ուղի_լենգթ (ընդհանուր_ուղի)
    lenghts.append ((total_path, lenght))

    # Ստացեք նվազագույնը
    lenghts.sort (բանալի = operator.itemgetter (1))
    վերադարձի երկարություններ [0]

    def find_path_nearest (քաղաքներ):
    & # 8221 & # 8217 Գտեք ամենամոտ նեյբուրին & # 8221 & # 8217

    երկարություններ = []
    քաղաքներում քաղաքների համար.
    երկարություն = 0
    փաստացի_քաղաքներ = քաղաքներ [:]
    փաստացի_քաղաք = փաստացի_քաղաքներ.փոփ (իրական_քաղաքներ.ինդեքս (քաղաք))
    ուղի = [փաստացի_քաղաք,]
    # Գտեք մոտակա նեյբուրին
    մինչ իրական քաղաքները ՝
    min_lenght = []
    հաջորդ_քաղաքի համար `
    min_lenght.append ((next_city, abs (համալիր (քաղաք [0], քաղաք [1])
    & # 8211 համալիր (հաջորդ_քաղաք [0], հաջորդ_քաղաք [1])))))
    # Ստացեք ամենամոտ նեյբորը
    min_lenght.sort (բանալի = operator.itemgetter (1))

    փաստացի_քաղաք = րոպե_լենգ [0] [0]
    lenght + = min_lenght [0] [1]
    փաստացի_քաղաքներ.փոփ (իրական_քաղաքներ.ինդեքս (իրական_քաղաք))
    ուղի. հավելել (փաստացի_քաղաք)

    # Ավարտեք ուղևորությունը առաջին քաղաքի հետ
    ուղի: կցել (քաղաք)

    # Ստացեք նվազագույնը
    lenghts.sort (բանալի = operator.itemgetter (1))
    վերադարձի երկարություններ [0]

    եթե __name__ == & # 8216__ հիմնական __ & # 8217:
    i- ի համար (3, 10):
    տպել & # 8216 Քաղաքների քանակը ՝ & # 8216, ես
    քաղաքներ = պատահական_քաղաքներ (i)


    8.1E. Վարժություններ - մաթեմատիկա

    Այստեղ դուք կարող եք մեր համայնքից պահանջել ստեղծել ռեսուրս, որը համապատասխանում է ձեր բնութագրերին:

    2021 թվականի հունիսի 11-ին Քայլի Ավստրալիայից (AUS) - Բոլոր նահանգները, Ավստրալիա (AUS) - Նոր հարցրեց.

    Անուն Անկյուններ (երկրաչափություն) Տարի 5 NSW ուսումնական պլան 5 հաջորդականացված դասեր

    Մանրամասներ Ինձ պետք է 5 45 րոպեանոց դասի հաջորդականություն 5-րդ կուրսի ուսանողի համար: Ես աշխատում եմ ssp և ծրագրի մեջ, հիմնականում ավագ դպրոցի աշակերտների համար նախատեսված ծրագրում: Ինձ պետք է, որպեսզի համապատասխանի nsw ուսումնական պլանին

    Ռեսուրս ՝ ուսանողի, ուսուցչի համար

    Որտեղից Ավստրալիա (AUS) - Բոլոր նահանգները, Ավստրալիա (AUS) - Նոր

    16 մայիսի, 2020 թ Մելանի Ավստրալիայից (AUS) - Western Australia (WA), Wa- ն հարցրեց.

    Անուն K-3 WA ուսումնական պլան Առողջապահական աշխատանքային փաթեթներ

    Մանրամասներ Ես փնտրում եմ WA ուսումնական պլանով փաթեթավորված փաթեթներ, որոնք ընդգրկում են K-3- ի առողջության ուսումնական ծրագրում թվարկված բովանդակության ամբողջությունը: Նրանք կուղարկվեն հեռավար ուսուցման:

    Որտեղից Ավստրալիա (AUS) - Western Australia (WA), Wa

    Առողջություն, Առողջություն և Ֆիտնես, Առողջապահական կրթություն, Ավստրալիայի առողջության առաջնահերթություններ, Առողջ սնունդ, Առողջ ապրելակերպ, Առողջ ապրելակերպ, Ուսումնական պլան

    Դասարանի մակարդակ Pre K, մանկապարտեզ, տարի 1, տարի 2, տարի 3

    1.0 արդյունքներ, ընդգրկիր ուսումնառության ամբողջ տարածքը

    18 դեկտեմբերի, 2017 թ Կիբրիա Նոր Հարավային Ուելսից հարցրեց.

    Անուն NSW դպրոց-տարի 3-ից 6-րդ տարի Ընթերցանության մաթեմատիկա Ընդհանուր ունակության աղբյուրներ և թեստ

    Մանրամասներ Մենք փնտրում ենք բարձրորակ հարմարեցված ռեսուրսներ NSW կրթության ուսումնական ծրագրի համար - 3-րդ տարի 6-րդ տարի 1. Ընթերցանություն 2. Մաթեմատիկա 3. Ընդհանուր ունակության ռեսուրսներ և թեստ

    Ռեսուրս ՝ ուսուցչի համար

    Դասարանի մակարդակ Տարի 3, տարի 4, տարի 5, տարի 6

    13 դեկտեմբերի, 2017 թ Կիբրիա Նոր Հարավային Ուելսից հարցրեց.

    Անուն NSW դպրոց-տարի 3-ից 6-րդ տարի Ընթերցանության մաթեմատիկա Ընդհանուր ունակության աղբյուրներ և թեստ

    Մանրամասներ Մենք փնտրում ենք բարձրորակ հարմարեցված ռեսուրսներ NSW կրթության ուսումնական ծրագրի համար - 3-րդ տարի 6-րդ տարի 1. Ընթերցանություն 2. Մաթեմատիկա 3. Ընդհանուր ունակության ռեսուրսներ և թեստ


    NumPy Logic գործառույթներ. Isclose () գործառույթ

    Isclose () ֆունկցիան օգտագործվում է բուլյան զանգվածը վերադարձնելու համար, որտեղ երկու զանգված ըստ տարրերի հավասար է հանդուրժողականության սահմաններում:

    Հանդուրժողականության արժեքները դրական են, սովորաբար շատ փոքր թվեր:
    Հարաբերական տարբերությունը (rtol * abs (b)) և բացարձակ տարբերության ատոլը գումարվում են միասին ՝ a- ի և b- ի բացարձակ տարբերության համեմատության համար:

    Տարբերակ ՝ 1.15.0

    Անուն Նկարագրություն Տվյալների տեսակները Պարտադիր է /
    Ընտրովի
    ա, բ Ներածման զանգվածներ ՝ համեմատելու համար:
    array_like
    Պարտադիր է
    rtol Հարաբերական հանդուրժողականության պարամետրը: բոց Պարտադիր է
    ատոլ Բացարձակ հանդուրժողականության պարամետր: բոց Պարտադիր է
    հավասար_նան Արդյո՞ք NaN- ը համեմատել հավասարի հետ: Եթե ​​ճիշտ է,
    A– ում NaN– ը ելքի զանգվածում համարվելու է NaN– ի b- ում հավասար:
    բոլ Պարտադիր է

    Վերադարձ
    y: array_like - Վերադարձնում է բուլյան զանգված, որտեղ a և b հավասար են տրված հանդուրժողականության սահմաններում:
    Եթե ​​երկուսն էլ a- ն և b- ն scalars են, վերադարձնում է մեկ բուլյան արժեք:

    Նշումներ.
    Վերջավոր արժեքների համար isclose- ն օգտագործում է հետևյալ հավասարումը `ստուգելու համար, թե արդյոք երկու լողացող կետի արժեքները համարժեք են:


    Learntofish & # 039s բլոգ

    Էդ-ի փակցված է 20.09.2009

    Հաջորդում ես կբացատրեմ, թե ինչ է նշանակում օբյեկտի վրա հիմնված ծրագրավորում Java- ում: Եվ կտեսնեք, որ հեշտ է հասկանալ, երբ հասկանաք «ան» հասկացությունը առարկա, Ես ձեզ խորհուրդ եմ տալիս պատճենել կոդը և գործարկել այն Java- ում:

    Ի՞նչ է առարկան:
    Սահմանում. Օբյեկտ կողմնորոշված ​​ծրագրավորման օբյեկտը բնութագրվում է
    ա) իր հատկանիշներ (հատկություններ)
    բ) մեթոդները որ հատկանիշներով ինչ-որ բան են անում (օրինակ ՝ դրանք փոխել)

    Օրինակ ՝ Հոմեր Սիմփսոնը օբյեկտ է.
    ա) Նրա հատկանիշներն են `անունը, տարիքը, սեռը և այլն:
    բ) Եվ կան մեթոդներ, որոնք կարող եք կիրառել օբյեկտի նկատմամբ.
    օր. Դուք կարող եք խնդրել Homer Simpson & # 8217s անուն կամ կարող եք թույլ տալ, որ նա ունենա իր տարեդարձը, որը փոխում է իր տարիքը:

    Ի՞նչ է դասը:
    Գոյություն ունեն տարբեր տեսակի առարկաներ, օրինակ ՝
    & # 8211 Մարի Կյուրին, Իսահակ Նյուտոնը և Էմմի Նոութերը ընդհանուր բան ունեն: Նրանք անձինք են: Մենք ասում ենք, որ դրանք դասի օբյեկտներ են & # 8220Person & # 8221:
    & # 8211 Խնձոր, բանան, մանգո. Սրանք դասի օբյեկտներ են & # 8220 Մրգեր և # 8221:
    & # 8211 Բաճկոն, վերնաշապիկ, պուլովեր, տաբատ. Սրանք դասի առարկաներ են և # 8220 հագուստ & # 8221:

    Թող & # 8217-ը գործնական լինեն և մուտքագրեն հետևյալ կոդը Java- ում (կոդը պատճենելու համար. Գնա ներքևի աղբյուրի կոդով պատուհանը և ցույց տուր աջ վերևի անկյունը: Այնտեղ կտտացրեք սպիտակ խորհրդանիշին).

    Եկեք & # 8217-ը ուսումնասիրենք ծրագիրը.
    & # 8211 01 տողում մենք հայտարարում ենք դաս & # 8220 անձ & # 8221:
    & # 8211 03-05 տողում մենք սահմանում ենք, թե ինչպիսի հատկանիշներ (հատկություններ) ունեն մեր օբյեկտները: Այստեղ մեր առարկաները պետք է ունենան անուն և տարիք:
    & # 8211 07-27 տողում մենք սահմանում ենք այն մեթոդները, որոնք կարող են կիրառվել մեր օբյեկտների համար: Օրինակ, 08-10 տողում մեթոդը setName () մեր առարկաներին անվանում է տալիս:
    & # 8211 Մեր հիմնական () մեթոդը (կամ ծրագիրը) սկսվում է 29-րդ տողում:

    Վերը նշված կոդը կազմելը չի ​​տալիս վահանակի որևէ ելք, քանի որ մենք դեռևս որևէ բան չենք գրել մեր հիմնական () մեթոդով: Հաջորդում մենք կավելացնենք ծածկագիրը հիմնական () մեթոդին:

    Օբյեկտի ստեղծում և դրա հատկանիշների կարգավորում

    Եկեք & # 8217-ը ուսումնասիրենք ծածկագիրը.
    & # 8211 Ահա, 04 տողում մենք մուտքագրում ենք օբյեկտ & # 8220 հայր & # 8221 դասարանից & # 8220 անձ & # 8221 մուտքագրելով
    Անուն հայր = նոր Անձ ()
    Ընդհանրապես, մենք մուտքագրում ենք օբյեկտ ՝ մուտքագրելով
    Դասի օբյեկտ = նոր դաս ()
    Բացի այդ, մեթոդը Անձ () կոչվում է & # 8220 կոնստրուկտոր & # 8221: Կառուցապատողն իր անունն ունի հասկանալի պատճառներով. Մենք օբյեկտ ենք կառուցում:

    & # 8211 07-08 տողում մենք մեթոդներ ենք կիրառում մեր օբյեկտի նկատմամբ & # 8220 հայր & # 8221: Մենք նրան տալիս ենք անուն և տարիք.
    father.setName (& # 8220Homer & # 8221)
    հայր. տարիք (40)

    Ընդհանրապես, օբյեկտի վրա մեթոդ կիրառելը կատարվում է մուտքագրելով ՝
    օբյեկտ. մեթոդը ()
    Մասնավորապես, դուք նկատել եք կետը: Ամեն անգամ, երբ ցանկանում եք մեթոդ կիրառել օբյեկտի վրա, դուք օգտագործում եք կետը:

    Soուցադրել ատրիբուտները վահանակի արտադրանքի վրա
    Վերը նշված կոդը կազմելը դեռ չի հաջողվել և # 8217 տ մեզ տալիս է ցանկացած ելք մխիթարիչի վրա: Եկեք & # 8217s- ը մի քանի կոդ ավելացնի հիմնական () մեթոդին (տող 10-12):

    Հիմա ուզում ենք, որ հայրը մեզ ասի իր անունն ու տարիքը: Այդ պատճառով 11-12 տողում մենք կիրառում ենք մեթոդները getName () և getAge () մեր առարկային հայրիկին: Կոդի կազմումը տալիս է վահանակի ելքը.
    Իմ անունը Հոմերոս է:
    Ես 40 տարեկան եմ

    Վարժություններ:
    1 ա) Վերևից օգտագործելով & # 8220Person & # 8221 դասը ստեղծեք օբյեկտ & # 8220 դուստր & # 8221:
    1 բ) Տվեք նրան անունը & # 8220 Լիզա Սիմփսոն & # 8221, ով 8 տարեկան է:
    1 գ) & # 8220 դուստրը & # 8221 կոնսոլի ելքի միջոցով պետք է մեզ հայտնեն իր անունը և տարիքը:
    1 դ) Վերևից օգտագործելով & # 8220Person & # 8221 դասը ստեղծեք օբյեկտ & # 8220son & # 8221 հատկանիշների անունով ՝ = & # 8221 Բարտ Սիմփսոն & # 8221 և տարիքը ՝ 8:
    1 ե) Որդուն ստիպեք մեզ ասել իր անունը: Դրանից հետո կիրառեք մեթոդը ծննդյան օր () որդուն

    2 ա) Ստեղծեք դասարան & # 8220 Մրգեր & # 8221 հիմնական () մեթոդով:
    2 բ) Այս դասի օբյեկտները պետք է ունենան հետևյալ հատկանիշը. գույնը
    Դասարանն ունի մեթոդներ setColor () և getColor ().
    2 գ) Ստեղծել օբյեկտ խնձոր: Սահմանեք դրա գույնը & # 8220red & # 8221: Դրանից հետո ցույց տվեք գույնը մխիթարի ելքի վրա ՝ օգտագործելով getColor () մեթոդ

    Վահանակի ելքը 1c- ի համար) ՝ Իմ անունը Լիզա Սիմփսոն է: Ես 8 տարեկան եմ

    1d) և 1e համար) վահանակի ելքը հետևյալն է.
    Ես Բարթ Սիմփսոն եմ:
    Ես և # 8217 տարեկանս ունեցել եմ իմ ծննդյան օրը: Հիմա ես 9 տարեկան եմ:
    2 ա) և 2 բ)

    2c- ի համար) հիմնական () մեթոդին ավելացնել հետևյալ ծածկագիրը.

    Այստեղ մենք ստանում ենք մխիթարիչի արտադրանքը. Իմ գույնը կարմիրն է:

    Հղումներ
    1) օբյեկտի վրա հիմնված ծրագրավորման հասկացություններ
    Ձեռնարկ Java- ի մշակող Sun Microsystems- ի ձեռնարկը

    4) օբյեկտի վրա հիմնված լեզվի հիմունքներ
    Javaworld.com կայքի ավելի առաջադեմ ձեռնարկը

    5) Eclipse և Java ընդհանուր սկսնակների համար
    Տեսանյութի ձեռնարկ, թե ինչպես օգտագործել Eclipse- ը, օբյեկտի վրա հիմնված ծրագրավորման ներդրմամբ


    16.7.1. Model Architectures¶

    Հաջորդականությունից տեղյակ առաջարկությունների համակարգում յուրաքանչյուր օգտվող կապված է իրերի հավաքածուից որոշ իրերի հաջորդականության հետ: Եկեք (S ^ u = (S_1 ^ u,. S_ <| S_u |> ^ u) ) նշանակում է դասավորված հաջորդականությունը: Caser- ի նպատակն է խորհուրդ տալ իրը ՝ հաշվի առնելով օգտագործողի ընդհանուր նախասիրությունները, ինչպես նաև կարճաժամկետ մտադրությունը: Ենթադրենք, որ հաշվի ենք առնում նախորդ (L ) կետերը, կարող է կառուցվել ներդրման մատրիցա, որը ներկայացնում է նախկին փոխազդեցությունները ժամանակի քայլի համար (t ):

    որտեղ ( mathbf in mathbb^) ներկայացնում է իրերի ներդրումները և ( mathbf)_i ) նշանակում է (i ^ mathrm) տող. ( mathbf^ <(u, t)> in mathbb^) կարող է օգտագործվել ՝ օգտագործողի անցողիկ շահը (u ) ժամանակային աստիճանում եզրակացնելու համար (t ): Մենք կարող ենք դիտել մուտքային մատրիցը ( mathbf^ <(u, t)> ) որպես պատկեր, որը հետագա երկու կոնվոլյուցիոն բաղադրիչների ներդրումն է:

    Հորիզոնական կոնվոլյուցիոն շերտը ունի (d ) հորիզոնական զտիչներ ( mathbf)^ j in mathbb^, 1 leq j leq d, h = <1,. L > ), իսկ ուղղահայաց կոնվոլյուցիոն շերտը ունի (d ') ուղղահայաց զտիչներ ( mathbf^ j in mathbb^ , 1 leq j leq d '): Միաձուլման և լողավազան մի շարք գործողություններից հետո մենք ստանում ենք երկու ելք.

    որտեղ ( mathbf in mathbb^ d ) հորիզոնական կոնվոլյուցիոն ցանցի և ( mathbf) ելքն է' in mathbb^) ուղղահայաց կոնվոլյուցիոն ցանցի ելքն է: Պարզության համար մենք բաց ենք թողնում միաձուլման և լողավազանային գործողությունների մանրամասները: Դրանք միացվում են և սնուցվում ամբողջովին կապված նյարդային ցանցի շերտի ՝ ավելի բարձր մակարդակի ներկայացուցչություններ ստանալու համար:

    որտեղ ( mathbf in mathbb^) քաշի մատրիցն է և ( mathbf in mathbb^ կ ) կողմնակալությունն է: Սովորած վեկտորը ( mathbf in mathbb^ k ) օգտագործողի կարճաժամկետ մտադրության ներկայացումն է:

    Վերջապես, կանխատեսման գործառույթը համատեղում է օգտագործողների կարճաժամկետ և ընդհանուր համը միասին, որը սահմանվում է որպես.

    (16.7.4) ¶ [ գլխարկ_ = mathbf_i cdot [ mathbf, mathbf

    _u] ^ top + mathbf'_i, ]

    որտեղ ( mathbf in mathbb^) մեկ այլ նյութի ներդրման մատրից է: ( mathbf' in mathbb^ n ) կետի հատուկ կողմնակալությունն է: ( mathbf

    in mathbb^) օգտագործողի ներդրման մատրիցն է ՝ օգտագործողների ընդհանուր ճաշակի համար: ( mathbf

    _u in mathbb^ ) - ը (u ^ մաթրմն է) տողի (P ) և ( mathbf)_i in mathbb^ <2k> ) (i ^ mathrm է)) տողի ( mathbf)) .

    Մոդելը կարելի է սովորել BPR կամ Hinge կորստով: Caser- ի ճարտարապետությունը ներկայացված է ստորև.

    Նկար. 16.7.1 Caser մոդելի նկարազարդում

    Մենք նախ ներմուծում ենք անհրաժեշտ գրադարանները:


    8.1E. Վարժություններ - մաթեմատիկա

    Ներխուժման վերլուծություն SNP տվյալների հետ

    Միլան Մալինսկու ([email protected]) և Michael Matschiner- ի կողմից հիբրիդացման և ներխուժման վերլուծության ձեռնարկ ձեռնարկ SNP- ի տվյալների հետ

    Պոպուլյացիաների միջև խառնուրդը և տեսակների միջև հիբրիդացումը տարածված են, և երկփեղկված ծառը հաճախ անբավարար է դրանց էվոլյուցիոն պատմությունը նկարագրելու համար (օրինակ): Patterson’s D- ը, որը հայտնի է նաև որպես ABBA-BABA, և խառնուրդի կոտորակի հետ կապված նախահաշիվը զ, որը կոչվում է f4 հարաբերակցություն, սովորաբար օգտագործվում են գենոմային տվյալների շտեմարաններում պոպուլյացիաների կամ սերտորեն կապված տեսակների միջեւ գենի հոսքի ապացույցները գնահատելու համար: Դրանք հիմնված են պոպուլյացիաների կամ սերտորեն կապված տեսակների միջև ալելի բաժանման օրինաչափությունների ուսումնասիրության վրա: Չնայած դրանք մշակվել են պոպուլյացիայի գենետիկական շրջանակներում, մեթոդները կարող են հաջողությամբ կիրառվել սերտորեն կապված տեսակների խմբերի հիբրիդացման և ներխուժման մասին սովորելու համար, քանի դեռ տարածված են ընդհանուր պոպուլյացիայի գենետիկական ենթադրությունները, այն է, որ (ա) տեսակները ունեն զգալի քանակությամբ գենետիկական տատանումները `կապված ընդհանուր ծագման և տոհմերի թերի տեսակավորման հետևանքով. բ) նույն վայրերում կրկնվող և հետի մուտացիաները չնչին են, և գ) փոխարինման տեմպերը միատեսակ են տեսակների համար:

    Պատերսոնի D- ն և դրա հետ կապված վիճակագրությունը նույնպես օգտագործվել են intrograted loci- ները պարզելու համար `գենոմի երկայնքով պատուհանի զննումով, կամ տվյալ վիճակագրությունը որոշակի կարճ գենոմիկական շրջանների համար հաշվարկելու միջոցով: Քանի որ D վիճակագրությունն ինքնին մեծ շեղում ունի փոքր գենոմիկական պատուհանների վրա կիրառելիս, և քանի որ դա ներխուժման քանակի վատ գնահատող է, լրացուցիչ վիճակագրությունը, որոնք կապված են f4 հարաբերակցության հետ, մշակվել են հատուկ գենոմիկական պատուհաններում ներխուժման ստորագրությունները հետաքննելու համար: քրոմոսոմներ: Այս վիճակագրությունը ներառում է զդ (Martin et al., 2015), դրա ընդլայնումը զdM (Malinsky et al., 2015), և հեռավորության կոտորակը դզ (Pfeifer & amp Կապան, 2019):

    Այս ձեռնարկում մենք նախ կօգտագործենք մոդելավորված տվյալներ ՝ ցույց տալու համար, որ գենային հոսքի ներքո որոշ տեսակների հետևյալ փոխհարաբերությունները կարող են չհամապատասխանել որևէ իրական կենսաբանական հարաբերությունների: Այնուհետև մենք պատրաստվում ենք օգտագործել Dsuite- ը `ծրագրային փաթեթ, որն իրականացնում է Patterson’s D- ի և դրա հետ կապված վիճակագրությունը` օգտագործման համար պարզ և հաշվարկային առումով արդյունավետ: Սա մեզ թույլ կտա նույնականացնել խառնված տաքսոնները: Dsuite- ն ուսումնասիրելիս մենք նաև պատրաստվում ենք սովորել կամ վերանայել D- ի և դրա հետ կապված վիճակագրության կիրառման, հաշվարկման և մեկնաբանման հետ կապված հասկացությունները: Հաջորդը մենք կիրառում ենք լոգարիթմական պատուհանի վիճակագրություն ՝ Մալավիի ցիքլիդային ձկների իրական տվյալների շտեմարանում որոշակի ինքնավստահ տեղեր հայտնաբերելու համար: Վերջապես, մենք նայում ենք նույն տվյալներին, որոնք օգտագործվել են SVDQuartets- ի հետ տեսակների ծառի եզրակացության համար `Ձեռնարկի տեսակները` SNP- ի տվյալների հետևյալ եզրակացությունը `տեսնելու համար, թե արդյոք կարո՞ղ ենք նույն եզրակացություններին հասնել, ինչպես 2016-ի ձեռագրում, որն օգտագործել է ավելի սահմանափակ տվյալների քանակ` ավելի քիչ տեսակների հետ:

    Հետաքրքրված ուսանողները կարող են նաև դիմել նախնիների գեղանկարչությանը `ուսումնասիրելու հիբրիդային տեսակների putatitve դեպքը:

    Dsuite: Dsuite ծրագիրը թույլ է տալիս արագ հաշվարկել Դ- վիճակագրական է SNP տվյալներից ՝ VCF ձևաչափով: Րագիրը հատկապես օգտակար է, քանի որ այն ավտոմատ կերպով հաշվարկում է Դ- վիճակագրական բոլոր հնարավոր տեսակների եռյակների համար, ըստ ցանկության նաև այնպես, որ եռյակները համատեղելի լինեն օգտագործողի կողմից տրամադրված տեսակների ծառի հետ: Mac OS X- ի և Linux- ի վրա ներբեռնման և տեղադրման հրահանգները ներկայացված են https://github.com/millanek/Dsuite: Windows- ում տեղադրումը չի աջակցվում, բայց Windows- ի օգտվողները կարող են օգտագործել տրամադրված ելքային ֆայլերը ՝ սովորելու համար, թե ինչպես գծագրել և վերլուծել Dsuite ելքը:

    FigTree: FigTree ծրագիրը պետք է արդեն տեղադրված լինի, եթե հետևեք Bayesian Phylogenetic Inference- ի, Phylogenetic Divergence-Time- ի գնահատմանը կամ այլ ձեռնարկներին: Եթե ​​ոչ, այն կարող եք ներբեռնել Mac OS X, Linux և Windows համակարգերի համար ՝ https://github.com/rambaut/figtree/releases- ից:

    pypopgen3: (կախվածություններով, առանց msprime- ի) Pypopgen3- ը տալիս է բազմաբնույթ օգտակար գենետիկայի գործիքներ, ներառյալ, որ կարևոր է, msprime ծրագրի համար նախատեսված փաթաթան `ֆիլոգենոմիկական տվյալների հարմար սիմուլյացիաների համար:

    1. Մոդելավորված տվյալների հավաքածուից նշելով տեսակների ծառը և գեների հոսքը

    1.1 Ֆիլոգենոմիական տվյալների մոդելավորում msprime- ի հետ

    Էվոլյուցիոն գենոմիկայի և ֆիլոգենոմիկայի մեջ տարբեր մեթոդներ կիրառելու և համեմատելու դժվարություններից մեկն այն է, որ մենք հազվադեպ ենք իմանում, թե որն է ճիշտ պատասխանը: Եթե ​​մեթոդները մեզ տալիս են հակասական պատասխաններ կամ որևէ պատասխան, ինչպե՞ս կարող ենք իմանալ, արդյոք կարող ենք վստահել դրանց: Մի մոտեցում, որը հաճախ օգտակար է, նմանակված տվյալների օգտագործումն է: Theշմարտությունն իմանալը թույլ է տալիս տեսնել, թե արդյոք իմաստ ունեն այն մեթոդները, որոնք մենք օգտագործում ենք:

    Ֆիլոգենոմիկական տվյալների սիմուլյացիայի համար շուրջ ամենաարագ ծրագրային փաթեթներից մեկը կոալեսցենտային վրա հիմնված msprime- ն է (ձեռագիր): Msprime ձեռագիրն ու ծրագրակազմը ներկայացված են բնակչության գենետիկական շրջանակներում: Այնուամենայնիվ, մենք կարող ենք այն օգտագործել ֆիլոգենոմիական տվյալներ արտադրելու համար: Դա պայմանավորված է նրանով, որ զուտ գենետիկական տվյալների նայելու տեսանկյունից հիմնարար տարբերակում չկա մեկ տեսակի ալոպատրիկ պոպուլյացիաների և տարբեր տեսակների ամբողջության միջև: The genealogical processes that play out across different population are indeed the same as the processes that determine the genetic relationships along-the-genome of any species that may arise. We will return to this theme of a continuum between population genetics and phylogenomics later.

    We have simulated SNP data for 20 species in the VCF format, two individuals from each species. The species started diverging 1 million years ago, with effective population sizes on each branch set to 50,000. Both the recombination and mutation rates were set to 1e-8 and 20Mb of data were simulated. Because these simulations take some time to run, we have the ready simulated data available for you. First a simulation without gene-flow (VCF, true tree: image, newick, json), and second, a simulation where five gene-flow events have been added to a tree (VCF, true tree with gene-flow: image, newick, json). Details for how to generate such simulated datasets are provided below.

    Generating simulated phylogenomic data with msprime

    It is in principle possible to simulate data from an arbitrary phylogeny with msprime, but specifying the phylogenetic tree directly in the program is complicated. Therefore, a number of 'helper' wrapper programs have been developed that can make this task much easier for us. For this exercise, we use Hannes Svardal's pypopgen3. After installing pypogen3 and its dependencies, using the instructions on the webpage, we simulated the data using the following code:

    Note that if you run this code yourselves, the data and the trees that you get out will be somewhat different from the ones we prepared for you, because the trees are randomly generated and the coalescent simulation run by msprime is also a stochastic process. Therefore, every simulation will be different. If you want to simulate more data using the trees we provided to you, you would replace the treetools.get_random_geneflow_species_tree commands with the following code to read the provided trees:

    1.2 Reconstructing phylogenies from simulated data

    Now we apply the phylogentic (or phylogenomic) approaches that we have learned to the simulated SNP data to see if we can recover the phylogentic trees that were used as input to the simulations. As in the tutorial on Species-Tree Inference with SNP Data, we are going to use algorithms implemented in PAUP*.

    Our msprime simulation did not use any specific substitution model for mutations, but simply designated alleles as 0 for ancestral and 1 for derived. The alleles are indicated in the fourth (REF) and fifth (ALT) column of the VCF as per the VCF file format. To use PAUP* we first need to convert the the VCF into the Nexus format, and this needs the 0 and 1 alleles to be replaced by actual DNA bases. We can use the vcf2phylip.py python script and achieve these steps as follows, first for the dataset simulated without gene-flow:

    Next, open the Nexus file chr1_no_geneflow_nt.min4.nexus in PAUP*, again making sure that the option "Execute" is set in the opening dialog, as shown in the screenshot.

    Then designate the outgroup (Data->Define_outgroup) as you learned in the tutorial on Species-Tree Inference with SNP Data.

    Then use the Neighbor Joining algorithm (Analysis->Neighbor-Joining/UPGMA) with default parameters to build a quick phylogeny.

    As you can see by comparison of the tree you just reconstructed (also below) against the input tree, a simple Neigbor Joining algorithm easily reconstructs the tree topology perfectly, and even the branch lengths are almost perfect.

    Click here to see the reconstructed NJ tree without gene-flow

    Now we repeat the same tree-reconstruction procedure for the simulation with gene-flow, starting with file format conversion:

    Then load the file with_geneflow_nt.min4.nexus into PAUP*, again making sure the option "Execute" is set, then designate the outgroup, and finally run the Neighbor Joining tree reconstruction. You should get a tree like the one below:

    An examination of this reconstructed tree reveals that in this case we did not recover the topology of the true tree used as input to the simulation. Unlike in the true tree, in the reconstructed tree species S14 is "pulled outside" the group formed by S13,S15,S16 . This is most likely because of the gene-flow that S14 received from S00 . This is a typical pattern: when one species from within a group receives introgression from another group, it tends to be "pulled out" like this in phylogenetic reconstruction. One argument that could be made here is that the Neighbor Joining algorithm is outdated, and that perhaps newer, more sophisticated, methods would recover the correct tree. You can now try to apply SVDQuartets in PAUP*, and also try any of the other phylogenomic methods you know to see if any of these will succeed.

    Click here to see the reconstructed SVDQuartets tree with gene-flow

    As you can see, the topology is in fact different from the Neighbor Joining, but also is not correct ( S13,S14 should not be sister taxa, also S10 and S11 are swapped) .

    1.3 Testing for gene-flow in simulated data

    Under incomplete lineage sorting alone, two sister species are expected to share about the same proportion of derived alleles with a third closely related species. Thus, if species "P1" and "P2" are sisters and "P3" is a closely related species, then the number of derived alleles shared by P1 and P3 but not P2 and the number of derived alleles that is shared by P2 and P3 but not P1 should be approximately similar. In contrast, if hybridization leads to introgression between species P3 and one out the two species P1 and P2, then P3 should share more derived alleles with that species than it does with the other one, leading to asymmetry in the sharing of derived alleles. These expectations are the basis for the so-called "ABBA-BABA test" (first described in the Supporting Material of Green et al. 2010) that quantifies support for introgression by the D-statistic. Below is an illustration of the basic principle.

    In short, if there is gene-flow between P2 <-> P3, there is going to be an excess of the of the ABBA pattern, leading to positive D statistics. In contrast, gene-flow between P1 <-> P3 would lead to a an excess of the BABA pattern and a negative D statistic. However, whether a species is assigned in the P1 or P2 position is arbitrary, so we can always assign them so that P2 and P3 share more derived alleles and the D statistic is then bounded between 0 and 1. There is also a related and somewhat more complicated measure, the f4-ratio, which strives to estimate the admixture proportion in percentage. We will not go into the maths here - if you are interested, have a look at the Dsuite paper.

    The Dsuite software has several advantages: it brings several related statistics together into one software package, has a straightforward workflow to calculate the D statistics and the f4-ratio for all combinations of trios in the dataset, and the standard VCF format, thus generally avoiding the need for format conversions or data duplication. It is computationally more efficient than other software in the core tasks, making it more practical for analysing large genome-wide data sets with tens or even hundreds of populations or species. Finally, Dsuite implements the calculation of the զdM և զ-branch statistics for the first time in publicly available software.

    To calculate the D statistics and the f4-ratio for all combinations of trios of species, all we need is the file that specifies what individuals belong to which population/species - we prepared it for you: species_sets.txt. Such a file could be simply prepared manually, but, in this case we can save ourselves the work and automate the process using a combination of bcftools and awk :

    Something similar to the above can be useful in many cases, depending on how the individuals are named in your VCF file.

    Then, to familiarize yourself with Dsuite, simply start the program with the command Dsuite . When you hit enter, you should see a help text that informs you about three different commands named "Dtrios", "DtriosCombine", and "Dinvestigate", with short descriptions of what these commands do. Of the three commands, we are going to focus on Dtrios, which is the one that calculates the D-statistic for all possible species trios.

    To learn more about the command, type Dsuite Dtrios and hit enter. The help text should then inform you about how to run this command. There are numerous options, but the defaults are approprite for a vast majority of use-cases. All we are going to do is to provide a run name using the -n option, the correct tree using the -t option, and use the -c option to indicate that this is the entire dataset and, therefore, we don't need intermediate files for "DtriosCombine".

    1.3.1 Do we find geneflow in data simulated without geneflow?

    We run Dsuite for the dataset without gene-flow as follows:

    The run takes about 50 minutes. Therefore, we already put the output files for you in the data folder. Let's have a look at the first few lines of species_sets_no_geneflow_BBAA.txt :

    Each row shows the results for the analysis of one trio. For example in the first row, species S01 was used as P1, S02 was considered as P2, and S00 was placed in the position of P3. Then we see the D statistic, associated Zscore and p-value, the f4-ratio estimating admixture proportion and then the counts of BBAA sites (where S01 and S02 share the derived allele) and then the counts of ABBA and BABA sites. As you can see, ABBA is always more than BABA and the D statistic is always positive because Dsuite orients P1 and P2 in this way. Since these results are for coalescent simulations without gene-flow, the ABBA and BABA sites arise purely through incomplete lineage sorting and the difference between them is purely random - therefore, even though the D statistic can be quite high (e.g. up to 8% on the last line), this is not a result of gene flow.

    Question 1: Can you tell why the BBAA, ABBA, and BABA numbers are not integer numbers but have decimal positions?

    Click here to see the answer

    Integer counts of ABBA and BABA sites would only be expected if each species would be represented only by a single haploid sequence. With diploid sequences and multiple samples per species, allele frequences are taken into account to weigh the counts of ABBA and BABA sites as described by equations 1a to 1c of the Dsuite paper.

    Question 2: How many different trios are listed in the file? Are these all possible (unordered) trios?

    Click here to see the answer

    Because each trio is listed on a single row, the number of trios in file species_sets_no_geneflow_BBAA.txt is identical to the number of lines in this file. This number can easily be counted using, e.g. the following command:

    You should see that the file includes 1140 lines and therefore results for 1140 trios. Given that the dataset includes (except the outgroup species) 20 species and 3 of these are required to form a trio, the number of possible trios is

    In species_sets_no_geneflow_BBAA.txt , trios are arranged so that P1 and P2 always share the most derived alleles (BBAA is always the highest number). There are two other output files: one with the _tree.txt suffix: species_sets_no_geneflow_tree.txt where trios are arranged according to the tree we gave Dsuite, and a file with the _Dmin.txt suffix species_sets_no_geneflow_Dmin.txt where trios are arranged so that the D statistic is minimised - providing a kind of "lower bound" on gene-flow statistics. This can be useful in cases where the true relationships between species are not clear, as illustrated for example in this paper (Fig. 2a).

    Let's first see how the other outputs differ from the _tree.txt file, which has the correct trio arrangments. :

    There is one difference in the _BBAA.txt ile. Because of incomplete lineage sorting being a stochastic (random) process, we see that S08 and S10 share more derived alleles than S09 and S10 , which are sister species in the input tree. If you look again at the input tree, you will see that the branching order between S08 , S09 and S10 is very rapid, it is almost a polytomy.

    A comparison of the _tree.txt file against the _Dmin.txt , which minimises the Dstatistic, reveals nine differences. However, the correct trio arrangements in all these cases are very clear.

    Next, let's look at the results in more detail, for example in R. We load the _BBAA.txt file and first look at the distribution of D values:

    There are some very high D statistics. In fact, the D statistics for 9 trios are >0.7, which is extremely high. So how is this possible in a dataset simulated with no geneflow?

    These nine cases arise because there is amost no incomplete lineage sorting among these trios almost all sites are BBAA - e.g. 179922 sites for the first trio, while the count for ABBA is only 1.5 and for BABA it is 0 . The D statistic is calculated as D = (ABBA-BABA)/(ABBA+BABA), which for the first trio would be D = (1.5-0)/(1.5+0)=1. So, the lesson here is that the D statistic is very sensitive to random fluctuations when there is a small number of ABBA and BABA sites. One certainly cannot take the D value seriously unless it is supported by a statistical test suggesting that the D is significanly different from 0. In the most extreme cases above, the p-value could not even be calculated, becuase there were so few sites. Those definitely do not represent geneflow. But in one case we see a p value of 0.0018. Well, that looks significant, if one considers for example the traditional 0.05 cutoff. So, again, how is this possible in a dataset simulated with no geneflow?

    In fact, there are many p values that are <0.05. For those who have a good understanding of statistics this will be not be suprising. This is because p values are uniformly distributed when the null hypopthesis is true. Therefore, we expect 5% of the (or 1 in 20) p-values, they will be <0.05. If we did a 1140 tests, we can expect 57 of them to be <0.05. Therefore, any time we conduct a large amount of statistical tests, we should apply a multiple testing correction - commonly used is the Benjamini-Hochberg (BH) correction which controls for the false discovery rate.

    However, even after applying the BH correction there are three p-values which look significant. These are all false discoveries. Here comes an important scientific lesson - that even if we apply statistical tests correctly, seeing a p-value below 0.05 is not a proof that the null hypothesis is false. All hypothesis testing has false positives and false negatives. It may be helpful to focus less on statistical testing and aim for a more nuanced understanding of the dataset, as argued for example in this Nature commentary.

    Therefore, we should also plot the f4-ratio, which estimates the proportion of genome affected by geneflow. It turns out that this is perhaps the most reliable - all the f4-ratio values are tiny, as they should be for a dataset without geneflow.

    Finally, we use visualisation heatmap in which the species in positions P2 and P3 are sorted on the horizontal and vertical axes, and the color of the corresponding heatmap cell indicates the most significant D-statistic found between these two species, across all possible species in P1. To prepare this plot, we need to prepare a file that lists the order in which the P2 and P3 species should be plotted along the heatmap axes. The file should look like plot_order.txt . You could prepare this file manually, or below is a programmatic way:

    Then make the plots using the scripts plot_d.rb and plot_f4ratio.rb .

    1.3.2 Do we find geneflow in data simulated with geneflow?

    How do the results for the simulation with geneflow differ from the above? Here we are going to run a similar set of analyses and make comparisons. We run Dsuite for the dataset with gene-flow as follows:

    Now we find 39 differences between the _tree.txt file and the _BBAA.txt , reflecting that, under geneflow, sister species often do not share the most derived alleles. Between _tree.txt file and the _Dmin.txt there are 124 differences.

    We can visualise the overlap between these different files using a Venn diagram. For example in R:

    Then we explore the results in the _BBAA.txt in R, analogously to how we did it above for the no-geneflow case:

    As you can see if you click above, the distributions of the statistics are markedly different when compared against the no-geneflow scenario. The number of D statistics >0.7 here is 85 (compared with 9 under no-geneflow) and very many trios now have significant p values - even after FDR correction, we have p<0.05 for whopping 671 trios. Finally, the f4-ratios are also elevated, up to almost 15% in some cases.

    To remind ourselves, the simulated tree and geneflow events are shown on the left. The 15% f4-ratios estimates correspond reasonably well with the strength of the geneflow events that we simulated (in the region of 8% to 18%). However, we simulated only five geneflow events and have 671 significant p values and 138 f4-ratio values above 3%. This is because the test statistics are correlated when trios share an (internal) branch in the overall population or species tree. Therefore, a system of all possible four taxon tests across a data set can be difficult to interpret. In any case (and with any methods) pinpointing specific introgression events in data sets with tens or hundreds of populations or species remains challenging - especially when genetic data is all the evidence we have.

    The scripts plot_d.rb and plot_f4ratio.rb were originally developed to help with such interpretation, and can still be useful. Because they take the maximum D or f4-ratio value between species in the P2 and P3 positions, across all possible species in P1, the plot deals with some of the correlated signals and redundancy in the data by focusing on the overall support for geneflow between pairs of species or their ancestors, which could have happened at any time in the past since the species in P2 and P3 positions diverged from each other.

    Question 3: How informative are the plots above? Can you identify the gene flow events from the plots?

    As an upgrade on the above plots we developed with Hannes Svardal, the f-branch or fb(C) metric (introduced in Malinsky et al. (2018). This is designed to disentangle correlated f4-ratio results and, unlike the matrix presentation above, f-branch can assign gene flow to specific, possibly internal, branches on a phylogeny. The f-branch metric builds upon and formalises verbal arguments employed by Martin et al. (2013), who used these lines of reasoning to assign gene flow to specific internal branches on the phylogeny of Heliconius butterflies.

    The logic of f-branch is illustated in the following figure. The panel (c) provides an example illustrating interdependences between different f4-ratio scores, which can be informative about the timing of introgression. In this example, different choices for the P1 population provide constraints on when the gene flow could have happened. (d) Based on relationships between the f4-ratio results from different four taxon tests, the f-branch, or fբ statistic, distinguishes between admixture at different time periods, assigning signals to different (possibly internal) branches in the population/species tree

    This is implemented in the Dsuite Fbranch subcommand, and the plotting utility, called dtools.py is in the utils subfolder of the Dsuite package.

    The second command creates a file called fbranch.png , which is shown below.

    Question 4: Can you identify the gene flow events clearer here than from the matrix plots above? Is this a good showcase for the f-branch method?

    Question 5: If you exclude species with the strongest f4-ratio of f-branch signals, can you then get a correct phylogeny from PAUP*?

    Question 6: What happens when you re-run Dsuite with the inferred (wrong) tree from PAUP*?

    2. Finding specific introgressed loci - adaptive introgression in Malawi cichlids

    This exercise is based on analysis from the Malinsky et al. (2018) manuscript published in Nature Ecol. Evo.. The paper shows that two deep water adapted lineages of cichlids share signatures of selection and very similar haplotypes in two green-sensitive opsin genes (RH2Aβ and RH2B). The genes are located next to each other on scaffold_18. To find out whether these shared signatures are the result of convergent evolution or of adaptive introgression, we used the f_dM statistic. The f_dM is related to Patterson’s D and to the f4-ratio, but is better suited to analyses of sliding genomic windows. The calculation of this statistic is implemented in the program Dsuite Dinvestigate .

    The data for this exercise are in the data folder. It includes the VCF file with variants mapping to the scaffold_18 of the Malawi cichlid reference genome we used at the time - scaffold_18.vcf.gz . There are also two other files required to run Dinvestigate: the “SETS” file and the “test_trios” file. In this case they are called: MalawiSetsFile.txt and MalawiTestTriosForInvestigate.txt . The “TestTrios” file specifies that we want to investigate the admixture signal between the Diplotaxodon genus and the deep benthic group, compared with the mbuna group. The “SETS” file specifies which individuals belong to these groups. Finally, the command to execute the analysis is:

    The -w 50,25 option specifies that the statistics should be averaged over windows of 50 informative SNPs, moving forward by 25 SNPs at each step. The run should take a little under 10 minutes. We suggest you have a tea/coffee break while you wait for the results ).

    Question 7: What are the overall D and f_dM values over the entire scaffold_18? What does this suggest?

    The results are output by Dsuite into the file mbuna_deep_Diplotaxodon_localFstats__50_25.txt . A little R plotting function plotInvestigateResults.R is prepared for you. Use the script to load in the file you just produced (line 3) and plot the D statistic (line 6). Also execute line 8 of the script to plot the f_dM values. Do you see any signal near the opsin coordinates? We also plot the f_d statistic. As you can see, the top end of the plot is the same as for the f_dM, but the f_d is asymmetrical, extending far further into negative values.

    Question 8: Do you see any interesting signal in the D, f_dM, and f_d statistics? The opsin genes are located between 4.3Mb and 4.4Mb. Do you see anything interesting there?

    Click here to see the resulting R plots

    You could also plot the new d_f statistic? Doe that look any better?

    Finally, we zoom in at the region of the opsin genes (line 12). As you can see, the results look like a single “mountain” extending over 100kb.

    Click here to see the zoom in with `-w 50,25`

    But there is more structure than that in the region. Perhaps we need to reduce the window or step size to see a greater level of detai.

    They can be plotted with the same R script. Have a look at the results.

    Click here to see the zoom in with `-w 50,5`

    Click here to see the zoom in with `-w 50,1`

    Click here to see the zoom in with `-w 10,1`

    Click here to see the zoom in with `-w 2,1`

    Question 9: What combination of window size/step seems to have the best resolution? Why is the smallest window so noisy?

    Question 10: What happens if you plot individual data points, instead of a continuous line? Are the results clearer?

    Click here to see the zoom in with `-w 10,1` and individual data points

    3. Finding geneflow in a real dataset - Tanganyikan cichlids

    In this execise, we are going to see if we can reproduce the findings reported by Gante et al. (2016), with a different dataset. The Gante et al. dataset contained whole genome sequence data from five species from the cichlid genus Neolamprologus. The authors analysed these data and reported conclusions that are summarised by the figure below:

    A dataset containing these species, but also six additional Neolamprologus species (for a total of 11) was used in the tutorials on Species-Tree Inference with SNP Data and Divergence-Time Estimation with SNP Data.

    Question 11: Are the trees you reconstructed in these exercises consistent with the relationships reported by Gante et al.?

    Here we use data with 10 Neolamprologus species (the clearly hybrid Neolamprologus cancellatus removed), to reassess the evidence for geneflow within this genus with the f4-ratio and f-branch statistics. The genetic data are in NC_031969.vcf.gz , the file specifying sample->species relationships is NC_031969_sets.txt and the tree topology hypothesis is in SNAPP_tree.txt . We run the analysis for all possible trios as follows:

    This should finish in a couple of minutes. There are 'only' ten species, so 120 trios. Could this be manageable? Have a look at the output file TanganyikaCichlids/NC_031969_sets__tree.txt and see if you can interpret the results. Chances are that is is still too complex to interpret the results for the trios just by looking at them. Perhaps you can try the ‘f-branch’ method:

    Question 12: Are the geneflow signals seen here consistent with the Gante et al. figure?

    Question 13: What happens when we focus only on the five species from Gante et al. and exclude all others?

    Notice the -n option to dtools.py , to specify the output file name, making sure that our previous plots are not overwritten. Below is the plot, after a little editing in Inkscape.

    A very simple alternative way of investigating patterns of ancestry in potentially introgressed or hybrid species is to "paint" their chromosomes according to the genotypes carried at sites that are fixed between the presumed parental species. This type of plot, termed "ancestry painting" was used for example by Fu et al. (2015 Fig. 2) to find blocks of Neanderthal ancestry in an ancient human genome, by Der Sarkassian et al. (2015 Fig. 4) to investigate the ancestry of Przewalski's horses, by Runemark et al. (2018 Suppl. Fig. 4) to assess hybridization in sparrows, and by Barth et al. (2019 Fig. 2) to identify hybrids in tropical eels.

    If you haven't seen any of the above-named studies, you might want to have a look at the ancestry-painting plots in some of them. You may note that the ancestry painting in Fu et al. (2015 Fig. 2) is slightly different from the other two studies because no discrimination is made between heterozygous and homozygous Neanderthal alleles. Each sample in Fig. 2 of Fu et al. (2015) is represented by a single row of cells that are white or colored depending on whether or not the Neanderthal allele is present at a site. In contrast, each sample in the ancestry paintings of Der Sarkassian et al. (2015 Fig. 4), Runemark et al. (2018 Suppl. Fig. 4), and Barth et al. (2019 Fig. 2) is drawn with two rows of cells. However, as the analyses in both studies were done with unphased data, these two rows do not represent the two haplotypes per sample. Instead, the two cells per site were simply both colored in the same way for homozygous sites or differently for heterozygous sites without regard to haplotype structure.

    Here, we are going to use ancestry painting to investigate ancestry in Neolamprologus cancellatus ("neocan"), assuming that it is a hybrid between the parental species Altolamprologus fasciatus ("altfas") and Telmatochromis vittatus ("telvit"). As in Der Sarkassian et al. (2015 Fig. 4), Runemark et al. (2018 Suppl. Fig. 4), and Barth et al. (2019 Fig. 2), we are going to draw two rows per sample to indicate whether genotypes are homozygous or heterozygous.

    To generate an ancestry painting, we will need the data file NC_031969.f5.sub1.vcf.gz and will run two Ruby scripts. The first of these, get_fixed_site_gts.rb determines the alleles of the putative hybrid species at sites that are fixed differently in the two putative parental species. The second script, plot_fixed_site_gts.rb then uses the output of the first script to draw an ancestry painting. As the first script requires an uncompressed VCF file as input, first uncompress the VCF file for the SNP dataset with the following command:

    Then, run the Ruby script get_fixed_site_gts.rb to determine the alleles at sites that are fixed differently in the two parents. This script expects six arguments these are

    • the name of the uncompressed VCF input file, [ NC_031969.f5.sub1.vcf ,
    • the name of an output file, which will be a tab-delimited table,
    • a string of comma-separated IDs of samples for the first putative parent species,
    • a string of comma-separated IDs of samples for the putative hybrid species,
    • another string of comma-separated IDs of samples for the second putative parent species,
    • a threshold value for the required completeness of parental genotype information so that sites with too much missing data are discarded.

    We'll use NC_031969.f5.sub1.vcf as the input and name the output file pops1.fixed.txt . Assuming that the parental species are Altolamprologus fasciatus ("altfas") and Telmatochromis vittatus ("telvit") and the hybrid species is Neolamprologus cancellatus ("neocan"), we'll specify the sample IDs for these species with the strings "AUE7,AXD5", "JBD5,JBD6", and "LJC9,LJD1". Finally, we'll filter for sites without missing data by specifying "1.0" as the sixth argument. Thus, run the script get_fixed_site_gts.rb with the following command:

    The second script, plot_fixed_site_gts.rb , expects four arguments, which are

    • the name of the file written by script get_fixed_site_gts.rb ,
    • the name of an output file which will be a plot in SVG format,
    • a threshold value for the required completeness, which now applies not only to the parental species but also to the putative hybrid species,
    • the minimum chromosomal distance in bp between SNPs included in the plot. This last argument aims to avoid that the ancestry painting is overly dominated by high-divergence regions.

    We'll use the file pops1.fixed.txt as input, name the output file pops1.fixed.svg , require again that no missing data remains in the output, and we'll thin the remaining distances so that those plotted have a minimum distance of 1,000 bp to each other. Thus, use the following command to draw the ancestry painting:

    The screen output of this script will include some warnings about unexpected genotypes, these can be safely ignored as the script automatically excludes those sites. At the very end, the output should indicate that 6,069 sites with the required completeness were found, these are the sites included in the ancestry painting. Th output also reports, for all analyzed specimens, the heterozygosity at those 6,069 sites. For first-generation hybrids, this heterozygosity is expected to be close to 1.

    Open the file pops1.fixed.svg with a program capable of reading files in SVG format, for example with a browser such as Firefox or with Adobe Illustrator. You should see a plot like the one shown below.

    In this ancestry painting, the two samples of the two parental species are each drawn in solid colors because all included sites were required to be completely fixed and completely without missing data. The samples of Neolamprologus cancellatus, "LJC9" and "LJD1" are drawn in between, with two rows per sample that are colored according to genotypes observed at the 6,069 sites. Keep in mind that even though the pattern may appear to show phased haplotypes, this is not the case instead the bottom row for a sample is arbitrarily colored in red and the top row is colored in blue when the genotype is heterozygous.

    Question 14: Do you notice any surprising difference to the ancestry plots of Der Sarkassian et al. (2015 Fig. 4) and Runemark et al. (2018 Suppl. Fig. 4)?

    Click here to see the answer

    One remarkable difference compared to the ancestry painting of Der Sarkassian et al. (2015 Fig. 4) and Runemark et al. (2018 Suppl. Fig. 4) is that almost no homozygous genotypes are observed in the two samples of Neolamprologus cancellatus: the bottom rows are drawn almost entirely in red for the two putative hybrid individuals and the top rows are almost entirely in blue. The same pattern, however, can be found in Barth et al. (2019 Fig. 2).

    Question 15: How can this difference be explained?

    The fact that both Neolamprologus cancellatus samples are heterozygous for basically all sites that are differentially fixed in the two parental species can only be explained if both of these samples are in fact first-generation hybrids. If introgression would instead be more ancient and backcrossing (or recombination within the hybrid population) had occurred, we would expect that only certain regions of the chromosome are heterozygous while others should be homozygous for the alleles of one or the other of the two parental species. However, unlike in cases where the genomes have been sequenced of parent-offspring trios, we do not know who the actual parent individuals were. We can guess that the parent individuals were members of the species Altolamprologus fasciatus և Telmatochromis vittatus, but whether the parental individuals were part of the same population as the sampled individuals or a more distantly related population within these species remains uncertain.


    Programming Praxis

    We represent a point as a three-slot vector with the point number (on the range 0 to ն-1) in slot 0, x-coordinate in slot 1, and y-coordinate in slot 2. Here are convenience functions:

    (define (n p) (vector-ref p 0))
    (define (x p) (vector-ref p 1))
    (define (y p) (vector-ref p 2))

    A traveling salesman problem is a list of points. We make a problem with make-tsp :

    (define (make-tsp n)
    (define n10 (* n 10))
    (let loop ((n (- n 1)) (ps '()))
    (if (negative? n) ps
    (let ((p (vector n (randint n10) (randint n10))))
    (if (member p ps) (loop n ps)
    (loop (- n 1) (cons p ps)))))))

    We compute distances as they are used, caching them in a global variable dists , which is a two-dimensional matrix initialized in the main solving program. We store the distance twice, in both directions, because the space cost is very little (we allocate the entire matrix), and it saves us the trouble of figuring out a canonical direction:

    (define (dist a b)
    (define (square x) (* x x))
    (when (negative? (matrix-ref dists (n a) (n b)))
    (let ((d (sqrt (+ (square (- (x a) (x b)))
    (square (- (y a) (y b)))))))
    (matrix-set! dists (n a) (n b) d)
    (matrix-set! dists (n b) (n a) d)))
    (matrix-ref dists (n a) (n b)))

    Given a point էջ and a list of unvisited points ps, function nearest finds the nearest unvisited point:

    (define (nearest p ps)
    (let loop ((ps ps) (min-p #f) (min-d #f))
    (cond ((null? ps) min-p)
    ((or (not min-d) (< (dist p (car ps)) min-d))
    (loop (cdr ps) (car ps) (dist p (car ps))))
    (else (loop (cdr ps) min-p min-d)))))

    We are ready for the solver. Tsp initializes the dists matrix, then enters a loop in which it tracks both the current tour and the list of unvisited points at each step of the loop, it calculates the nearest neighbor, adds that point to the current tour and removes it from the list of unvisited points, and loops, stopping when the tour is complete. The initial point is always the first point in the input:

    (define (tsp ps)
    (let ((len (length ps)))
    (set! dists (make-matrix len len -1)))
    (let loop ((tour (list (car ps))) (unvisited (cdr ps)))
    (if (null? unvisited) tour
    (let ((next (nearest (car tour) unvisited)))
    (loop (cons next tour) (remove next unvisited))))))

    Here we compute the cost of the tour:

    (define (cost tour)
    (if (or (null? tour) (null? (cdr tour))) 0
    (let ((start (car tour)))
    (let loop ((tour tour) (sum 0))
    (if (null? (cdr tour))
    (+ sum (dist (car tour) start))
    (loop (cdr tour) (+ sum (dist (car tour) (cadr tour)))))))))