質問編集履歴

3

タイトルや文章を修正しました

2022/05/02 06:53

投稿

shirataki_udon
shirataki_udon

スコア0

test CHANGED
@@ -1 +1 @@
1
- 2次関数に対するBiweight推定法のやり方がわかりません
1
+ 【Python】2次関数に対するBiweight推定法のやり方がわかりません
test CHANGED
File without changes

2

プログラムを一部修正

2022/05/02 06:48

投稿

shirataki_udon
shirataki_udon

スコア0

test CHANGED
File without changes
test CHANGED
@@ -28,7 +28,6 @@
28
28
  #シートの最終行を取得
29
29
  Sheet_Max = len(df)
30
30
 
31
- print(Sheet_Max)
32
31
 
33
32
  #配列宣言
34
33
  x_1 = df["xi"].to_list()
@@ -47,7 +46,7 @@
47
46
  print(coe[0])
48
47
 
49
48
  plt.scatter(x, y, color="k")
50
- plt.plot(x,z2) #(0, b)地点から(xの最大値,ax + b)地点までの線
49
+ plt.plot(x,z2)
51
50
  plt.show()
52
51
 
53
52
  **表示結果

1

質問内容がわかりやすくなるよう追記しました。

2022/05/02 06:36

投稿

shirataki_udon
shirataki_udon

スコア0

test CHANGED
File without changes
test CHANGED
@@ -1,7 +1,55 @@
1
1
  Pythonについての質問です。
2
- 学校の課題で、2つのデータx,yの近似曲線、f(x)=a+b/x+c/(x^2)のa,b,cの値を最小二乗法とBiweight推定法を用いて求めるという課題が出されました。(x,yのデータはエクセルに用意されている)
2
+ 学校の課題で、2つのデータx,yの近似曲線、f(x)=a+b/x+c/(x^2)のa,b,cの値を最小二乗法とBiweight推定法(重さ追加して外れ値の影響を少なくする手法)を用いて求めるプログラムをかく課題が出されました。(x,yのデータはエクセルに用意されている)
3
+
4
+ そこで、最小二乗法でデータに沿った曲線をひくことはできたのですが、そこから重さを入れて計算をする方法がわかりません。
5
+ イメージとしては以下のサイトのような計算を2次関数でa,b,cの3つの変数を使ってやりたいと思っています。
6
+ URL:https://qiita.com/nn_tok/items/95a3baccacc492972fd4
7
+
8
+
3
9
 
4
10
  自分なりにBiweight推定法について調べてみましたが、ネットにある記事だと1次関数を取り扱っているものしかなく、f(x)のような2次関数のものについてはどうしたらいいのかわからず、手詰まり状態です。
5
11
 
12
+
6
13
  分かる方がいらっしゃいましたら、何卒お教えください。
7
14
  ※投稿主はPython初心者のため、できればわかりやすく説明していただけると助かります。
15
+
16
+
17
+
18
+ **現在のコード
19
+ **
20
+ import pandas as pd
21
+ import numpy as np
22
+ import matplotlib.pyplot as plt
23
+ import statistics as st
24
+
25
+ df = pd.read_excel("○○○.xlsx", sheet_name = "○○○", skiprows=9,usecols="B:C")
26
+ print(df)
27
+
28
+ #シートの最終行を取得
29
+ Sheet_Max = len(df)
30
+
31
+ print(Sheet_Max)
32
+
33
+ #配列宣言
34
+ x_1 = df["xi"].to_list()
35
+
36
+ y_1 = df["yi"].to_list()
37
+
38
+ x = np.array(x_1)
39
+ y = np.array(y_1)
40
+
41
+
42
+
43
+ coe = np.polyfit(x,y,2)
44
+ z2 = np.poly1d(coe)(x)
45
+ print(coe)
46
+
47
+ print(coe[0])
48
+
49
+ plt.scatter(x, y, color="k")
50
+ plt.plot(x,z2) #(0, b)地点から(xの最大値,ax + b)地点までの線
51
+ plt.show()
52
+
53
+ **表示結果
54
+ **![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-05-02/4834b404-116e-4fee-8356-969bccc94a5f.png)
55
+