[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EKY3SSWHVT89MR6F6393D9":3,"skill-same:01M6EKY3SSWHVT89MR6F6393D9":79},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":32,"linkOnly":33,"markdownContent":34,"markdownBody":35,"frontMatter":36,"refName":56,"commitSha":57,"skillDirectory":58,"forksCount":59,"repositoryHtmlUrl":60,"repositoryHomepageUrl":6,"ownerHtmlUrl":61,"ownerBlogUrl":62,"ownerDescription":63,"updatedAt":64,"install":65,"resources":78},"01M6EKY3SSWHVT89MR6F6393D9","r-bridge-execution",null,"Running R from Python — certified Rscript+JSON bridge for psychometrics (lavaan\u002Fmirt\u002FdifR); generated code calls psy_* wrappers, NEVER writes raw R.","cgpan\u002Fedm-ars-public","cgpan","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F118746117?v=4","01M6EKT5TG36Q3GH340QN8RH08","Chenguang Pan","01M6EKT5YTQVRARGJF0VPA1SY7",5,"MIT","https:\u002F\u002Fgithub.com\u002Fcgpan\u002Fedm-ars-public\u002Fblob\u002Fmain\u002Fskills\u002Fmethodology\u002Fr-bridge-execution\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31],"execution","bridge","r bridge execution","python","code","methodology","critic","json","generated","reliability","never","analyst","psychometrics","2026-11-10 10:12:30",false,"---\nname: r-bridge-execution\nlayer: methodology\ndescription: Running R from Python — certified Rscript+JSON bridge for psychometrics (lavaan\u002Fmirt\u002FdifR); generated code calls psy_* wrappers, NEVER writes raw R.\ntrigger_keywords:\n  - psychometric\n  - irt\n  - cfa\n  - invariance\n  - dif\n  - reliability\n  - lavaan\n  - mirt\napplicable_task_types:\n  - psychometrics\napplicable_datasets: []\napplicable_stages:\n  - DataEngineer\n  - Analyst\n  - Critic\npriority: 1\nreferences_skills: []\nresources: []\nversion: \"1.0\"\nrule_severity: mandatory\n---\n\n# Running R from Python (the certified bridge)\n\nPsychometric estimation uses R's field-standard packages (lavaan, mirt,\nMASS\u002FdifR) through a deterministic bridge — because Python's\npsychometrics libraries did not meet the certification bar, and because\nLLM-generated R is not certifiable.\n\n## The one rule\n\n**Generated code NEVER writes R code and NEVER calls `Rscript`,\n`subprocess`, or `src.r_bridge` directly.** It calls the certified\nPython wrappers in `analysis_helpers`:\n\n```python\n# Signatures (use EXACTLY these parameter names):\nres_cfa = analysis_helpers.psy_cfa(items_df, model=\"F =~ it1 + it2 + it3\")\nres_inv = analysis_helpers.psy_invariance(items_df, group=group_series,\n                                          model=\"F =~ it1 + it2 + it3\")\nres_grm = analysis_helpers.psy_grm(items_df)              # Likert GRM\nres_dif = analysis_helpers.psy_dif(items_df, group=group_series)\nres_ctt = analysis_helpers.psy_ctt(items_df)               # pure Python\nres_om  = analysis_helpers.psy_omega(res_cfa)              # from CFA loadings\n```\n\nEach wrapper serializes the item matrix to JSON, runs the matching\ncertified script in `r_helpers\u002F` via `Rscript --vanilla`, and returns a\nplain dict. Hand-rolling any of these models (in R OR Python) is a\ncontract violation — the recipes are certification-locked\n(`scripts\u002Fpsychometric_gates.py`: CFA loading error .016, GRM a-error\n.066, DIF hit rate 1.0 \u002F false positives 0.0, invariance null honesty).\n\n## Data conventions at the bridge\n\n- Items go in as NUMERIC columns; NCES sentinels must already be NaN.\n- **Items are never imputed.** lavaan uses FIML (`missing=\"fiml\"`);\n  mirt handles NA natively; the ordinal-DIF models use listwise deletion\n  and report the analyzed n. lavaan drops all-missing ROWS — expect the\n  returned `n` to be ≤ the input rows.\n- Likert items must be positive-integer categories (1..k) for GRM\u002FDIF;\n  reverse-coded items must be recoded BEFORE the call (per the\n  registry's item bank flags).\n\n## Environment facts (Critic-checkable)\n\n- R ≥ 4.4 resolved via config `r_bridge.rscript_path` →\n  `EDM_ARS_RSCRIPT` env → common install dirs → PATH. Missing R fails\n  loudly with remediation — never silently skip an analysis.\n- R is NOT in the Docker sandbox image: psychometrics runs use the\n  subprocess executor (`sandbox.enabled: false`).\n- The bridge rejects any script path outside `r_helpers\u002F`.\n","# Running R from Python (the certified bridge)\n\nPsychometric estimation uses R's field-standard packages (lavaan, mirt,\nMASS\u002FdifR) through a deterministic bridge — because Python's\npsychometrics libraries did not meet the certification bar, and because\nLLM-generated R is not certifiable.\n\n## The one rule\n\n**Generated code NEVER writes R code and NEVER calls `Rscript`,\n`subprocess`, or `src.r_bridge` directly.** It calls the certified\nPython wrappers in `analysis_helpers`:\n\n```python\n# Signatures (use EXACTLY these parameter names):\nres_cfa = analysis_helpers.psy_cfa(items_df, model=\"F =~ it1 + it2 + it3\")\nres_inv = analysis_helpers.psy_invariance(items_df, group=group_series,\n                                          model=\"F =~ it1 + it2 + it3\")\nres_grm = analysis_helpers.psy_grm(items_df)              # Likert GRM\nres_dif = analysis_helpers.psy_dif(items_df, group=group_series)\nres_ctt = analysis_helpers.psy_ctt(items_df)               # pure Python\nres_om  = analysis_helpers.psy_omega(res_cfa)              # from CFA loadings\n```\n\nEach wrapper serializes the item matrix to JSON, runs the matching\ncertified script in `r_helpers\u002F` via `Rscript --vanilla`, and returns a\nplain dict. Hand-rolling any of these models (in R OR Python) is a\ncontract violation — the recipes are certification-locked\n(`scripts\u002Fpsychometric_gates.py`: CFA loading error .016, GRM a-error\n.066, DIF hit rate 1.0 \u002F false positives 0.0, invariance null honesty).\n\n## Data conventions at the bridge\n\n- Items go in as NUMERIC columns; NCES sentinels must already be NaN.\n- **Items are never imputed.** lavaan uses FIML (`missing=\"fiml\"`);\n  mirt handles NA natively; the ordinal-DIF models use listwise deletion\n  and report the analyzed n. lavaan drops all-missing ROWS — expect the\n  returned `n` to be ≤ the input rows.\n- Likert items must be positive-integer categories (1..k) for GRM\u002FDIF;\n  reverse-coded items must be recoded BEFORE the call (per the\n  registry's item bank flags).\n\n## Environment facts (Critic-checkable)\n\n- R ≥ 4.4 resolved via config `r_bridge.rscript_path` →\n  `EDM_ARS_RSCRIPT` env → common install dirs → PATH. Missing R fails\n  loudly with remediation — never silently skip an analysis.\n- R is NOT in the Docker sandbox image: psychometrics runs use the\n  subprocess executor (`sandbox.enabled: false`).\n- The bridge rejects any script path outside `r_helpers\u002F`.\n",{"name":5,"layer":24,"version":37,"priority":38,"resources":39,"description":7,"rule_severity":40,"trigger_keywords":41,"applicable_stages":49,"references_skills":53,"applicable_datasets":54,"applicable_task_types":55},"1.0",1,[],"mandatory",[42,43,44,45,46,28,47,48],"psychometric","irt","cfa","invariance","dif","lavaan","mirt",[50,51,52],"DataEngineer","Analyst","Critic",[],[],[31],"main","1aeaead66d2bf876109f3b101005d2eed54041d9","skills\u002Fmethodology\u002Fr-bridge-execution",0,"https:\u002F\u002Fgithub.com\u002Fcgpan\u002Fedm-ars-public","https:\u002F\u002Fgithub.com\u002Fcgpan","https:\u002F\u002Fcpan.ai","Ph.D. candidate in Measurement, Evaluation, and Statistics.","2026-09-28 20:39:06",{"source":8,"skillName":5,"commands":66,"prompt":76,"zipAvailable":77},[67,70,73],{"tool":68,"command":69},"npx","npx skills add cgpan\u002Fedm-ars-public --skill r-bridge-execution",{"tool":71,"command":72},"bunx","bunx skills add cgpan\u002Fedm-ars-public --skill r-bridge-execution",{"tool":74,"command":75},"pnpm","pnpm dlx skills add cgpan\u002Fedm-ars-public --skill r-bridge-execution","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fcgpan\u002Fedm-ars-public\u002Fblob\u002Fmain\u002Fskills\u002Fmethodology\u002Fr-bridge-execution\u002FSKILL.md",true,[],[80,103,116,125,137,148],{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":96,"publishedAt":32},"01M6EM1ZTQZVAP90DZTVBHCCFB","acm-fixture","Fixture writing skill for ACM acmart sigconf paper output.","https:\u002F\u002Fgithub.com\u002Fcgpan\u002Fedm-ars-public\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fskills\u002Fwriting\u002Facm-fixture\u002FSKILL.md",[86,91],{"categoryNo":87,"categoryName":88,"taxonomyType":89,"taxonomyTypeDesc":90},"01JBSEEDCAT000000000000018","写作与文案","SCENARIO","使用场景",{"categoryNo":92,"categoryName":93,"taxonomyType":94,"taxonomyTypeDesc":95},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[97,98,99,100,101,102],"acm fixture","fixture","writing","LaTeX","writer","paper",{"skillNo":104,"name":105,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":109,"publishedAt":32},"01M6EM1XNFETAZFGPHQPAXKBYN","prediction-fixture","Fixture skill for the prediction task type; references shap-fixture.","https:\u002F\u002Fgithub.com\u002Fcgpan\u002Fedm-ars-public\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fskills\u002Ftask-type\u002Fprediction-fixture\u002FSKILL.md",[],[98,110,111,112,113,114,115,30],"prediction fixture","task","type","references","fixture skill","shap",{"skillNo":117,"name":118,"nameZh":6,"description":119,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":120,"categories":121,"keywords":122,"publishedAt":32},"01M6EM1V4MQXYGQ7K2ZDJRAPSM","causal-fixture","Fixture skill for the causal_inference task type.","https:\u002F\u002Fgithub.com\u002Fcgpan\u002Fedm-ars-public\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fskills\u002Ftask-type\u002Fcausal-fixture\u002FSKILL.md",[],[98,123,112,111,124,114],"causal fixture","inference",{"skillNo":126,"name":127,"nameZh":6,"description":128,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":129,"categories":130,"keywords":131,"publishedAt":32},"01M6EM1SCWFZZ2ACSAP65GNWK9","shap-fixture","Fixture methodology for SHAP feature importance analysis.","https:\u002F\u002Fgithub.com\u002Fcgpan\u002Fedm-ars-public\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fskills\u002Fmethodology\u002Fshap-fixture\u002FSKILL.md",[],[132,98,115,133,24,134,135,136],"shap fixture","feature importance","analysis","explainer","feature",{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":141,"categories":142,"keywords":143,"publishedAt":32},"01M6EM1PZC1MK1G0D1YFVYAQ9W","cluster-recon-fixture","Fixture methodology for reconstructing cluster IDs from fingerprint variables.","https:\u002F\u002Fgithub.com\u002Fcgpan\u002Fedm-ars-public\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fskills\u002Fmethodology\u002Fcluster-recon-fixture\u002FSKILL.md",[],[144,145,146,98,147,24],"recon","cluster recon fixture","cluster","ids",{"skillNo":149,"name":150,"nameZh":6,"description":151,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":152,"categories":153,"keywords":154,"publishedAt":32},"01M6EM1MZVKMSWEXZ7TJ45DS04","hsls09-fixture","Fixture skill for HSLS:09 with a bundled YAML resource and one cross-reference.","https:\u002F\u002Fgithub.com\u002Fcgpan\u002Fedm-ars-public\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fskills\u002Fdataset\u002Fhsls09-fixture\u002FSKILL.md",[],[98,155,156,157,158,114,159,144,146,160],"hsls09 fixture","yaml","public","reference","dataset","registry"]