Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1264to1268
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Standardabweichung und Steigung

Standardabweichung und Steigung
Michael
Hallo,
ich möchte die Standardabweichung in VBA berechnen dabei aber bei der Bestimmung der Std. Abweichung den darin enthaltenen Mittelwert mit dem Mittelwert der Steigung Multiplizieren. Danke für die Hilfe.
Viele Grüße
Michael
AW: Standardabweichung und Steigung
17.06.2012 12:08:01
Michael
Ich würde es lieber einfacher machen. Kann ich die Standardabweichung mit der Hand in Excel VBA berechnen anstatt die Formel StDev in VBA.
Danke nochmals
AW: Standardabweichung und Steigung
17.06.2012 17:28:02
fcs
Hallo Michael,
hier eine Variante die die Standardabweichung berechnet. Den Mittelwert kanst berechnen lassen (der Normalfall) oder vorgeben.
Gruß
Franz
Sub Test()
Dim dblStandardAbweichung
'Mittelwert wird im Makro berechnet
dblStandardAbweichung = fncStandardAbweichung(Range("B2:B13"))
MsgBox dblStandardAbweichung
'Mittelwert wird an Makro übergeben
dblStandardAbweichung = fncStandardAbweichung(Array(2, 4, 6, 8, 2.1, 3.9, 5.8, 8.1, _
1.95, 4.05, 6.1, 7.9), dblMittelwert:=10)
MsgBox dblStandardAbweichung
End Sub
Function fncStandardAbweichung(ByVal varWerte As Variant, Optional ByVal dblMittelwert = "") As  _
Double
Dim wsfnc As WorksheetFunction
Dim dblSumSqrY As Double
Dim dblAnzahl As Double
Dim varElement As Variant
Set wsfnc = Application.WorksheetFunction
If Not IsNumeric(dblMittelwert) Then dblMittelwert = wsfnc.Average(varWerte)
For Each varElement In varWerte
dblAnzahl = dblAnzahl + 1
dblSumSqrY = dblSumSqrY + (varElement - dblMittelwert) ^ 2
Next
fncStandardAbweichung = (dblSumSqrY / dblAnzahl) ^ 0.5
End Function

Anzeige
AW: Standardabweichung und Steigung
17.06.2012 20:30:57
Michael
Hallo Franz,
super Danke für die Antwort. Sieht super aus. Leider ist mein Problem komplizierter (wieso sollte es auch anders sein). Um kurz alles zu erklären. ich habe Messreihen die in verschiedenen Jahren liefen. Da berechne ich z.B. den Mittelwert so:
Function Mittelwert2(intYear As Integer, strSheet As String)
Dim objX As Object, objY As Object
Dim arrX, arrY, lngX As Long
With Sheets(strSheet)
arrX = .Cells(8, 1).Resize(Application.Count(.Range(.Cells(8, 1), .Cells(Rows.Count, 1).  _
_
End(xlUp))))
arrY = .Cells(8, 1).Resize(Application.Count(.Range(.Cells(8, 1), .Cells(Rows.Count, 1).  _
_
End(xlUp)))).Offset(, 4)
End With
Set objX = CreateObject("Scripting.Dictionary")
Set objY = CreateObject("Scripting.Dictionary")
For lngX = LBound(arrX) To UBound(arrX)
If Year(arrX(lngX, 1)) = intYear Then
objX(lngX) = arrX(lngX, 1) * 1
objY(lngX) = arrY(lngX, 1) * 1
End If
Next lngX
Mittelwert2 = WorksheetFunction.Average(objY.items)
End Function
Die Steigung berechne ich so:
Function Steigung2(intYear As Integer, strSheet As String)
Dim objX As Object, objY As Object
Dim arrX, arrY, lngX As Long
With Sheets(strSheet)
arrX = .Cells(8, 1).Resize(Application.Count(.Range(.Cells(8, 1), .Cells(Rows.Count, 1).  _
_
End(xlUp))))
arrY = .Cells(8, 1).Resize(Application.Count(.Range(.Cells(8, 1), .Cells(Rows.Count, 1).  _
_
End(xlUp)))).Offset(, 4)
End With
Set objX = CreateObject("Scripting.Dictionary")
Set objY = CreateObject("Scripting.Dictionary")
For lngX = LBound(arrX) To UBound(arrX)
If Year(arrX(lngX, 1)) = intYear Then
objX(lngX) = arrX(lngX, 1) * 1
objY(lngX) = arrY(lngX, 1) * 1
End If
Next lngX
Steigung2 = WorksheetFunction.Slope(objY.items, objX.items)
End Function

Was ich nun mache möchte ist:
1.) Den Mittelwert2 mit der Steigung2 Multiplizieren.
2.) Das gleiche für die Std. Abweichung. D.h. Den Mittelwert2 verwenden um die Std. Abweichung zu bestimmen aber der Mittelwert sollte mit der Steigung Multipliziert werden.
Danke für die Hilfe.
Viele Grüße
Michael
Anzeige
AW: Standardabweichung und Steigung
17.06.2012 23:35:38
fcs
Hallo Michael,
ich hab versucht das mal umzusetzen.
Die Erstellung der Daten-Objekte kann man auch in eine separate Prozedur auslagern, indem die beiden Objektvariablen objX und objY als Private für das ganze Modul deklariert werden. Dann erspart man sich ggf. das mehrfache Berechnen der gleichen Daten.
Gruß
Franz
'Erstellt unter Excel 2010
'Code in einem allgemeinen Modul
Option Explicit
Private objX As Object, objY As Object
Sub aatest()
Dim wsfnc As WorksheetFunction
Dim varSheets As Variant
Dim intJahr As Integer, varElement As Variant
Dim dblSteigung As Double, dblMittelwert1 As Double, dblMittelwert2 As Double
Dim dblStandAbw As Double
Dim rngX As Range
Set wsfnc = Application.WorksheetFunction
varSheets = Array(Worksheets("Tabelle1"))
For Each varElement In varSheets
For intJahr = 2007 To 2012
Call prcDatenObjekt_erzeugen(intYear:=intJahr, strSheet:=varElement.Name)
If objY.Count > 1 Then
dblMittelwert1 = wsfnc.Average(objY.items)
dblSteigung = wsfnc.Slope(objY.items, objX.items)
dblMittelwert2 = dblMittelwert1 * dblSteigung
dblStandAbw = fncStandardAbweichung(varWerte:=objY.items, dblMittelwert:=dblMittelwert1) _
MsgBox "Jahr: " & intJahr & vbLf _
& "Mittelwert1: " & dblMittelwert1 & vbLf _
& "Steigung: " & dblMittelwert1 & vbLf _
& "Mittelwert2: " & dblMittelwert2 & vbLf _
& "Standardabweichung: " & dblStandAbw & vbLf _
& "Anzahl Werte: " & objY.Count
Else
MsgBox "zu wenig Daten für Statistik im Jahr " & Format(intJahr, "0000") & vbLf _
& "Anzahl Werte: " & objY.Count
End If
Set objX = Nothing
Set objY = Nothing
Next
Set rngX = Nothing
Next
End Sub
Function fncStandardAbweichung(ByVal varWerte As Variant, Optional ByVal dblMittelwert = "") As  _
Double
Dim dblSumSqrY As Double
Dim dblAnzahl As Double
Dim varElement As Variant
If Not IsNumeric(dblMittelwert) Then
dblMittelwert = Application.WorksheetFunction.Average(varWerte)
End If
For Each varElement In varWerte
dblAnzahl = dblAnzahl + 1
dblSumSqrY = dblSumSqrY + (varElement - dblMittelwert) ^ 2
Next
fncStandardAbweichung = (dblSumSqrY / dblAnzahl) ^ 0.5
End Function
Sub prcDatenObjekt_erzeugen(ByVal intYear As Integer, ByVal strSheet As String)
Dim arrX, arrY, lngX As Long
Set objX = Nothing
Set objY = Nothing
With Sheets(strSheet)
arrX = .Cells(8, 1).Resize(Application.WorksheetFunction.Count(.Range(.Cells(8, 1), _
.Cells(Rows.Count, 1).End(xlUp))))
arrY = .Cells(8, 1).Resize(Application.Count(.Range(.Cells(8, 1), _
.Cells(Rows.Count, 1).End(xlUp)))).Offset(, 4)
End With
Set objX = CreateObject("Scripting.Dictionary")
Set objY = CreateObject("Scripting.Dictionary")
For lngX = LBound(arrX) To UBound(arrX)
If Year(arrX(lngX, 1)) = intYear Then
objX(lngX) = arrX(lngX, 1) * 1
objY(lngX) = arrY(lngX, 1) * 1
End If
Next lngX
End Sub
Function Mittelwert2(ByVal intYear As Integer, ByVal strSheet As String)
Call prcDatenObjekt_erzeugen(intYear, strSheet)
Mittelwert2 = WorksheetFunction.Average(objY.items)
Set objX = Nothing
Set objY = Nothing
End Function
'Die Steigung berechne ich so:
Function Steigung2(ByVal intYear As Integer, ByVal strSheet As String)
Call prcDatenObjekt_erzeugen(intYear, strSheet)
Steigung2 = WorksheetFunction.Slope(objY.items, objX.items)
Set objX = Nothing
Set objY = Nothing
End Function

Anzeige
AW: Standardabweichung und Steigung
18.06.2012 07:29:47
Michael
Hallo Franz,
Danke für deine Antwort. Sieht Super aus. ich glaube ich war in meiner vorherigen email nicht prezise genug.
Die Std. Abweichung, Mittelwert usw moechte ich für jedes Jahr separat bestimmen und ab Zelle (8,1) so wie ich es in dem Code gemacht hatte den ich die geschickt hatte. den Mittelwert möchte ich mit der Steigung
multiplizieren was in etwas so aussehen sollte:
Mittelwert neu = mittelwert*steigung
und die Std. Abweichung wie folgt:
Std. Abweichung(x) = Wurzel(w*(X-Erwartungswert(x))^2)
hoffe es ist klarer?
Danke nochmals für deine Hilfe.
Vg
Michael
Anzeige
AW: Standardabweichung und Steigung
18.06.2012 09:45:25
fcs
Hallo Michael,
... meiner vorherigen email .... ?
hoffe es ist klarer?
Leider Nein.
Ich kenne bisher weder eine Hauptprozedur noch weiß ich wie du die verschiedenen benutzerdefierten Funktionen nutzt - im Tabellenblatt oder innerhalb weiterer VBA-Prozeduren.
In soweit kann ich dir jetzt auch nicht weiterhelfen, was du anpassen muss.
Hier wäre es ggf. sehr hilfreich wenn du hier eine Datei hochladen würdest mit ein paar ggf. anonymisierten Beispieldaten-Daten.
Gruß
Franz
AW: Standardabweichung und Steigung
18.06.2012 22:02:54
Michael
Hallo Franz,
Sorry meinte meine Nachricht nicht email ;). Hier findest du mein Hauptprogramm samt Funktionen:

Die Datei https://www.herber.de/bbs/user/80622.xlsm wurde aus Datenschutzgründen gelöscht


Also da kannst du den mittelwert, steigung und std. abweichung finden die mittels meiner funktionen für jedes jahr berechnet werden. Was ich nun machen möchte ist folgendes:
Ich möchte nun den mittelwert wie folgt berechnen:
Mittelwert_Gewichtet = Mittelwert * Steigung
Std. Abweichung_Gewichtet = Wurzel(Steigung*(X-Mittelwert(x))^2)
Hoffe es nun nun klarer :)?
Viele Grüße
Michael
Anzeige
AW: Standardabweichung und Steigung
18.06.2012 23:37:52
fcs
Hallo Michael,
der Ausdruck
Std. Abweichung_Gewichtet = Wurzel(Steigung*(X-Mittelwert(x))^2)
ist für mich weiterhin ein Buch mit sieben Siegeln insbesondere "(X-Mittelwert(x))".
Was soll hier denn berechnet werden?
Gruß
Franz
AW: Standardabweichung und Steigung
18.06.2012 23:51:07
Michael
Hallo Franz,
was ich berechnen möchte ist eine neue Std. Abweichung die Gewichtet ist mit der Steigung. Also X ist der Wert für E8. Dann sieht die Formel so aus:
Das möchte ich aber in einer Funktion Std.DevGewichtet packen die folgendes macht:
1.) Das Jahr nimmt
2.) Die Funktionen Mittelwert2 und Steigung2 aufruft
3.) Den Gew. Mittelwert = Mittelwert2 * Steigung2 berechnet
4.) Dann die gewichtete Std. Abweichung_Gewichtet für ein gegebenes Jahr bestimmt.
Was als Formel dann da stehe würde wäre folgendes:
Std. Abweichung_Gewichtet(1996) = Wurzel(Steigung2(1996)*(*(X-Gew. Mittelwert(1996))^2)
X wäre z.B. E8 und die folgenden Zeilen bis zum Ende. Aber berechnet wird dann nur die Std. Abweichung_Gewichtet für das Jahr 1996.
Hoffe es ist klarer?
VG
Michael
Anzeige
AW: Standardabweichung und Steigung
19.06.2012 07:55:56
fcs
Hallo Michael,
100% klar ist es mir immer noch nicht.
Ich hab es jetzt so umgesetzt, dass ein für mich sinnvolles Ergebnis herauskommt.
https://www.herber.de/bbs/user/80631.xlsm
Gruß
Franz
AW: Standardabweichung und Steigung
19.06.2012 21:30:32
Michael
Hallo Franz,
Super Danke für deine Hilfe. Genau das wollte ich haben :). Dann haben wir uns doch verstanden :).
VG
Michael

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige