You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
447 lines
18 KiB
447 lines
18 KiB
{
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2,
|
|
"metadata": {
|
|
"colab": {
|
|
"name": "lesson_1-R.ipynb",
|
|
"provenance": [],
|
|
"collapsed_sections": [],
|
|
"toc_visible": true
|
|
},
|
|
"kernelspec": {
|
|
"name": "ir",
|
|
"display_name": "R"
|
|
},
|
|
"language_info": {
|
|
"name": "R"
|
|
},
|
|
"coopTranslator": {
|
|
"original_hash": "c18d3bd0bd8ae3878597e89dcd1fa5c1",
|
|
"translation_date": "2025-08-29T14:57:58+00:00",
|
|
"source_file": "2-Regression/1-Tools/solution/R/lesson_1-R.ipynb",
|
|
"language_code": "tl"
|
|
}
|
|
},
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [],
|
|
"metadata": {
|
|
"id": "YJUHCXqK57yz"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"## Panimula sa Regression - Aralin 1\n",
|
|
"\n",
|
|
"#### Paglalagay sa Tamang Perspektibo\n",
|
|
"\n",
|
|
"✅ Maraming uri ng mga pamamaraan ng regression, at ang pipiliin mo ay nakadepende sa sagot na hinahanap mo. Kung gusto mong hulaan ang posibleng taas ng isang tao batay sa kanyang edad, gagamit ka ng `linear regression`, dahil naghahanap ka ng isang **halagang numerikal**. Kung interesado kang alamin kung ang isang uri ng lutuin ay dapat ituring na vegan o hindi, naghahanap ka ng **kategoryang pagtatalaga**, kaya gagamit ka ng `logistic regression`. Malalaman mo pa ang tungkol sa logistic regression sa mga susunod na bahagi. Mag-isip ng ilang mga tanong na maaari mong itanong sa datos, at alamin kung alin sa mga pamamaraang ito ang mas angkop.\n",
|
|
"\n",
|
|
"Sa bahaging ito, gagamit ka ng isang [maliit na dataset tungkol sa diabetes](https://www4.stat.ncsu.edu/~boos/var.select/diabetes.html). Isipin na gusto mong subukan ang isang paggamot para sa mga pasyenteng may diabetes. Maaaring makatulong ang mga modelo ng Machine Learning upang matukoy kung aling mga pasyente ang mas mahusay na tutugon sa paggamot, batay sa mga kombinasyon ng mga variable. Kahit na ang isang napakasimpleng regression model, kapag na-visualize, ay maaaring magpakita ng impormasyon tungkol sa mga variable na makakatulong sa iyo na ayusin ang iyong mga teoretikal na klinikal na pagsubok.\n",
|
|
"\n",
|
|
"Sa sinabi na, simulan na natin ang gawaing ito!\n",
|
|
"\n",
|
|
"<p >\n",
|
|
" <img src=\"../../images/encouRage.jpg\"\n",
|
|
" width=\"630\"/>\n",
|
|
" <figcaption>Likha ni @allison_horst</figcaption>\n",
|
|
"\n",
|
|
"<!--<br>Likha ni @allison_horst-->\n"
|
|
],
|
|
"metadata": {
|
|
"id": "LWNNzfqd6feZ"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"## 1. Paglo-load ng ating tool set\n",
|
|
"\n",
|
|
"Para sa task na ito, kakailanganin natin ang mga sumusunod na packages:\n",
|
|
"\n",
|
|
"- `tidyverse`: Ang [tidyverse](https://www.tidyverse.org/) ay isang [koleksyon ng mga R packages](https://www.tidyverse.org/packages) na dinisenyo upang gawing mas mabilis, mas madali, at mas masaya ang data science!\n",
|
|
"\n",
|
|
"- `tidymodels`: Ang [tidymodels](https://www.tidymodels.org/) framework ay isang [koleksyon ng mga packages](https://www.tidymodels.org/packages/) para sa modeling at machine learning.\n",
|
|
"\n",
|
|
"Maaaring i-install ang mga ito gamit ang:\n",
|
|
"\n",
|
|
"`install.packages(c(\"tidyverse\", \"tidymodels\"))`\n",
|
|
"\n",
|
|
"Ang script sa ibaba ay nagche-check kung mayroon kang mga kinakailangang packages para makumpleto ang module na ito at ini-install ang mga ito para sa iyo kung may kulang.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "FIo2YhO26wI9"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"source": [
|
|
"suppressWarnings(if(!require(\"pacman\")) install.packages(\"pacman\"))\n",
|
|
"pacman::p_load(tidyverse, tidymodels)"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"output_type": "stream",
|
|
"name": "stderr",
|
|
"text": [
|
|
"Loading required package: pacman\n",
|
|
"\n"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"id": "cIA9fz9v7Dss",
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"outputId": "2df7073b-86b2-4b32-cb86-0da605a0dc11"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"Ngayon, i-load natin ang mga kahanga-hangang package na ito at gawing available ang mga ito sa kasalukuyang R session natin. (Ito ay para lamang sa ilustrasyon, `pacman::p_load()` ay ginawa na iyon para sa iyo)\n"
|
|
],
|
|
"metadata": {
|
|
"id": "gpO_P_6f9WUG"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# load the core Tidyverse packages\r\n",
|
|
"library(tidyverse)\r\n",
|
|
"\r\n",
|
|
"# load the core Tidymodels packages\r\n",
|
|
"library(tidymodels)\r\n"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "NLMycgG-9ezO"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"## 2. Ang diabetes dataset\n",
|
|
"\n",
|
|
"Sa ehersisyong ito, ilalabas natin ang ating kakayahan sa regression sa pamamagitan ng paggawa ng mga prediksyon gamit ang isang diabetes dataset. Ang [diabetes dataset](https://www4.stat.ncsu.edu/~boos/var.select/diabetes.rwrite1.txt) ay naglalaman ng `442 samples` ng datos tungkol sa diabetes, na may 10 predictor feature variables: `edad`, `kasarian`, `body mass index`, `average blood pressure`, at `anim na blood serum measurements`, pati na rin ang isang outcome variable na `y`: isang dami o quantitative na sukat ng pag-usad ng sakit isang taon matapos ang baseline.\n",
|
|
"\n",
|
|
"|Bilang ng obserbasyon|442|\n",
|
|
"|----------------------|:---|\n",
|
|
"|Bilang ng predictors|Ang unang 10 kolum ay numerikong predictive|\n",
|
|
"|Outcome/Target|Ang Kolum 11 ay isang dami o quantitative na sukat ng pag-usad ng sakit isang taon matapos ang baseline|\n",
|
|
"|Impormasyon sa Predictors|- edad sa taon\n",
|
|
"||- kasarian\n",
|
|
"||- bmi body mass index\n",
|
|
"||- bp average blood pressure\n",
|
|
"||- s1 tc, kabuuang serum cholesterol\n",
|
|
"||- s2 ldl, low-density lipoproteins\n",
|
|
"||- s3 hdl, high-density lipoproteins\n",
|
|
"||- s4 tch, kabuuang cholesterol / HDL\n",
|
|
"||- s5 ltg, posibleng log ng antas ng serum triglycerides\n",
|
|
"||- s6 glu, antas ng asukal sa dugo|\n",
|
|
"\n",
|
|
"> 🎓 Tandaan, ito ay supervised learning, at kailangan natin ng target na tinatawag na 'y'.\n",
|
|
"\n",
|
|
"Bago mo manipulahin ang datos gamit ang R, kailangan mong i-import ang datos sa memorya ng R, o gumawa ng koneksyon sa datos na magagamit ng R upang ma-access ito nang malayuan.\n",
|
|
"\n",
|
|
"> Ang [readr](https://readr.tidyverse.org/) package, na bahagi ng Tidyverse, ay nagbibigay ng mabilis at madaling paraan upang magbasa ng rectangular na datos papunta sa R.\n",
|
|
"\n",
|
|
"Ngayon, i-load natin ang diabetes dataset na ibinigay sa source URL na ito: <https://www4.stat.ncsu.edu/~boos/var.select/diabetes.html>\n",
|
|
"\n",
|
|
"Gagawa rin tayo ng sanity check sa ating datos gamit ang `glimpse()` at ipapakita ang unang 5 rows gamit ang `slice()`.\n",
|
|
"\n",
|
|
"Bago tayo magpatuloy, ipakilala rin natin ang isang bagay na madalas mong makikita sa R code 🥁🥁: ang pipe operator `%>%`\n",
|
|
"\n",
|
|
"Ang pipe operator (`%>%`) ay nagsasagawa ng mga operasyon sa lohikal na pagkakasunod-sunod sa pamamagitan ng pagpapasa ng isang object papunta sa isang function o call expression. Maaari mong isipin ang pipe operator na parang sinasabi nitong \"at pagkatapos\" sa iyong code.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "KM6iXLH996Cl"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Import the data set\r\n",
|
|
"diabetes <- read_table2(file = \"https://www4.stat.ncsu.edu/~boos/var.select/diabetes.rwrite1.txt\")\r\n",
|
|
"\r\n",
|
|
"\r\n",
|
|
"# Get a glimpse and dimensions of the data\r\n",
|
|
"glimpse(diabetes)\r\n",
|
|
"\r\n",
|
|
"\r\n",
|
|
"# Select the first 5 rows of the data\r\n",
|
|
"diabetes %>% \r\n",
|
|
" slice(1:5)"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "Z1geAMhM-bSP"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"`glimpse()` ipinapakita sa atin na ang data na ito ay may 442 na rows at 11 na columns, kung saan lahat ng columns ay may data type na `double`.\n",
|
|
"\n",
|
|
"<br>\n",
|
|
"\n",
|
|
"> Ang `glimpse()` at `slice()` ay mga function sa [`dplyr`](https://dplyr.tidyverse.org/). Ang Dplyr, bahagi ng Tidyverse, ay isang grammar ng data manipulation na nagbibigay ng pare-parehong set ng mga verbs na tumutulong sa iyo na lutasin ang mga karaniwang hamon sa data manipulation.\n",
|
|
"\n",
|
|
"<br>\n",
|
|
"\n",
|
|
"Ngayon na mayroon na tayong data, mag-focus tayo sa isang feature (`bmi`) bilang target para sa exercise na ito. Kakailanganin natin piliin ang mga nais na columns. Paano natin ito gagawin?\n",
|
|
"\n",
|
|
"Ang [`dplyr::select()`](https://dplyr.tidyverse.org/reference/select.html) ay nagbibigay-daan sa atin na *piliin* (at opsyonal na palitan ang pangalan) ng mga columns sa isang data frame.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "UwjVT1Hz-c3Z"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Select predictor feature `bmi` and outcome `y`\r\n",
|
|
"diabetes_select <- diabetes %>% \r\n",
|
|
" select(c(bmi, y))\r\n",
|
|
"\r\n",
|
|
"# Print the first 5 rows\r\n",
|
|
"diabetes_select %>% \r\n",
|
|
" slice(1:10)"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "RDY1oAKI-m80"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"## 3. Pagsasanay at Pagsusuri ng Data\n",
|
|
"\n",
|
|
"Karaniwan sa supervised learning ang *hatiin* ang data sa dalawang subset; isang (karaniwang mas malaking) set para sanayin ang modelo, at isang mas maliit na \"hold-back\" set para makita kung paano gumana ang modelo.\n",
|
|
"\n",
|
|
"Ngayon na handa na ang ating data, maaari nating tingnan kung makakatulong ang isang makina upang matukoy ang isang lohikal na paghahati sa mga numero sa dataset na ito. Maaari nating gamitin ang [rsample](https://tidymodels.github.io/rsample/) na package, na bahagi ng Tidymodels framework, upang lumikha ng isang object na naglalaman ng impormasyon kung *paano* hahatiin ang data, at pagkatapos ay gumamit ng dalawa pang rsample functions upang kunin ang mga nilikhang training at testing sets:\n"
|
|
],
|
|
"metadata": {
|
|
"id": "SDk668xK-tc3"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"set.seed(2056)\r\n",
|
|
"# Split 67% of the data for training and the rest for tesing\r\n",
|
|
"diabetes_split <- diabetes_select %>% \r\n",
|
|
" initial_split(prop = 0.67)\r\n",
|
|
"\r\n",
|
|
"# Extract the resulting train and test sets\r\n",
|
|
"diabetes_train <- training(diabetes_split)\r\n",
|
|
"diabetes_test <- testing(diabetes_split)\r\n",
|
|
"\r\n",
|
|
"# Print the first 3 rows of the training set\r\n",
|
|
"diabetes_train %>% \r\n",
|
|
" slice(1:10)"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "EqtHx129-1h-"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"## 4. Mag-train ng linear regression model gamit ang Tidymodels\n",
|
|
"\n",
|
|
"Ngayon, handa na tayong i-train ang ating modelo!\n",
|
|
"\n",
|
|
"Sa Tidymodels, tinutukoy mo ang mga modelo gamit ang `parsnip()` sa pamamagitan ng pagtukoy sa tatlong konsepto:\n",
|
|
"\n",
|
|
"- Ang **uri** ng modelo ay nagkakaiba-iba tulad ng linear regression, logistic regression, decision tree models, at iba pa.\n",
|
|
"\n",
|
|
"- Ang **mode** ng modelo ay kinabibilangan ng mga karaniwang opsyon tulad ng regression at classification; ang ilang uri ng modelo ay sumusuporta sa alinman sa mga ito habang ang iba ay may isa lamang na mode.\n",
|
|
"\n",
|
|
"- Ang **engine** ng modelo ay ang computational tool na gagamitin upang i-fit ang modelo. Kadalasan, ito ay mga R packages, tulad ng **`\"lm\"`** o **`\"ranger\"`**\n",
|
|
"\n",
|
|
"Ang impormasyong ito tungkol sa pagmomodelo ay nakukuha sa isang model specification, kaya't gumawa na tayo ng isa!\n"
|
|
],
|
|
"metadata": {
|
|
"id": "sBOS-XhB-6v7"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Build a linear model specification\r\n",
|
|
"lm_spec <- \r\n",
|
|
" # Type\r\n",
|
|
" linear_reg() %>% \r\n",
|
|
" # Engine\r\n",
|
|
" set_engine(\"lm\") %>% \r\n",
|
|
" # Mode\r\n",
|
|
" set_mode(\"regression\")\r\n",
|
|
"\r\n",
|
|
"\r\n",
|
|
"# Print the model specification\r\n",
|
|
"lm_spec"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "20OwEw20--t3"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"Pagkatapos ma-*specify* ang modelo, ang modelo ay maaaring `i-estimate` o `i-train` gamit ang [`fit()`](https://parsnip.tidymodels.org/reference/fit.html) na function, karaniwang gamit ang isang formula at ilang datos.\n",
|
|
"\n",
|
|
"`y ~ .` nangangahulugan na itutugma natin ang `y` bilang ang inaasahang halaga/target, na ipinaliwanag ng lahat ng predictors/features, ibig sabihin, `.` (sa kasong ito, mayroon lamang tayong isang predictor: `bmi`).\n"
|
|
],
|
|
"metadata": {
|
|
"id": "_oDHs89k_CJj"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Build a linear model specification\r\n",
|
|
"lm_spec <- linear_reg() %>% \r\n",
|
|
" set_engine(\"lm\") %>%\r\n",
|
|
" set_mode(\"regression\")\r\n",
|
|
"\r\n",
|
|
"\r\n",
|
|
"# Train a linear regression model\r\n",
|
|
"lm_mod <- lm_spec %>% \r\n",
|
|
" fit(y ~ ., data = diabetes_train)\r\n",
|
|
"\r\n",
|
|
"# Print the model\r\n",
|
|
"lm_mod"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "YlsHqd-q_GJQ"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"Mula sa output ng modelo, makikita natin ang mga coefficients na natutunan sa panahon ng training. Ang mga ito ay kumakatawan sa coefficients ng linya ng pinakamahusay na akma na nagbibigay sa atin ng pinakamababang kabuuang error sa pagitan ng aktwal at hinulaang variable.\n",
|
|
"<br>\n",
|
|
"\n",
|
|
"## 5. Gumawa ng mga prediksyon sa test set\n",
|
|
"\n",
|
|
"Ngayon na nakapag-train na tayo ng modelo, magagamit natin ito upang hulaan ang pag-usad ng sakit y para sa test dataset gamit ang [parsnip::predict()](https://parsnip.tidymodels.org/reference/predict.model_fit.html). Ito ay gagamitin upang iguhit ang linya sa pagitan ng mga grupo ng datos.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "kGZ22RQj_Olu"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Make predictions for the test set\r\n",
|
|
"predictions <- lm_mod %>% \r\n",
|
|
" predict(new_data = diabetes_test)\r\n",
|
|
"\r\n",
|
|
"# Print out some of the predictions\r\n",
|
|
"predictions %>% \r\n",
|
|
" slice(1:5)"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "nXHbY7M2_aao"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"Woohoo! 💃🕺 Katatapos lang nating mag-train ng modelo at ginamit ito para gumawa ng mga prediksyon!\n",
|
|
"\n",
|
|
"Kapag gumagawa ng mga prediksyon, ang kaugalian sa tidymodels ay palaging mag-produce ng tibble/data frame ng mga resulta na may standardized na mga pangalan ng column. Ginagawa nitong madali ang pagsasama ng orihinal na data at ang mga prediksyon sa isang format na magagamit para sa mga susunod na operasyon tulad ng pag-plot.\n",
|
|
"\n",
|
|
"`dplyr::bind_cols()` ay epektibong nagbi-bind ng maraming data frame sa column.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "R_JstwUY_bIs"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Combine the predictions and the original test set\r\n",
|
|
"results <- diabetes_test %>% \r\n",
|
|
" bind_cols(predictions)\r\n",
|
|
"\r\n",
|
|
"\r\n",
|
|
"results %>% \r\n",
|
|
" slice(1:5)"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "RybsMJR7_iI8"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"## 6. Ipakita ang mga resulta ng modelo\n",
|
|
"\n",
|
|
"Ngayon, oras na para makita ito nang biswal 📈. Gagawa tayo ng scatter plot ng lahat ng mga halaga ng `y` at `bmi` mula sa test set, pagkatapos ay gagamitin ang mga prediksyon upang gumuhit ng linya sa pinaka-angkop na lugar, sa pagitan ng mga pangkat ng datos ng modelo.\n",
|
|
"\n",
|
|
"May ilang sistema ang R para gumawa ng mga graph, ngunit ang `ggplot2` ay isa sa pinaka-elegante at pinaka-maraming gamit. Pinapayagan ka nitong bumuo ng mga graph sa pamamagitan ng **pagsasama-sama ng mga independiyenteng bahagi**.\n"
|
|
],
|
|
"metadata": {
|
|
"id": "XJbYbMZW_n_s"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"source": [
|
|
"# Set a theme for the plot\r\n",
|
|
"theme_set(theme_light())\r\n",
|
|
"# Create a scatter plot\r\n",
|
|
"results %>% \r\n",
|
|
" ggplot(aes(x = bmi)) +\r\n",
|
|
" # Add a scatter plot\r\n",
|
|
" geom_point(aes(y = y), size = 1.6) +\r\n",
|
|
" # Add a line plot\r\n",
|
|
" geom_line(aes(y = .pred), color = \"blue\", size = 1.5)"
|
|
],
|
|
"outputs": [],
|
|
"metadata": {
|
|
"id": "R9tYp3VW_sTn"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"✅ Pag-isipan mo nang mabuti kung ano ang nangyayari dito. Isang tuwid na linya ang dumadaan sa maraming maliliit na tuldok ng datos, pero ano nga ba ang ginagawa nito? Nakikita mo ba kung paano mo magagamit ang linyang ito upang mahulaan kung saan dapat ilagay ang isang bagong, hindi pa nakikitang punto ng datos kaugnay ng y axis ng plot? Subukang ilarawan sa mga salita ang praktikal na gamit ng modelong ito.\n",
|
|
"\n",
|
|
"Binabati kita, nakagawa ka ng iyong unang linear regression model, lumikha ng prediksyon gamit ito, at ipinakita ito sa isang plot!\n"
|
|
],
|
|
"metadata": {
|
|
"id": "zrPtHIxx_tNI"
|
|
}
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"\n---\n\n**Paunawa**: \nAng dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.\n"
|
|
]
|
|
}
|
|
]
|
|
} |