Yükleniyor

Php Regresyon Analizi

Regresyon analizi, iki ya da daha çok nicel değişken arasındaki ilişkiyi ölçmek için kullanılan analiz metodudur. Eğer tek bir değişken kullanılarak analiz yapılıyorsa buna tek değişkenli regresyon, birden çok değişken kullanılıyorsa çok değişkenli regresyon analizi olarak isimlendirilir. Regresyon analizi ile değişkenler arasındaki ilişkinin varlığı, eğer ilişki var ise bunun gücü hakkında bilgi edinilebilir. Regresyon terimi için öz Türkçe olarak bağlanım sözcüğü kullanılması teklif edilmiş ise de Türk ekonometriciler arasında bu kullanım yaygın değildir.

Örneğin, bir ziraat mühendisi buğday verimi ve gübre miktarı arasındaki ilişkiyi, bir mühendis, basınç ve sıcaklık, bir ekonomist gelir düzeyi ve tüketim harcamaları, bir eğitimci öğrencilerin devamsızlık gösterdiği gün sayıları ve başarı dereceleri arasındaki ilişkiyi bilmek isteyebilir. Regresyon, iki (ya da daha çok) değişken arasındaki doğrusal ilişkinin fonksiyonel şeklini, biri bağımlı diğeri bağımsız değişken olarak bir doğru denklemi olarak göstermekle kalmaz, değişkenlerden birinin değeri bilindiğinde diğeri hakkında kestirim yapılmasını sağlar. Genellikle bu iki (veya çok) değişkenlerin hepsinin niceliksel ölçekli olması zorunluluğu vardır.

Regresyon analizi hakkında daha fazla sonuç için internetin en büyük kütüphanesi olan wikipedia sitesinde araştırma yapabilirsiniz.

Regresyon analizi php ile yapımı

Regresyon analizi örneğimiz php kullanılarak veritabanlı olarak yapılmıştır. Aşağıda kod bloğunu inceleyebilirsiniz. Tabi ki de gelişime açık bir yapıdır, sadece basit bir şekilde sizler için yapmaya çalıştık.

<?php
include 'connect.php'; //Veritabanı bağlantımızı çağırıyoruz.
?>
<!DOCTYPE html>
<html>

<head>
	<meta charset="utf-8">
	<title>Regresyon</title>
</head>

<body>
	<form action="" method="POST">
		<p>Lütfen X ve Y rakamları arasında boşluk bırakarak yazınız. ÖRN: 10 25 30 15 8 9 10 11 20 15 8 3 2 5 1</p>
		X: <input type="text" name="sayi1" placeholder="ÖRN: 10 25 30 15 8 9 10 11 20 15 8 3 2 5 1">
		Y: <input type="text" name="sayi2" placeholder="ÖRN: 10 25 30 15 8 9 10 11 20 15 8 3 2 5 1">
		<button type="submit" name="">Calculate</button>
	</form>
	<hr>
	<br>

	<?php
	if ($_POST) {  // EĞER POST OLMUŞSA BAŞLANGIÇ
		$x_array = $_POST['sayi1']; //X DEĞERLERİNİ ALIYORUZ.
		$y_array = $_POST['sayi2']; //Y DEĞERLERİNİ ALIYORUZ.

		$sayi1 = explode(" ", $x_array); //X SAYILARINI ELDE EDEBİLMEK İÇİN TEXT METNİNİ BOŞLUKLARINA GÖRE BÖLÜP DİZİYE ATIYORUZ.
		$sayi2 = explode(" ", $y_array); //Y SAYILARINI ELDE EDEBİLMEK İÇİN TEXT METNİNİ BOŞLUKLARINA GÖRE BÖLÜP DİZİYE ATIYORUZ.

		function regres($x, $y) //REGRASYON HESAPLAMA FONKSİYONU BAŞLANGIÇ
		{
			$sumx = array_sum($x); //X SAYILARINI TOPLUYORUZ. (DİZİYE ATADIĞIMIZ İÇİN DİZİ ELEMANLARINI TOPLUYORUZ.)
			$sumy = array_sum($y); //Y SAYILARINI TOPLUYORUZ. (DİZİYE ATADIĞIMIZ İÇİN DİZİ ELEMANLARINI TOPLUYORUZ.)

			function ort($a, $b) //X VE Y DİZİLERİNİN(SAYILARININ) ORTALAMASINI BULAN FONKSİYON
			{
				$ort = $a / count($b);
				return $ort;
			}
			$Mx = ort($sumx, $x); //X İÇİN ORTALAMASINI BULAN FONKSİYONU ÇAĞIRILMASI
			$My = ort($sumy, $y); //Y İÇİN ORTALAMASINI BULAN FONKSİYONU ÇAĞIRILMASI

			foreach ($x as $c) { //X'İN HER BİR ELEMANINDAN X DİZİSİNİN ORTALAMASINI(MX) ÇIKARTIYORUZ.
				$c = $c - $Mx;
				$x_Mx[] = $c;
			}

			foreach ($y as $c) { //Y'İN HER BİR ELEMANINDAN Y DİZİSİNİN ORTALAMASINI(MY) ÇIKARTIYORUZ.
				$c = $c - $My;
				$y_My[] = $c;
			}

			//(x-Mx)^2;
			function square($a) //YUKARDA ORTALAMAYI ÇIKARTTIKTAN SONRA X DEĞERİNİN KARESİNİ BULAN FONKSİYON
			{
				return ($a * $a);
			}
			$array2 = array_map("square", $x_Mx); //YUKARDA ORTALAMAYI ÇIKARTTIKTAN SONRA X DİZİSİNİN HER BİR ELEMANININ KARESİNİ BULUYORUZ.(YUKARIDAKİ square($a) FONKSİYONUNU ÇAĞIRIYORUZ.)

			//(x-Mx)(y_My);
			$array3 = [];
			for ($i = 0; $i < 10; $i++) { //YUKARDA ORTALAMAYI ÇIKARTTIĞIMIZ DÖNGÜLERDEN BULDUĞUMUZ SONUÇLARI ÇARPIYORUZ. SATIR BAKINIZ: 41 - 49 ARASI
				$array3[] = $x_Mx[$i] * $y_My[$i];
			}

			$c = array_sum($array2); //YUKARDA 56. SATIRDA BULDUĞUMUZ X DEĞERİNİN KARELERİNİ TOPLUYORUZ.
			$d = array_sum($array3); //YUKARIDA ORTALAMADAN BULDUĞUMUZ SONUÇLARI ÇARPTIĞIMIZ DÖNGÜDEKİ ELEMANLARI TOPLUYORUZ. SATIR BAKINIZ: 59 - 62 ARASI - $array3 DİZİSİNİN ADIMLARINI KONTROL EDİNİZ.

			$b = $d / $c; //$array3 DİZİSİNİN ELEMANLARININ TOPLAMINI $array2 DİZİSİNİN ELEMANLARININ TOPLAMINA BÖLÜMÜNÜ BULUYORUZ. BAKINIZ: REGRASYON FORMÜLÜ
			$a = $My - ($b * $Mx); // echo "y = ". $b . " x + " . $a; BUNUN SONUCUNDA $b VE $a SABİT DEĞERLERİNİ ELDE EDİYORUZ. BAKINIZ: REGRASYON FORMÜLÜ

			echo "Sonuç:";
			foreach ($x as $y) { // X VE Y DEĞERLERİNİN TEK TEK SONUÇLARINI YAZDIRIYORUZ.
				$y = ($y * $a) + ($b); // YUKARIDA  $a VE $b DEĞERLERİNİ BULMUŞTUK. BAKINIZ: REGRASYON FORMÜLÜ
				$regression[] = $y; // ÇIKAN SONUÇLARI DİZİYE ATIYORUZ.
			}

			return $regression; //BULUNAN SONUÇLARI DİZİ OLARAK GERİ DÖNÜYORUZ.
		} //REGRASYON HESAPLAMA FONKSİYONU BİTİŞ

		$regression = regres($sayi1, $sayi2);  // REGRASYON BULMA FONKSİYONUNU ÇAĞIRIYORUZ.
	?>
		<table style="width: 40%;" border="1">
			<tr>
				<th width="50">X</th>
				<th width="50">Y</th>
				<th width="50">Regresyon Sonucu</th>
			</tr>
			<?php
			// FONKSİYONDAN DÖNEN SONUÇ DİZİSİNİ DÖNGÜYLE HER ELEMANINI TEK TEK TABLODA LİSTELİYORUZ.
			// AYRINTILI GÖREBİLMEK İÇİN FOR DÖNGÜSÜNDEN ÖNCE var_dump($regression); YAPABİLİRSİNİZ.
			for ($i = 0; $i < count($regression); $i++) {
			?>
				<tr>
					<td><?php echo $sayi1[$i]; ?></td>
					<td><?php echo $sayi2[$i]; ?></td>
					<td><?php echo $regression[$i]; ?></td>
				</tr>
			<?php } ?>
		</table>
	<?php
		// FONKSİYONDAN DÖNEN SONUÇ DİZİSİNİ DÖNGÜYLE HER ELEMANINI TEK TEK VERİTABANINA EKLİYORUZ.
		for ($i = 0; $i < count($regression); $i++) {
			$kaydet = $db->prepare("INSERT into array1 set 
			X=:a,
			Y=:b,
			sonuc=:c
		");
			$insert = $kaydet->execute(array(
				'a' => $sayi1[$i],
				'b' => $sayi2[$i],
				'c' => $regression[$i],
			));
		}
	} // EĞER POST OLMUŞSA BİTİŞ
	else echo "Lütfen X ve Y değerlerini giriniz.";
	?>
</body>
</html>
Veritabanı Bağlantı Sayfamız (connect.php)
<?php
//VERİ TABANI BAĞLANTI SAYFAMIZ
try {
	$db = new PDO("mysql:host=localhost;dbname=test;charset=utf8", 'root', '');
	//$db=new PDO("mysql:host=localhost;dbname=VERITABANI_ADINIZ;charset=utf8",'VERITABANI_KULLANICI_ADI','VERITABANI_SIFRENIZ');
	echo "Veritabanı bağlantısı başarılı";
} catch (PDOException $e) {
	echo $e->getMessage();
}
?>