Pleiotropy(多層遺伝)を定量的に評価する

定量的評価を行うための数学

量的形質xyについて考える。さらに、量的形質を遺伝的要因とそれ以外(環境要因)であるgeの和として考える。


x=g_x+e_x\\
y=g_y+e_y

さらにg_xg_yの分散について考える。


\sigma^{2}_{g_x}=\mathrm{Var} (g_x)\\
\sigma^{2}_{g_y}=\mathrm{Var} (g_y)

ここで、遺伝的相関(genetic correlation)を以下のように定義する。


\rho_g=\frac{\sigma_{g_x,g_y}}{\sqrt{\sigma^2_{g_x}\sigma^2_{g_y}}}

次に、遺伝率の概念を利用して、遺伝的相関を書き直す。


h_x^2=\frac{\sigma^2_{g_x}}{\sigma^2_{p_x}}\\
\sigma^2_{p_x}=\sigma^2_{g_x} +\sigma^2_{e_x}

と定義する。 ここで、


\rho_p=\frac{\sigma_{p_x,p_y}}{\sqrt{\sigma^2_{p_x}\sigma^2_{p_y}}}

を式変形すると、


\rho_p=\rho_g \sqrt{h_x^2 h_y^2}+\rho_e \sqrt{(1-h_x^2)(1-h_y^2)}

となる。この式変形において、


\mathrm{COV}(P_x,P_y)=\mathrm{COV}(G_x,G_y)+\mathrm{COV}(G_x,E_y)+\mathrm{COV}(E_x,G_y)+\mathrm{COV}(E_x,E_y)\\
=\mathrm{COV}(G_x,G_y)+\mathrm{COV}(E_x,E_y)\\
\mathrm{Var}(G_x)=h_x^2\mathrm{Var}(P_x)\\
\mathrm{Var}(E_x)=(1-h_x^2)\mathrm{Var}(P_x)

であることを使う。

参考文献

Genetic correlations of polygenic disease traits: from theory to practice

tasks.jsonについて

tasks.json

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++ アクティブなファイルのビルド",
            "command": "/usr/bin/g++",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "コンパイラ: /usr/bin/g++"
        }
    ]
}

command

実行されるコマンド。外部プログラムでもシェルでも可

options

cwd 実行されるプログラムまたはスクリプトの現在の作業ディレクトリ。省略すると、Code の現在のワークスペースのルートが使用されます。 current working directory??

problemMatcher

problemMatcherプロパティ: エラー発生時にVS Codeに渡されるメッセージのフォーマットをどんな形式のメッセージとして処理するかの指定。この場合は「$tsc」となっているが、これはtscコマンド(TypeScriptコンパイラー)が出力する形式のメッセージとして処理することを指定している

atmarkit.itmedia.co.jp

参考

code.visualstudio.com

c_cpp_properties.jsonについて

生成されたc_cpp_properties.json

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "gnu17",
            "cppStandard": "gnu++14",
            "intelliSenseMode": "linux-gcc-x64"
        }
    ],
    "version": 4
}

役割

configurations

IntelliSense エンジンにプロジェクトと環境設定に関する情報を提供する設定オブジェクトの配列。デフォルトでは、拡張モジュールはあなたのオペレーティングシステムに基づいた設定を作成します。さらに設定を追加することもできます。

name

コンフィギュレーションを識別するためのフレンドリーな名前です。LinuxMac、Win32は、それらのプラットフォームで自動選択されるコンフィギュレーション用の特別な識別子です。VS Codeのステータスバーには、どのコンフィギュレーションがアクティブであるかが表示されます。また、ステータスバーのラベルをクリックすると、アクティブなコンフィギュレーションを変更することができます。 (WSL:Ubuntu とかに変更したほうがいいのか...?)

includePath

インクルードパスとは、ソースファイルに含まれるヘッダーファイル(#include "myHeaderFile.h "など)を含むフォルダーのことです。インテリセンス・エンジンがインクルード・ヘッダー・ファイルを検索するときに使用するパスのリストを指定します。これらのパスでの検索は再帰的ではありません。再帰的な検索を行う場合は を指定します。例えば、${workspaceFolder}/ はすべてのサブディレクトリを検索しますが、${workspaceFolder} は検索しません。Visual StudioがインストールされているWindowsの場合、またはcompilerPath設定でコンパイラーが指定されている場合は、このリストにシステムインクルードパスをリストアップする必要はありません。

defines

ファイルを解析するときに IntelliSense エンジンが使用するプリプロセッサー定義のリストです。オプションで、VERSION=1 のような値を設定するために = を使用します。???

intelliSenseMode

MSVC、gcc、または Clang のアーキテクチャ固有の変種に対応する、使用するインテリセンス モードです。設定されていない場合、または ${default} に設定されている場合、拡張機能はそのプラットフォームのデフォルトを選択します。

プラットフォームのデフォルト

Windows: msvc-x64 Linux: gcc-x64 macOS: clang-x64

これはいじらなくてよさそう

参考

code.visualstudio.com

c_cpp_properties.jsonについて

生成されたc_cpp_properties.json

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "gnu17",
            "cppStandard": "gnu++14",
            "intelliSenseMode": "linux-gcc-x64"
        }
    ],
    "version": 4
}

C++ lambda

#include <algorithm>
#include <functional>
#include <iostream> 
#include<vector>
using namespace std;

int main(){
    int n=5;
    vector<int>v(n);
    for(int i=0;i<n;i++){
        v[i]=3;
    }
    //
    sort(v.begin(),v.end(),[](int i,int j){ if(i==j){return true;} else{return i>j;}});
    
    for(int i=0;i<n;i++){
        cout<<v[i]<<endl;
    }    
    return 0;
}

wandbox.org

C++のラムダにおける条件分岐の1例

#include <algorithm>
#include <functional>
#include <iostream> 
#include<vector>
using namespace std;

int main(){

    auto b=[](int i,int j){
        return [i,j](){
            if(i==j){return 0;}
            else{return i+j;}};};
    cout<<b(2,3)()<<endl;
    
        
    return 0;
}

wandbox.org